将新对象传递到函数中

Pass new object into function

本文关键字:函数 新对象 对象      更新时间:2023-10-16

我有一个函数:Vector::Vector integrate(Vector::Vector start, Vector::Vector end, long int elapsedtime);,其中Vector是我创建的类:


class Vector {
    public: 
    double x, y, z;
                   Vector(); 
                   Vector::Vector addToSelf(Vector &right); 
};

我想用一个空白的Vector来调用integrate作为它的第一个参数。Vector的构造函数默认情况下会这样做,所以我尝试这样做:

acceleration = integrate(Vector::Vector blank, wc.readAccelerometer(), time);

然而,这给了我错误:

error: expected primary-expression before ‘blank’

当我在integrate函数调用中创建Vector时,我想也许我不需要给它一个名称:

acceleration = integrate(Vector::Vector, wc.readAccelerometer(), time);

但这给了我同样的错误:

CCD_ 11。

我总是可以传递一个指针,更改integrate签名以匹配,但这似乎不必要地混乱。我还可以创建一个新的Vector然后将其传递给integrate:


Vector::Vector blank;
acceleration = integrate(blank, wc.readAccelerometer(), time);

这样做不会出错,但我认为一次性完成是可能的。我做错了什么?

编辑:感谢Karl von Moor的评论,我已经修复了它——将Vector::Vector更改为Vector(因为我没有定义名称空间),一切都正常了。谢谢

这一行不是正确的C++语法:

acceleration = integrate(Vector::Vector blank, wc.readAccelerometer(), time);

要创建默认构造的Vector对象,请使用Vector():

acceleration = integrate(Vector(), wc.readAccelerometer(), time);

在C++11中,还可以编写Vector{}甚至{}来构造一个值初始化对象。

请注意,通常您希望通过引用const来传递"大"对象,以避免不必要的复制。因此,尝试将integrate的声明更改为:

Vector integrate(const Vector& start, const Vector& end, long int elapsedtime);

不要在类声明和函数的参数名称中使用范围解析运算符。因此,删除Vector::,直到您没有定义函数为止。示例:

// declaration
class A {
A(); 
void f(int x);
};
// definitions
A::A(){/*...*/};
A::f(int x){/*...*/}; //note that the parameter x doesn't have a `::`