доступ к функциям, объявленным в каком-то другом файле, используя #include в c ++ - PullRequest
0 голосов
/ 26 ноября 2011

У меня есть файл EnabledSets.cpp, в котором я вызываю функцию в следующей форме

   ChessImpl::SetEventAttribute(ec.getEventId(sid-1), DISABLE, transition.tid);

Это я делаю в файле с именем enabledSet.cpp, в который я включаю ChessImpl.h

в chessImpl.h Я включаю Chess.h, который, в свою очередь, определяет функцию в Chess.cpp

, но когда я запускаю свой код, я получаю эту ошибку

  EnabledSets.cpp $(.text+0xa0f): undefined reference to `ChessImpl::SetEventAttribute(EventId, unsigned int, unsigned int)' 

Спасибо взаранее

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Когда вы пишете команду типа g++ file_name.cpp, вы говорите GCC скомпилировать и связать этот файл в законченную программу.Сбой, потому что этот единственный файл не является полной программой;части программы находятся в других исходных файлах.

Вы можете либо скомпилировать все сразу с помощью:

g++ file1.cpp file2.cpp -o myprog

, либо вы можете скомпилировать каждый файл по отдельности (в файл .o) изатем свяжите их как отдельный шаг:

g++ -c file1.cpp
g++ -c file2.cpp
g++ file1.o file2.o -o myprog

Первый способ проще, если вы просто вводите команды в командной строке, но он очень неэффективен при работе с большой программой, поскольку он перекомпилирует все, даже еслиочень мало что изменилосьБольшие приложения обычно имеют системы сборки, которые компилируют исходные файлы по отдельности и перекомпилируют только те, которые были изменены.

0 голосов
/ 29 ноября 2011

Это не Java, вам нужно передать gcc ALL .cpp файлы одновременно или скомпилировать и связать отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...