この 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'