1

对不起,标题听起来有点混乱,让我解释一下。

我有一个结构,它有一个结构向量,如下所示:

struct foo {
int x;
vector < foo > bar;
};

但是当我尝试这种语法时,我得到一个“没有重载方法实例”的错误:

foo a;
foo b;
b.x = 3;
a.bar.push_back(b);

基本上,我只是想在a和之间创建一个“关系” b,它bar是包含所有相关实例的关系向量foo

有什么建议么?

4

2 回答 2

3

不幸的是,根据 C++ 标准,您的代码是非法的,因为您将不完整的类型作为模板参数传递给标准库,这通常是被禁止的,并且std::vector一般规则没有例外。

Boost 文档有很好的解释

您可以使用明确支持不完整类型的容器,就像 Boost 那样,或者使用std::vector<std::unique_ptr<foo>>,因为标准在 20.9.1p5 中说:

的模板参数可能是不完整的类型Tunique_ptr

于 2013-11-02T22:02:02.330 回答
-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;
} 

在此处输入图像描述

于 2013-11-02T21:48:19.450 回答