C ++ - 构造函数和自引用类

时间:2015-07-08 04:27:35

标签: c++ constructor self-reference

在开始之前,我想对任何试图帮助我的人表示感谢。所以现在,对于手头的问题。

我有一个Vector类,我需要一个名为零的静态对象,它是一个x = 0,y = 0和z = 0的向量

这是我的代码(删除了一些不重要的位......)

class Vector
{
public:
    Vector(double x, double y, double z);

    double x, y, z;

    static Vector* zero(0.0, 0.0, 0.0);
}

我收到错误:“预期参数声明符” 我正在使用的编译器是Clang / LLVMM ......它是Xcode附带的...再次,非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

在课程中,您将Vector::zero声明为Vector*,然后使用Vector构造函数进行初始化。这不会起作用,因为构造函数不会返回Vector*。这可以通过在类声明之外动态分配Vector::zero来解决:

class Vector
{
    ...
};

Vector* Vector::zero = new Vector(0, 0, 0);

或者,更好的是 - 不要担心指针和动态内存分配:

class Vector
{
    public:
        ...
        static Vector zero;
        // ^^^ No pointers
};

Vector Vector::zero(0, 0, 0);

答案 1 :(得分:-2)

说实话,根据您的需要持有参考或std::unique_ptr可能更好。这样可以从图片中删除手动内存管理。