【问题标题】:C++ Static Class Member and Non-default ConstructorC++ 静态类成员和非默认构造函数
【发布时间】:2013-04-07 19:48:22
【问题描述】:

我有这门课:

class Object
{
    public:

    private:
        float _positionX, _positionY, _positionZ;
}

每次为它们分配新值时,我都需要进行检查并进行一些数学运算,并且我还在各个地方使用这些值。 我正在寻找一种比使用这些方法更简单的方法来分配和检查值:

class Object
{
    public:
        float GetPositionX();
        void SetPositionX(float value);
        //etc
    private:
        float _positionX, _positionY, _positionZ;
}

所以我正在尝试做这样的事情:

static class Vector3
{
    public:
        Vector3(float *valueX, float *valueY, float *valueZ)
        {
            _valueX = valueX;
            _valueY = valueY;
            _valueZ = valueZ;
        }
    private:
        float *_valueX, *_valueY, *_valueZ;
}
class Object
{
    public:
        Vector3 Position;
        //Position = Vector3(&_positionX, &_positionY, &_positionZ);
    private:
        float _positionX, _positionY, _positionZ;
}

这样我就可以在代码中的其他任何地方这样称呼它:

Object *myObj = new Object();
myObj->Position.x = 1; //assign, checks are done here
float myValue = myObj->Position.x; //receive, no checks needed

但编译器抱怨 Vector3 没有默认构造函数。 我还有一堆 Object,我不确定我是否以正确的方式使用静态 Vector3(如果它不会与其他对象的值冲突)。

我怎样才能让它工作?

【问题讨论】:

  • 您的编译器没有抱怨缺少分号或尝试创建静态类(还带有构造函数)?
  • 根据here,C++ 中没有static 类。
  • @LuchianGrigore - 根据这篇文章 (stackoverflow.com/questions/1635068/…) static class 无效
  • 我忘了在这里输入分号,很抱歉,但它们在代码中。
  • @LuchianGrigore,我相信如果没有对象,编译器必须抱怨。海湾合作委员会当然可以。在任何情况下,如果您真的希望将所有内容作为该声明的一部分,则执行class C{} static c; 可能会更清楚地表明它与对象有关。

标签: c++ static constructor


【解决方案1】:

给 Vector 添加一个默认构造函数:

Vector3()
{
   _valueX = NULL;
   _valueY = NULL;
   _valueZ = NULL;
}

【讨论】:

  • 或者从拥有该对象的类中调用当前的。
  • 调用非默认值不起作用,因为我调用的不是“Vector3 *myVector”,而是“Vector3 myVector”,因此代码无法编译。添加这个默认构造函数效果很好(我在父类的构造函数中调用了非默认构造函数),谢谢!
猜你喜欢
  • 2016-07-28
  • 1970-01-01
  • 2011-02-20
  • 2011-05-31
  • 1970-01-01
  • 2011-08-09
  • 2018-10-28
  • 1970-01-01
  • 2011-09-03
相关资源
最近更新 更多