2

これを実行しようとすると、次のエラーが発生しました。

#include <iostream>
using namespace std;
struct VertexStatus
{
private:
    int _CurrentStatus;

public:
    static VertexStatus Discovered = new VertexStatus(1); //incomplete type is not allowed
    VertexStatus(int iStatus)
    {
        this->_CurrentStatus = iStatus;
    }
};

何か問題がありますか?

4

2 に答える 2

7

クラス本体から初期化を移動します。

struct VertexStatus
{
    ...
    static VertexStatus Discovered; // declaration
    ...
};

VertexStatus VertexStatus::Discovered(1); // definition (with initializer)

クラスがヘッダー ファイルで宣言されている場合は、最後の行 (定義) を対応する.cppファイルに配置します。

を削除したことに注意してくださいnew。これはポインターを返し、このコードにはポインターが含まれていません。

于 2013-04-15T06:09:52.720 に答える
-2

のサイズはVertexStatus、完全に宣言されるまではわかりませんが、それ自体の定義内には含まれていません。

代わりに、次のように、宣言の後に静的変数を初期化します。

struct VertexStatus {
    static VertexStatus Discovered;
    // ... other stuff
};

VertexStatus::Discovered = new VertexStatus(1);

これがヘッダー ファイル内にある場合は、対応する .cpp ファイル内に最後の行を配置する必要があります。

于 2013-04-15T06:10:00.740 に答える