使用类成员C ++调用构造函数

时间:2014-06-12 19:01:37

标签: c++ constructor

求助:使用匿名类实例:

particle p1(vec(0,0,0),vec(1,0,0),vec(-0.5,0,0),1)

创建vec实例只是为了构造粒子实例。

我正在为物理学编写一个小程序,我使用矢量(在数学意义上)。矢量看起来像

class vec {
public:
    double x, y, z;
    vec() : x(0), y(0), z(0) {}
    vec(double xi, double yi, double zi) : x(xi), y(yi), z(zi) {}
};

所以我可以创建一个像(1,0,-1)的向量。在另一个对象中,我有

class particle {
public:
    double mass;
    vec pos, vel, acc;
    particle(vec posi, vec veli, vec acci, double m){
        pos = posi; vel = veli; acc = acci; mass = m;
    }
};

我不确定如何构造粒子类的实例。我试过了

particle p1((0,0,0),(1,0,0),(-0.5,0,0),1);

但是我收到一个错误:没有已知的从double到vec的转换。

3 个答案:

答案 0 :(得分:0)

您始终可以调用构造函数。您只需将其称为class_name(parameters, ...)

即可

在您的具体情况下,它看起来像这样:

particle p1(vec(0, 0, 0), vec(1, 0, 0), vec(-0.5, 0, 0), 1);

答案 1 :(得分:0)

发生的事情是你实际上正在调用逗号运算符。 Here is a quick example

cout << (0, 1, 2) << endl;

打印2.主题上有plenty of questions

确实有一个解决方案是使用particle p1(vec(0,0,0),vec(1,0,0),vec(-0.5,0,0),1)并创建匿名对象。

C ++ 11中引入了另一种语法,包括使用这样的花括号:

particle p1({0,0,0}, {1,0,0}, {-0.5,0,0}, 1)

这是完全相同的事情,但不那么冗长。

答案 2 :(得分:-1)

您似乎错放了括号,变量声明,参数和一些实例。

尝试:

particle p1 = new particle(new vec(0,0,0),new vec(1,0,0),new vec(-0.5,0,0),0);