Неопределенная ошибка ссылки для работы в другом файле

У меня есть игровая программа, и я очень разочарован. Все работало нормально, и я решил очистить свою программу, создав отдельные файлы для каждого набора функций. Код очень длинный с несколькими файлами, но вот основная идея:

Я на Windows XP, используя Code :: Blocks IDE

В моем entity.h Я объявил все мои функции и переменные для этого класса. В моем entity.cpp Я включил его, а также во все мои другие файлы. Но я все еще получаю огромный список ошибок, которые говорят мне, что у меня есть неопределенная ссылка на все методы в entity.h, а также на все мои другие заголовочные файлы. Например, у меня есть вызов функции print() чтобы было легче распечатать вещи, и это первый метод, который я вызываю из entity.h файл. Я получаю эту ошибку:

Вот код для печати ():

void print(string f) {
cout<<f<<endl;
}

Как я это называю:

void Player::win(){
entity e;
e.print("You have defeated the orc");

}
Ошибка:

В функции ‘ZN6Player3winEv’:
неопределенная ссылка на «entity :: print (std :: string)»

И да, у меня есть object из entity,

0

Решение

Undefined reference ошибки происходят во время ссылки (в отличие от времени компиляции). Ваш код, кажется, компилируется правильно, поэтому ваши заголовки, вероятно, верны. Но вы не связываете все вместе, чтобы сделать исполняемый файл. Вы не упомянули платформу, компилятор или систему сборки, поэтому я не могу точно сказать, как это исправить, но в целом компилятор генерирует *.o файл для каждого *.cpp файл (это компиляция), а затем связывает *.o файлы вместе, чтобы создать исполняемый файл. Вы должны убедиться, что все ваши *.o файлы связаны друг с другом (также, возможно, вы не компилируете *.cpp файлы в *.o файл).

0

Другие решения

По быстрому предположению, вы не связываете entity.o файл в двоичный файл.

Если вы используете Linux G ++, то что-то вроде:

g++ -o binary entity.cpp game.cpp

должен скомпилировать и связать файлы cpp с бинарным.

За Code::Blocks чтобы выбрать файлы в определенной группе сборки, вам нужно щелкнуть правой кнопкой мыши на целевом приложении и выбрать properties, Это всплывет Project/target options, Перейти к Build Targets Вкладка. В правом нижнем углу страницы находится список Build target files, Вы должны убедиться, что все файлы, которые вносят вклад в исполняемый файл, выбраны как часть вашей цели сборки. Это означает, что вам нужен флажок в файле entity.cpp. Это гарантирует, что файл, содержащий код для entity::print компилируется и связывается с целевым исполняемым файлом. Обратите внимание, что Build target files вкладка относится к выбранному build target в списке с левой стороны. Вам нужно убедиться, что файл проверен на все build targets что это принадлежит.

В общем, когда вы добавляете файлы в Code :: Blocks и где вы видите флажки для целей, к которым должен быть добавлен файл, вы должны убедиться, что все цели, к которым принадлежит новый файл, проверены. По умолчанию мастер оставляет все флажки не отмеченными. В вашем случае, поскольку это простой проект, вы должны убедиться, что он проверен для каждой цели (обычно он начинается с отладки и выпускается как две цели).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector