简体   繁体   English

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

[英]Calling constructor with class member, C++

SOLVED: used anonymous class instances: 求助:使用匿名类实例:

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

creates the vec instances just to construct the particle instance. 创建vec实例只是为了构造粒子实例。

I'm writing a little program for physics and I'm using vectors (in the math sense). 我正在写一个物理学的小程序,并且正在使用矢量(在数学意义上)。 The vector looks like 向量看起来像

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) {}
};

so I can create a vector like a(1,0,-1). 所以我可以创建一个像a(1,0,-1)的向量。 In a different object, I have 在另一个对象中,我有

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;
    }
};

I'm not sure how to construct an instance of the particle class. 我不确定如何构造粒子类的实例。 I tried 我试过了

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

but I get an error: no known conversion from double to vec. 但我收到一个错误:没有已知的从double到vec的转换。

You can always call an constructor. 您可以随时调用构造函数。 You just call it like this class_name(parameters, ...) 您可以像这样调用它class_name(parameters, ...)

In your specific case it would look like this: 在您的特定情况下,它看起来像这样:

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

What's happening is that you're in fact calling the comma operator. 发生的事情是您实际上在调用逗号运算符。 Here is a quick example : 这是一个简单的例子

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

prints 2. There are plenty of questions on the subject. 印刷品2.关于这个问题很多问题

One solution is indeed to use particle p1(vec(0,0,0),vec(1,0,0),vec(-0.5,0,0),1) and create anonymous object. 一种解决方案确实是使用particle p1(vec(0,0,0),vec(1,0,0),vec(-0.5,0,0),1)并创建匿名对象。

An alternative syntax was introduced in C++11 that consists in using curly braces like this: C ++ 11中引入了另一种语法,其中包括使用大括号,如下所示:

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

It's exactly the same thing but less verbose. 这是完全相同的东西,但是比较冗长。

You appear to have misplaced a parenthesis, a variable declaration, a parameter, and some instantiations. 您似乎放错了括号,变量声明,参数和某些实例化。

Try: 尝试:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM