Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
ivansky
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 2
1

Линкер ругается и не может собрать проект

29.12.2017, 11:21. Просмотров 855. Ответов 2
Метки нет (Все метки)

Доброго времени суток, эксперты и знатоки,

Обращаюсь к вам с просьбой о помощи.

Пишу небольшую консольную программу для ведения базы студентов.

https://bitbucket.org/ivansky/cpp-oop-coursework

Пожалуйста, помогите понять причину, почему не собирается проект?

Есть подозрения, что я неправильно использую шаблон у класса BinaryStreamObject.

Собираю с помощью CMake.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
./cmake --build /Users/ivan/Workspace/cpp-oop-coursework/cmake-build-debug --target main -- -j 2
[ 12%] Linking CXX executable main
Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
 "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -no_deduplicate -dynamic -arch x86_64 -macosx_version_min 10.12.0 -o main -search_paths_first -headerpad_max_install_names CMakeFiles/main.dir/src/main.cpp.o CMakeFiles/main.dir/src/BinaryStreamObject.cpp.o CMakeFiles/main.dir/src/Department.cpp.o CMakeFiles/main.dir/src/Group.cpp.o CMakeFiles/main.dir/src/Student.cpp.o CMakeFiles/main.dir/src/Subject.cpp.o CMakeFiles/main.dir/src/UniversityDataBase.cpp.o -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/9.0.0/lib/darwin/libclang_rt.osx.a
Undefined symbols for architecture x86_64:
  "BinaryStreamObject<Department>::setEntityId(unsigned int)", referenced from:
      UniversityDataBase::addDepartment(Department*) in UniversityDataBase.cpp.o
  "BinaryStreamObject<Department>::readEntityId(std::__1::basic_istream<char, std::__1::char_traits<char> >&)", referenced from:
      Department::readEntity(std::__1::basic_istream<char, std::__1::char_traits<char> >&) in Department.cpp.o
  "BinaryStreamObject<Department>::writeEntityId(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      Department::writeEntity(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in Department.cpp.o
  "BinaryStreamObject<Group>::setEntityId(unsigned int)", referenced from:
      UniversityDataBase::addGroup(Group*) in UniversityDataBase.cpp.o
  "BinaryStreamObject<Group>::readEntityId(std::__1::basic_istream<char, std::__1::char_traits<char> >&)", referenced from:
      Group::readEntity(std::__1::basic_istream<char, std::__1::char_traits<char> >&) in Group.cpp.o
  "BinaryStreamObject<Group>::writeEntityId(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      Group::writeEntity(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in Group.cpp.o
  "BinaryStreamObject<Student>::setEntityId(unsigned int)", referenced from:
      UniversityDataBase::addStudent(Student*) in UniversityDataBase.cpp.o
  "BinaryStreamObject<Student>::readEntityId(std::__1::basic_istream<char, std::__1::char_traits<char> >&)", referenced from:
      Student::readEntity(std::__1::basic_istream<char, std::__1::char_traits<char> >&) in Student.cpp.o
  "BinaryStreamObject<Student>::writeEntityId(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      Student::writeEntity(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in Student.cpp.o
  "BinaryStreamObject<Subject>::setEntityId(unsigned int)", referenced from:
      UniversityDataBase::addSubject(Subject*) in UniversityDataBase.cpp.o
  "BinaryStreamObject<Subject>::readEntityId(std::__1::basic_istream<char, std::__1::char_traits<char> >&)", referenced from:
      Subject::readEntity(std::__1::basic_istream<char, std::__1::char_traits<char> >&) in Subject.cpp.o
  "BinaryStreamObject<Subject>::writeEntityId(std::__1::basic_ostream<char, std::__1::char_traits<char> >&)", referenced from:
      Subject::writeEntity(std::__1::basic_ostream<char, std::__1::char_traits<char> >&) in Subject.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [main] Error 1
make[2]: *** [CMakeFiles/main.dir/all] Error 2
make[1]: *** [CMakeFiles/main.dir/rule] Error 2
make: *** [main] Error 2
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2017, 11:21
Ответы с готовыми решениями:

Проблема создал проект в builder 2009 а в 2007 builder проект не открывается может кто то сталкивался?
Проблема создал проект в builder 2009 а в 2007 builder проект не открывается...

Собрать новый проект из существующих форм
Возникла такая проблема я создал программу все прекрасно работало, но при...

Пятнашки - как собрать весь код в один проект и скомпилить
Есть маленькая просьба по игре пятнашки: как собрать весь код в один проект и...

При попытке скомпилировать проект не может найти frxClass.hpp
При компиляции получаю следующую ошибку: Unit5.h(10): 'frxClass.hpp' file not...

Линкер не видит функцию
Доброго времени суток. Написал программу, но при компиляции ошибка, мол,...

2
hoggy
Нарушитель
Эксперт С++
7087 / 3130 / 648
Регистрация: 15.11.2014
Сообщений: 7,209
Завершенные тесты: 1
29.12.2017, 12:56 2
Лучший ответ Сообщение было отмечено ivansky как решение

Решение

Цитата Сообщение от ivansky Посмотреть сообщение
Пожалуйста, помогите понять причину, почему не собирается проект?

такое случается с плохими ленивыми мальчиками,
которым впадлу взять в руки и почитать букварь.

в этот хедер:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef OOPCOURSEWORK_BINARYSTREAMOBJECT_H
#define OOPCOURSEWORK_BINARYSTREAMOBJECT_H
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
template <class T>
class BinaryStreamObject {
public:
    unsigned int entityId = 0;
 
    static unsigned int readEntityId(istream&);
    void writeEntityId(ostream&);
    void setEntityId(unsigned int id);
 
    static T* readEntity(istream&);
    virtual void writeEntity(ostream&) = 0;
 
};
 
 
#endif //OOPCOURSEWORK_BINARYSTREAMOBJECT_H
необходимо перетащить всю реализацию из спп файла:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<class T>
unsigned int BinaryStreamObject<T>::readEntityId(istream& stream) {
    auto entityIdString = new char[10];
    stream.readsome(entityIdString, sizeof(unsigned short int));
    return static_cast<unsigned int>(stoi(entityIdString));
}
 
template<class T>
void BinaryStreamObject<T>::writeEntityId(ostream& stream) {
    const char* entityIdString = to_string(this->entityId).c_str();
    stream.write(entityIdString, sizeof(entityIdString));
}
 
template<class T>
void BinaryStreamObject<T>::setEntityId(unsigned int id) {
    this->entityId = id;
}
после чего файл BinaryStreamObject.cpp необходимо уничтожить.
0
ivansky
0 / 0 / 0
Регистрация: 24.12.2015
Сообщений: 2
29.12.2017, 14:16  [ТС] 3
Цитата Сообщение от hoggy Посмотреть сообщение
которым впадлу взять в руки и почитать букварь.
Прошу прощения за мою неграмотность

Могу я узнать почему этот класс необходимо реализовывать в файле заголовков? Это как то связано с шаблонами?

Добавлено через 1 минуту
Все понял. Нашел объяснение.

https://isocpp.org/wiki/faq/templates#templates-defn-vs-decl
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2017, 14:16

Ошибка ,линкер еррор
Всем привет. Делаю прогу (инст), почти доделал, выскакивает ошибка Unresolved...

Extern или линкер ослеп
Вобщем имеем в h файле namespace GL { extern unsigned ProcsCount;...

Линкер не находит реализацию стандартных функций
Здравствуйте, у меня следующая проблема: с недавних пор линкер совсем обленился...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru