2015-05-30 6 views
-1

Имею проблемы со следующим кодом:ошибка C2143: отсутствует синтаксическая ошибка: отсутствует ';' до '*'

Я создал класс камеры.

class Camera 
{ 
private: 
public: 
    vec3 Position; 
    vec3 Forward; 
    vec3 Up; 

    float speed; 
    float angleSpeed; 

    // Constructor with vectors 
    void newCamera(void); 
    Camera();  
    ~Camera(void); 
}; 

Вот код .cpp для класса Camera.

void Camera::newCamera(void) 
{ 
    Position = vec3(0.0f, 2.0f, 0.0f); 
    Forward = vec3(0.0f, 0.0f, -1.0f); 
    Up = vec3(0.0f, 1.0f, 0.0f); 
    speed = 0.2f; 
    angleSpeed = 0.3f; 
} 

Camera::Camera() 
{ 
} 

Camera::~Camera(void) 
{ 
} 

И я создаю его в другом классе.

class Surface 
{ 
private: 
public: 
    Camera * cam; 
    Surface(); 
    ~Surface(void); 
}; 

Вот код .cpp для класса Surface.

Surface::Surface() 
{ 
    cam->newCamera(); 
}; 

Surface::~Surface(void) 
{ 
}; 

В настоящее время я получаю сообщение об ошибке, что says- «ошибка C2143: синтаксическая ошибка: отсутствующий ';' до '*' "

+0

где? какой файл? какая линия? – Casey

+0

@Casey В настоящее время это происходит в классе Surface, когда я объявляю «Camera * cam» – TheAuzzieJesus

+1

@TheAuzzieJesus: вы включаете заголовок для 'Camera' в заголовочный файл декларации' Surface'? – vsoftco

ответ

3

Ваш класс поверхности не знает, что такое Camera. Вам нужно переслать объявление (это указатель типа или ссылка, сокращение времени компиляции) и включить заголовок в исходный файл; Кроме того, вы не можете вызывать методы из пустого экземпляра:

Поверхностное определение класса:

#ifndef SURFACE_H 
#define SURFACE_H 

class Camera; 

class Surface 
{ 
    private: 
    public: 
     Camera * cam; 
     Surface(); 
     ~Surface(void); 
}; 

#endif  

Поверхностный реализацию класса:

#include "Surface.h" 

#include "Camera.h" 

Surface::Surface() : cam(new Camera) 
{ 
    cam->newCamera(); 
}; 

Surface::~Surface(void) 
{ 
    delete cam; 
    cam = nullptr; //Not really needed in this case, but a good habit none-the-less 
}; 
+0

кажется, что это была проблема;) +1 для интуиции! – vsoftco

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