-2

我有一个由 n 粒子组成的系统。一个粒子对象可以通过使用一个构造函数来初始化,该构造函数接受几个参数(比如双打)作为参数。

Particle p(para1, para2 ... , paraN);

我现在有一个需要 n 粒子数组的系统。我想构建一个构造函数,它接收对象数量以及粒子参数并创建一个 n-Particle 数组。

我尝试了以下方法:

class System {

public:
    Particle p[]; //declare dynamic array

    System() {}
    //Constructor
    System(int n, para1, para2 ... , paraN)
    {
        Particle p[n]; //Particle array of size n
        for(int i=0; i<n; i++)
        {
                Particle temp(para1, para2 ... , paraN);
                p[i] = temp;
            }
        }
};

该程序无法编译并给出以下错误:

error: no match for ‘operator=’ in ‘p[i] = tempp’
note: candidate is:
note: Particle& Particle::operator=(const Particle&)
note:   no known conversion for argument 1 from ‘Particle(double, double, double,     double)’ to ‘const Particle&’

一般来说,我是 C++ 和 OOP 的新手。任何有关如何克服此问题的帮助将不胜感激。

4

1 回答 1

0

当您使用p[i] = temp时,编译器会在带有签名的 Particle 类中查找赋值运算符的重载:

Particle& Particle::operator=(const Particle&)

这样做的目的是让您根据其类定义对象的分配如何工作。在这里,您可以进行属性分配或分配您定义的粒子的语义。当您在指针复制可能不是正确行为的对象中动态分配数据时,这特别有用。

看看这个页面:http ://www.cplusplus.com/articles/y8hv0pDG/ 它不仅解释了为什么以及何时需要赋值运算符,还解释了复制构造函数。

于 2013-10-21T15:54:40.863 回答