make-файл наследования C ++ неопределенный символ, на который сначала ссылаются - PullRequest
0 голосов
/ 30 июня 2011

У меня проблема с компиляцией. Ниже приведены файлы и наследование.

dateType.h, dateTypeImp.cpp: определить и реализовать класс dateType
addressType.h, addressTypeImp.cpp: определить и реализовать класс addressType
personType.h, personTypeImp.cpp: определить и реализовать класс personType
extPersonType.h, extPersonTypeImp.cpp: определить и реализовать класс extPersonType
addressBookType.h, addressBookTypeImp.cpp: определить и реализовать класс addressBookType

Ниже приведено наследование и отношения с родителями.
extPersonType «расширяет» (наследует) класс personType, а также «имеет» один объект каждого addressType и dateType.
Класс addressBookType "имеет" 500 объектов типа extPersonType.
(Я могу скопировать и вставить файлы .h, если это необходимо)
Следовательно, в extPersonType.h есть операторы #include для "dateType.h", "addressType.h", "personType.h". В addressBookType.h есть #include "extPersonType.h".

У меня есть следующий Makefile:

all: main



personTypeImp.o: personTypeImp.cpp
    g++ -c -Wall personTypeImp.cpp

dateTypeImp.o: dateTypeImp.cpp
    g++ -c -Wall dateTypeImp.cpp

addressTypeImp.o: addressTypeImp.cpp
    g++ -c -Wall addressTypeImp.cpp

addressBookTypeImp.o: addressBookTypeImp.cpp
    g++ -c -Wall addressBookTypeImp.cpp

main.o: main.cpp
    g++ -c -Wall main.cpp

main: main.o addressBookTypeImp.o addressTypeImp.o dateTypeImp.o personTypeImp.o
    g++ -Wall main.o addressBookTypeImp.o addressTypeImp.o dateTypeImp.o personTypeImp.o -o main


clean:
    rm -f *.o *~ main

Все строки .o скомпилированы без ошибок. Последняя «основная» компиляция выдает эту ошибку:

make
g++ -c -Wall main.cpp
g++ -c -Wall addressBookTypeImp.cpp
g++ -c -Wall addressTypeImp.cpp
g++ -c -Wall dateTypeImp.cpp
g++ -c -Wall personTypeImp.cpp
g++ -Wall main.o addressBookTypeImp.o addressTypeImp.o dateTypeImp.o personTypeImp.o -o main
Undefined                       first referenced
 symbol                             in file
extPersonType::getStatus() const    addressBookTypeImp.o
extPersonType::isLastName(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) constaddressBookTypeImp.o

Перечислено больше функций из extPersonType.

Интересно, в чем может быть ошибка.

Ответы [ 2 ]

3 голосов
/ 30 июня 2011

Ключевая часть сообщения об ошибке:

Неопределенный символ extPersonType::....

В основном символы для класса extPersonType не являются частью вашей программы. Если вы посмотрите на make-файл, вы увидите, что

extPersonTypeImp.o: extPersonTypeImp.cpp
    g++ -c -Wall extPersonTypeImp.cpp

отсутствует и вам нужно добавить extPersonType.o к команде компоновщика как таковой

g++ -Wall main.o addressBookTypeImp.o addressTypeImp.o dateTypeImp.o personTypeImp.o extPersonTypeImp.o -o main
2 голосов
/ 30 июня 2011

Ну, вы на самом деле где-то написали эти функции или просто объявили их?Если у них есть тела, в каком файле они находятся в строке?

...