如本网站所示,使用 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'