0

クラスのヘッダー ファイルを作成し、main.cpp に "theclassname.h" を #include しましたが、コンパイルしようとすると "ClassName::TheConstructor(bool, int*, std::basic_string, std: :アロケータ >)""

Classname.cpp ファイル内にコンストラクターと "ClassName::start" という関数をコーディングしましたが、何らかの理由で、この開始関数と cpp ファイルにもコーディングされているデストラクタに未定義の参照の問題が発生しています。ヘッダー ファイル内にコード化された関数を呼び出すたびにこのエラーは発生しませんが、.cpp ファイルでコード化された関数を呼び出すたびにこれがトリガーされます。

これに関する多くの投稿を見てきましたが、正しいパラメーターと戻り値の型で適切にコーディングし、関数名がヘッダー ファイルで定義されているものと同じであることを確認しました。私はそれを10回以上チェックしたので、何かのスペルミス以外にこれを引き起こしている可能性がある.

ありがとう

#ifndef THECLASSNAME_H
#define THECLASSNAME_H
#include <iostream>

class TheClassName {
 public:
   TheClassName(bool theBool=true, int *theArray=0,
        std::string message="-1");
~TheClassName();
void start();
void setBool(bool theBool) {aBool=theBool;}
 bool getBool() {return aBool;}
 void setMessage(std::string message) {mssg=message;}
 std::string getMessage() {return mssg;}
 std::string getHello() {return hello;}
private:
int *anArray;
bool aBool;
std::string mssg;
std::string hello;

void aFunction1(bool);
void aFunction2();
void aFunction3();

void aFunction4();
};

 #endif

申し訳ありませんが、誰もが修正しました!私のメイクファイルで私がした

exec1: main.o classname.o
     g++ -o exec1 main.o

それ以外の

exec1: main.o classname.o
     g++ -o exec1 main.o classname.o

どうもありがとうございました!

4

2 に答える 2

2

リンカー段階でエラーが発生しているようです。ヘッダー ファイルだけでなく、C++ クラス定義を含むファイルもコンパイルしていますか? クラスの関数定義を含む別の C++ ファイルが必要です。このファイルもコンパイルし、リンカー コマンド ラインにオブジェクト ファイルを含めて、最終的な実行可能ファイルをリンクするときに未定義の参照エラーが発生しないようにします。

于 2012-04-30T15:48:00.620 に答える
1

可能であれば、コードを投稿し、ビルド コマンドと出力も投稿してください。

これはコンパイルの問題ではなくリンケージの問題であり、コンストラクタとデストラクタの宣言を含むコンパイル ユニットが実行可能ファイルにリンクされていないようです。つまり、リンカが関数を見つけられません。

于 2012-04-30T15:50:55.110 に答える