Я работаю над проектом, который требует от меня использования различных классов.
По какой-то причине, когда я пытаюсь скомпилировать, я получаю сообщение об ошибке:
Undefined symbols for architecture x86_64:
Я изначально работал над классом, который мы можем назвать User
который имел декларацию, как это в user.h
:
#ifndef USER_H
#define USER_H
...other include statements
class User
{
public:
User();
public and private members and functions
};
#endif
Определения методов размещены в отдельном файле в том же каталоге, user.cpp
,
Всякий раз, когда я пытался скомпилировать, я получал сообщение о том, что для конструктора и деструктора были неопределенные символы. У меня были оба из них определены в .cpp
файл, но я не мог получить ошибку, чтобы уйти.
Я включаю класс User в main со следующим:
#include "user.h"
Мне удалось это исправить, вставив весь код из user.cpp
подать в user.h
, но теперь у меня проблемы с другими классами, чей код мне не разрешено изменять.
Прямо сейчас у меня есть класс под названием GMLReader в gmlreader.h
с методом, который я вызываю статически. Однако, несмотря на то, что я импортирую его для своего основного файла, я получаю следующий код ошибки всякий раз, когда пытаюсь вызвать его:
Undefined symbols for architecture x86_64:
"GMLReader::read(char const*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)", referenced from:
_main in cchnzOEh.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
Я использую следующее для компиляции с sn.cpp
корпус мой главный:
g++ -g -Wall -o sn sn.cpp
Есть ли какая-либо причина, по которой произошла бы ошибка, и как я могу исправить ее?
Вам также необходимо скомпилировать и связать user.cpp:
g++ -g -Wall -c user.cpp -o user.o
g++ -g -Wall -o sn sn.cpp user.o
Других решений пока нет …