c++ - 递归push_back不适用于自定义类

标签 c++ class object gcc vector

我确信这个问题已经被问了 100 次,但是 push_back 是一个非常受欢迎的问题,我搜索了很长时间都找不到答案。

我的问题是 this page它表示递归 push_back 应该在多个级别上完美工作,没有任何问题。

vector< vector<int> > vI2Matrix;    // Declare two dimensional array
vector<int> A, B;

A.push_back(10);
A.push_back(20);
A.push_back(30);
B.push_back(100);
B.push_back(200);
B.push_back(300);

vI2Matrix.push_back(A);
vI2Matrix.push_back(B);

但是,在我的版本中,我尝试使用自定义类 Vector3f 而不是 int。我自然会认为下面的代码可以工作,但事实并非如此。它在第 1 级有效,但在第 2 级无效。

vector< vector<Vector3f> > m;
vector<Vector3f> a;
a.push_back(Vector3f(1,2,3)); // <- 1st level works
m.push_back(a); // <- 2nd level doesn't

返回的错误代码为:

gobase.h:343: error: no match for ‘operator=’ in ‘* __result = * __first’
demo1.h:38: note: candidates are: Vector3f& Vector3f::operator=(Vector3f&)

Vector3f 类是在外部头文件中定义的,我不应该修改它。您是否认为给定头文件中缺少某些内容导致我无法使用 push_back

头文件中定义了以下函数:

class Vector3f {
    float _item[3];

public:
    float & operator [] (int i) 
    Vector3f(float x, float y, float z) 
    Vector3f()
    Vector3f & operator = (Vector3f & obj) 
    Vector3f & operator += (Vector3f & obj) 
    bool operator ==(Vector3f & obj)
}

更新 这是头文件中的 & operator =:

Vector3f & operator = (Vector3f & obj) 
{
    _item[0] = obj[0];
    _item[1] = obj[1];
    _item[2] = obj[2];

    return *this;
};

你能告诉我应该如何修改它才能使 push_back 工作吗?

查看在 GCC 中解决此问题所需的完整步骤,我将其作为附加答案发布。

最佳答案

您的 Vector3f 类中缺少赋值运算符。 vector 的push_back的模板扩展需要一个赋值运算符将值复制到 vector 中,因此编译器提示它找不到它。如果要修改该 header ,您还需要定义一个 Vector3f(cont Vector3f& other) 复制构造函数。

关于c++ - 递归push_back不适用于自定义类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8282763/

相关文章:

c++ - 自动将 "Additional include directory"添加到静态库的用户

objective-c - Objective C 按类创建对象

javascript - lodash中的cloneDeep(a)和extend({}, a)有什么区别?

java - 循环遍历对象的 HashSet Java

c++ - 在进行添加时如何使用 C++ 模板避免临时对象?

C++11 : Compare lambda expression

c++ - 如何在 c++17 中传递 Callable 对象以与 std::invoke 一起使用

java - 类方法与实例方法

java - 两张图片,一张在 Java 中

javascript - 如何访问同一个 javascript 对象的成员?