对不起,标题听起来有些混乱,让我解释一下。
我有一个结构,它有一个结构矢量,如下所示:
struct foo {
int x;
vector < foo > bar;
};
但是当我尝试这种语法时,我收到“No Instance of Overloaded Method”的错误:
foo a;
foo b;
b.x = 3;
a.bar.push_back(b);
基本上,我只是想在a
和b
之间创建“关系”,bar
是包含foo
所有相关实例的关系向量。< / p>
有什么建议吗?
答案 0 :(得分:3)
不幸的是,根据C ++标准,您的代码是非法的,因为您将不完整的类型作为模板参数传递给标准库,这通常是禁止的,std::vector
没有例外一般规则。
Boost文档has a great explanation。
您可以使用明确支持不完整类型的容器,如Boost那样,或使用std::vector<std::unique_ptr<foo>>
,因为标准在20.9.1p5中说:
T
的模板参数unique_ptr
可能是不完整的类型。
答案 1 :(得分:-1)
可能是你的编译器,我没有给出任何错误或警告。
#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;
}