0

コンパイルに問題があります。以下は、ファイルと継承です。

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 クラスの定義と実装

以下は、継承と has-the の関係です。
extPersonType は personType クラスを「拡張」(継承) し、各 addressType および dateType の 1 つのオブジェクトも「持っています」。
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 のその他の関数がリストされています。

エラーが何であるか疑問に思います。

4

2 に答える 2

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
于 2011-06-30T03:38:50.150 に答える
2

ええと、実際にそれらの関数をどこかに書いたり、単に宣言したりしましたか? 本文がある場合、どのファイルにあり、インラインですか?

于 2011-06-30T03:35:43.740 に答える