私は VS2010C++ コンソール アプリケーションに取り組んでおり、同じタイプ (Thing) の静的オブジェクトと動的オブジェクトを保持する Manager クラスを作成しました。そのうちの 1 つはベクトルです。
私はもともと、マネージャークラスのコンストラクターで、それが構成されているクラスにはデフォルトのコンストラクターがないというエラーが発生しました (ただし、実行時にオブジェクトをインスタンス化する必要があり、実行時に入力する必要があるため、デフォルトのコンストラクターを持つべきではありません)情報) 保持されたクラスのデフォルト コンストラクター (何もしない) を作成することになり、その後続行することができました。
次に、プログラムに必要なすべての機能を完了し、LNK2019 の「関数 B で参照されている未解決の外部シンボル MethodA に関する何か」を大量に取得しました。
最初に、実行時に実行する必要がある場合、マネージド クラスの既定のコンストラクターが必要なのはなぜですか?
次に、これらの LNK2019 を取り除くにはどうすればよいですか? (これらのメソッドはすべてヘッダー内でインラインでマークされており、マネージャー クラスへの参照、またはマネージャー クラスからの参照のみであり、名前の競合はありません。) 小さなメモとして、. (静的メンバーの場合)、および -> (動的メンバーの場合)?
編集:必要性を単一のメソッドに制限し、他の静的を動的に変更することにより、デフォルトのコンストラクターを取り除くことができました
リンカー エラーの場合: Thing.h 内
class Thing{
public : int ** Array;
public : int size;
public : Point pi;
public : SinglyLinkedList * moves;
...
public :inline bool operator==(const Thing * _thing);
...
};
Thing.cpp
bool Thing::operator==(const Thing * _Thing){
for(int ii = 0; ii < m; ii++){
for(int jj = 0; jj < m; jj++){
if(Array[ii][jj] != _Thing->Array[ii][jj]){
return false;
}
}
}
return true;
}
ThingMgr.h
class ThingMgr {
public : Thing * control;
public : Thing * Current;
public : Thing * previous;
public : int size;
main.cpp
int _tmain{
...
ThingMgr * TestTings= new ThingMgr(num);
...
if(testThings->control->operator==(testThings->Current)){ // pretty sure its here as it is not called anywhere else in the function.
...
}
エラー
1>Project_1.obj : error LNK2019: unresolved external symbol "public: bool __thiscall Thing::operator==(class Thing const *)" (??8Board@@QAE_NPBV0@@Z) referenced in function _wmain
かっこを入れる必要があったのではないかと思ったのですが、VSがメンバーを期待していると怒鳴りました。他にも機能がありますが、ここで何が起こっているのかを理解できれば、それらは修正可能であるはずです。