2015-12-06 2 views
0

Итак, я делаю класс камеры для программы OpenGL, и я столкнулся с проблемой с базовым кодом на C++, где мне не разрешено инициализировать его значениями. Моя реализация ниже:Нет экземпляра этого конструктора

class Camera{ 

public: 
    Camera(); 
    Camera(vec3 pos(), vec3 fron(), vec3 up(), GLfloat y, GLfloat p, GLfloat r); 

    ... 
}; 

Camera::Camera(vec3 pos(), vec3 fron(), vec3 up(), GLfloat y, GLfloat p, GLfloat r) 
{ 
    cout << "Hello World" << endl; 
} 

Остальное в мой основной:

int main(){ 

    GLfloat lastx = width/2.0f; 
    GLfloat lasty = height/2.0f; 
    GLfloat yaw = 90.0f; //yaw set to -90 because yaw of 0.0 points to right or something wierd happens in euler angles 
    GLfloat pitch = 0.0f; 
    vec3 camerapos = vec3(0.0f, 0.5f, -10.0f); 
    vec3 camerafront = vec3(0.0f, 0.5f, 1.0f); 
    vec3 cameraup = vec3(0.0f, 1.0f, 0.0f); 
    Camera cam(camerapos, camerafront, cameraup, yaw, pitch, GLfloat(0.0f)); 
} 

Как ни странно, я пытался инициализирует его пустым, и заполнить его (с той же функцией, заметьте), но Я назвал его init(). В тот момент мне сказали, что переменная должна иметь Classtype.

Что-нибудь очевидное, смотрящее мне в лицо?

ответ

2

В этом объявлении:

Camera(vec3 pos(), vec3 fron(), vec3 up(), GLfloat y, GLfloat p, GLfloat r); 

вы объявили pos, fron и up, как функции (не принимая никаких параметров и возвращение vec3).

Удалить скобки (как в декларации и определения):

Camera(vec3 pos, vec3 fron, vec3 up, GLfloat y, GLfloat p, GLfloat r); 
+1

Я не думаю, что это самый раздражающий синтаксического анализа; это то, как объявления функций. Подобно 'int a();' не MVP, просто досадно. –

+1

Вы правы, у меня есть мозг. – LogicStuff

+0

* facepalms * Бог, я устал, уверен, что на прошлой неделе я указал эту же ошибку другу. Теперь он отлично работает, твоя звезда. – Michael