对不起,标题听起来有点混乱,让我解释一下。
我有一个结构,它有一个结构向量,如下所示:
struct foo {
int x;
vector < foo > bar;
};
但是当我尝试这种语法时,我得到一个“没有重载方法实例”的错误:
foo a;
foo b;
b.x = 3;
a.bar.push_back(b);
基本上,我只是想在a
和之间创建一个“关系” b
,它bar
是包含所有相关实例的关系向量foo
。
有什么建议么?
不幸的是,根据 C++ 标准,您的代码是非法的,因为您将不完整的类型作为模板参数传递给标准库,这通常是被禁止的,并且std::vector
一般规则没有例外。
Boost 文档有很好的解释。
您可以使用明确支持不完整类型的容器,就像 Boost 那样,或者使用std::vector<std::unique_ptr<foo>>
,因为标准在 20.9.1p5 中说:
的模板参数可能是不完整的类型
T
。unique_ptr
可能是你的编译器,我的没有错误或警告。
#include <iostream>
#include <vector>
using namespace std;
struct foo {
int x;
vector < foo > bar;
};
int main()
{
foo a;
foo b;
b.x = 3;
a.bar.push_back(b);
cout<<a.bar[0].x;
cout<<"\n";
return 0;
}