0

クラスの新しいインスタンスを作成しようとしていますが、コードをコンパイルしようとすると、LNK2001の未解決の外部シンボルエラーが発生します。

私が知る限り、どちらの場合も、別のクラスを含めたのとまったく同じ方法でクラスを作成して含めました。

#include "class.h"      // In main.cpp 

class Class {           // In class.h
   private: 
       // etc. 
   public:         
       Class(); 
       ~Class(); 
       // etc.
}; 

#include "class.h"      // In class.cpp

これらのエラーの一般的な/考えられる原因はありますか、または問題の原因を見つけるための良い方法はありますか?

編集:エラーは

"エラー1エラーLNK2019:未解決の外部シンボル" class Max __cdecl max(void) "(?max @@ YA?AVMax @@ XZ)関数_main main.obj Racing"

編集:どちらの場合も、クラスはプロジェクトに含まれる.hファイルと.cppファイルに実装されます。エラーは1つのクラスでのみ発生します。

4

1 に答える 1

1

あなたがこれを書いた場所:

Max max();

あなたが意図したのはmax、型の変数を宣言することでしたMax

maxC ++は、型のオブジェクトを返す関数を宣言するつもりであると考えていますMax。これが探しているものです。

あなたがこれを言うなら:

Max max;

問題はなくなります。

編集:これは、引数をとらないコンストラクターでのみ発生します。コンストラクターが引数を取る場合、C ++はパラメーター(定数や式などの右辺値になります)から、それが関数宣言ではなくクラスのインスタンス化であることを確認できます。

Max max(5);  // Clearly cannot be a function, because 5 is an rvalue

または

Max max(int); // Clearly cannot be an instantiation, because int is a type

ただし、コンストラクターが引数をとらない場合、それらを区別するために、インスタンス化する場合は角かっこを削除する必要があります。

于 2012-05-10T19:07:10.337 に答える