我在这里做错了什么?我正在尝试从 main 中的结构制作一个向量,但它一直显示错误。
#include <iostream>
#include <vector>
using namespace std;
struct A{
int y;
};
int main()
{
int x;
cin >> x;
vector<A> vertex;
for(int i = 0; i < x; i++){
vertex.push_back(x)
cout << vertex[i]<<endl;
}
return 0;
}
x 是 int 而不是 A
你需要
int main()
{
int x;
cin >> x;
vector<A> vertex;
for (int i = 0; i < x; i++) {
A a;
a.y = x;
vertex.push_back(a);
cout << vertex[i].y << endl;
}
}
您可以通过提供从 int 到 A 的隐式转换来使原始代码正常工作
您还需要为 A 提供一个<<运算符
您正在尝试将int
push_back()
到包含A
对象的vector
中。 您尚未定义从int
到A
的任何转换,因此出现错误。
您可以将构造函数添加到A
,该构造函数接收int
并将其分配给y
:
struct A{
int y;
A(int value) : y(value) {}
};
或者,您可以省略构造函数,而是创建一个A
对象并将其传递给push_back()
:
A a;
a.y = x;
vertex.push_back(a);
或者,使用聚合初始化:
vertex.push_back(A{x});
或者,您也可以改用emplace_back()
,这将使用指定的构造参数为您构造vector
内的A
对象:
vertex.emplace_back(x);
无论哪种方式,这都将修复您看到的错误。
然后,您会遇到一个新错误,因为您尚未定义用于打印A
对象的operator<<
,因此您还必须添加该错误:
struct A{
int y;
...
};
std::ostream& operator<<(std::ostream &os, const A &a) {
return os << a.y;
}
现在,您的代码将运行。