0

私は 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がメンバーを期待していると怒鳴りました。他にも機能がありますが、ここで何が起こっているのかを理解できれば、それらは修正可能であるはずです。

4

1 に答える 1

1

コードを見るのに役立ちます。その音から、std::vector<T>ゼロ以外のサイズが与えられた with you タイプを作成しstd::vector<T>ます。オブジェクトを初期化する必要があり、明らかにコピーできるオブジェクトを与えていません。空のオブジェクトを作成して、すぐに作成できるオブジェクト (またはC++2011 システムを使用している場合はオブジェクト)std::vector<T>を使用することをお勧めします。push_back()emplace()

リンク エラーに関して: 使用している関数の一部を定義していないようです。あなたが与えた漠然とした説明では、これらが正確に何であるかを伝えることは不可能です. 正確なリンクエラーと想定される実装など、詳細を提供する必要があります。

于 2012-03-07T01:59:03.117 に答える