0

この Web サイトが示すように、次のコードは C++11 を使用する Clang ではサポートされません。

class Node {
    vertex<Node> children;
};

エラーが発生します:

field has incomplete type 'Node'

ただし、このようなコードは、C++98 および C++11 の gcc などの他のコンパイラでサポートされています。

私は私が使用できることを知っています

vertex<Node*>

代わりに、現在、C++98 の古いコードとの非互換性の問題があります。

私の質問は、(1) C++ 11 で Clang を使用してそのようなコードをコンパイルできますか? (2) ツリー構造は必然的に上記のような定義が必要だと思いますが、そのような機能のサポートがなければ、どうすればそのようなツリー構造を実現できますか?


アップデート:

頂点の定義を忘れて申し訳ありません。次のコードはどうでしょうか。

class Node {
    vector<Node> children;
};

頂点をコンテナー ベクトルに変更するだけです。C++11 の Clang では有効ではありませんが、他のコンパイラや C++98 では問題ありません。


再度更新:

ベクトルは正常に動作しているようですが、リストは失敗します

class Node {
    std::list<Node> children;
};

再度更新:

以下は私のコードです:

#include <list>

using namespace std;

class Node {
    list<Node> nodes;
};

int main(int argc, char const *argv[])
{
    return 0;
}

またはより簡単:

#include <list>

class Node {
    std::list<Node> nodes;
};

int main() {}

私は Clang 4.0 を使用しており、次のコマンドを使用してコンパイルしています。

clang++ -std=c++11 -stdlib=libc++ test.cpp

エラーは

/usr/bin/../lib/c++/v1/list:212:9: error: field has incomplete type 'Node'
4

1 に答える 1