将新对象传递给函数

时间:2012-02-19 16:31:23

标签: c++

我有一个功能: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); 
};

我想以integrate为空白Vector为其第一个参数致电。 Vector的构造函数默认执行此操作,因此我尝试执行此操作:

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

然而,这给了我错误:

error: expected primary-expression before ‘blank’

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

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

但这给了我同样的错误:

expected primary-expression before ‘,’ token

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


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

哪个没有错误,但我认为一次性完成它是可能的。我做错了什么?

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

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

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

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

答案 1 :(得分:1)

不要在类声明和函数的参数名称中使用范围解析运算符。因此,在您未定义函数之前,请删除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 `::`