将新对象传递到函数中
Pass new object into function
我有一个函数: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 `::`
- 从使用概念定义的函数返回新对象
- 从 Rcpp 函数返回指向"新"对象的指针的正确方法
- 有没有一种方法可以从函数中返回一个新对象或对现有对象的引用
- 有没有办法删除传递给函数"foo(新对象())"的对象?
- 删除传递给 C++ 中成员函数的新对象
- 具有构造函数的新对象数组,需要在C++中设置参数
- 初始化新对象时C++默认构造函数和 POD 问题
- 如何创建一个C ++函数,该函数在每次用户输入新数据时创建新对象
- 在创建新对象时,尝试将参数提供给JNI对象的构造函数时会出现错误
- 将新对象作为默认参数传递给构造函数
- 将新对象放在构造函数初始化器中有多明智?
- 将现有对象传递给构造函数或构造一个新对象
- 将新对象传递给函数 C++
- c++在成员初始化中,在构造函数中传递新对象
- C等价于新对象(构造函数)
- 返回新对象的函数与将函数的结果分配给调用它的对象的 C++ 区别
- 在将已删除的指针分配给新对象时调用析构函数
- 是否可以在构造函数的初始化列表中初始化新对象并引用它?
- 展开新对象并将其添加到函数内的数组中
- C++:当在函数内部创建新对象并将其作为结果返回时,我必须使用新运算符来创建对象