我遇到了编译问题。以下是文件和继承。
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“extends”(继承)personType类,它还“拥有”每个addressType和dateType的一个对象。
addressBookType类“有”500个extPersonType类型的对象
(我可以复制粘贴.h文件以备不时之需)
因此,extPersonType.h中包含“dateType.h”,“addressType.h”,“personType.h”的#include语句。 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的更多函数。
想知道可能是什么错误。
答案 0 :(得分:3)
错误消息的关键部分是:
未定义的符号
extPersonType::...
。
基本上,类extPersonType
的符号不属于您的程序。如果你看一下makefile,你会看到
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
答案 1 :(得分:2)
那么,你真的在某处写过这些函数,或者只是声明它们吗?如果他们确实有身体,在什么文件中,他们是否内联?