我遇到编译问题。以下是文件和继承。

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类,并且每个地址类型和日期类型也“具有”一个对象。
addressBookType类“具有” extPersonType类型的500个对象。
(如果需要的话,我可以复制粘贴.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的更多功能。

想知道可能是什么错误。

最佳答案

错误消息的关键部分是:


  未定义的符号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

10-06 10:39