【问题标题】:C++ - Constructors and self-referencing classesC++ - 构造函数和自引用类
【发布时间】:2015-07-08 04:27:34
【问题描述】:

在开始之前,我只想对任何试图帮助我的人说声谢谢。那么现在,解决手头的问题。

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

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

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 附带的...再次感谢您的帮助!

【问题讨论】:

    标签: c++ constructor self-reference


    【解决方案1】:

    在类中,您将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);
    

    【讨论】:

    • 非常感谢!我已经在这个上扯了几个小时的头发。
    • 您还应该注意一件事。静态成员需要(!)类之外的定义(正如在答案中的两个示例中所做的那样)
    【解决方案2】:

    说实话,根据您的需要,最好保留参考资料或std::unique_ptr。这从图片中删除了手动内存管理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      相关资源
      最近更新 更多