因此,我有两个不同的结构体(a 和 b),它们具有相同的变量,并在结构体 b 中重载了 = 运算符,用于将 a 转换为 b。
我希望能够简单地将 a vector 分配给 vector b,但编译器给我一个错误:
main.cpp|61|error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::vector<_Ty>' (or there is no acceptable conversion)|
我假设我已经重载了 = 运算符,并且它会简单地迭代 vector a 并为每个实例使用该 = 运算符。我该怎么做?
这是代码:
#include <iostream>
#include <vector>
using namespace std;
struct a
{
int x, y;
a() {}
a(int _x, int _y)
{
x = _x;
y = _y;
}
};
struct b
{
int x, y;
b(){}
b(int _x, int _y)
{
x = _x;
y = _y;
}
b& operator=(const a& _a)
{
x = _a.x;
y = _a.y;
return *this;
}
};
int main()
{
a a_test(1,2);
std::vector<a> a_vec;
std::vector<b> b_vec;
for(int i = 0; i <10; i++)
{
a_vec.push_back(a_test);
}
/*
for(int i = 0; i<a_vec.size(); i++)
{
b_vec.push_back(a_vec[i]);
}
*/
b_vec = a_vec;
return 0;
}
最佳答案
问题是您的 operator=
仅适用于单个元素,而不适用于整个 vector 。
您需要定义一个将 A
转换为 B
的构造函数。
然后你可以使用std::vector::assign而不是std::vector::operator= .
#include <iostream>
#include <vector>
using namespace std;
struct A
{
int x, y;
A(): x(0), y(0) {}
A(int x, int y): x(x), y(y) {}
};
struct B
{
int x, y;
B(): x(0), y(0) {}
B(int x, int y): x(x), y(y) {}
// need to construct B from A
B(const A& a): x(a.x), y(a.y) {}
B& operator=(const A& a)
{
x = a.x;
y = a.y;
return *this;
}
};
int main()
{
A a_test(1,2);
std::vector<A> a_vec;
std::vector<B> b_vec;
for(int i = 0; i <10; i++)
{
a_vec.push_back(a_test);
}
// b_vec = a_vec; // not like this
b_vec.assign(a_vec.begin(), a_vec.end()); // like this
return 0;
}
注意:我更改了您的一些名称,因为 C++
标准规定我们不应以下划线“_”开头变量名称。
关于c++ - 如何简单地分配不同结构的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30822865/