我有一个功能: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
(因为我没有定义名称空间),一切正常。谢谢。
答案 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 `::`