2013-04-07 3 views
0

У меня есть этот класс:C++ Статического класса член и конструктор не по умолчанию

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 не имеет конструктор по умолчанию. У меня также есть пучок Объект, и я не уверен, правильно ли я использую статический вектор3 (если он не будет конфликтовать с другими значениями объекта).

Как я могу заставить это работать?

+2

Ваш компилятор не жалуется на отсутствие запятой или пытается сделать статический класс (с конструктором еще)? – chris

+0

Согласно [здесь] (http://stackoverflow.com/questions/9321/how-do-you-create-a-static-class-in-c) в C++ нет классов 'static'. –

+0

@ LuchianGrigore - Согласно этому сообщению (http://stackoverflow.com/questions/1635068/can-a-class-be-declared-static-in-c) 'static class' недействителен –

ответ

1

Добавить конструктор по умолчанию Vector:

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

Или вызовите текущий из класса, у которого есть объект. – chris

+0

Вызов не по умолчанию не работает, потому что код не будет компилироваться, так как я не называю «Vector3 * myVector», а «Vector3 myVector». Добавление этого конструктора по умолчанию отлично работало (и я вызываю конструктор неполного класса в конструкторе родительского класса), спасибо! – Danicco

Смежные вопросы