2013-12-06 2 views
1

Я получаю «объявление не объявляет ничего [-fpermissive] error»; Вот мой код;декларация ничего не объявляет [-fpermissive] error

#ifndef CAMERA_H 
#define CAMERA_H 
#include "Vector.h" 
#include <string> 

using namespace std; 

class Camera 
{ 
    private: 
     int id; 
     float position[3]; 
     Vector gaze; 
     Vector up; 
     float left; 
     float right; 
     float bottom; 
     float top; 
     float near; 
     float far; 
     int type; 

    public: 
     Camera(int i,string c, string g, string u, string f, string t); 
     int getID() {return id; } 
     float* getPosition() { return position; } 
     Vector getGaze() { return gaze; } 
     Vector getUp() { return up; } 
     float getLeft() {return left;} 
     float getRight() {return right;} 
     float getBottom() {return bottom;} 
     float getTop() {return top;} 
     float getNear() {return near;} 
     float getFar() {return far;} 
     int getType() {return type;} 
}; 

#endif // CAMERA_H 

ошибка начинается с "float near;" и продолжается следующие 3 строки.

В чем причина этой ошибки и как ее исправить.

+1

Вы точно скопировали код? –

+0

Что находится в «Vector.h»? –

+0

@ KristianD'Amato Да, я скопировал правильно. – xxlali

ответ

7

Замените near и far на что-то еще, по крайней мере, на тест, например. near_ и far_: Я подозреваю, что вы компилируете какой-нибудь забавный заголовок, который определяет near и far, чтобы быть ничем. В далеком прошлом эти два были ключевыми словами, используемыми на некоторых платформах для работы с указателями разных размеров.

Если вы хотите проверить теорию, обработайте исходный файл с помощью опции -E (возможно, вам придется удалить другие параметры из строки компиляции, например, -c): с помощью этой опции компилятор создает предварительно обработанный вывод. Если вы поймете это и посмотрите на свой класс, я вполне уверен, что он не будет содержать имена участников.

+0

сменив имена, но я не мог понять причину ошибки. что не так с 2-мя разными классами, имеющими одно и то же имя поля? Thnx. – xxlali

+3

Проблема заключается в том, что строки определены как ничто, используя препроцессор, то есть нечто вроде '#definined near'. В старые времена некоторые указатели были объявлены как «int near * pointer», но новые компиляторы не понимают эту нотацию. Используя макрос, объявление сделается похожим на «int * pointer;» на компилятор, и ваше объявление станет «float;», не объявляя ничего. Основная проблема более страшна: ваш учитель не обновил свои заголовки с по крайней мере 10, более вероятно, 20, лет ([здесь] (http://en.wikipedia.org/wiki/Far_pointer) немного больше Информация). –

+0

Определено в windef.h на моей системе. – Caterpillar

-1

Я подозреваю, что «рядом» и «далеко» являются зарезервированными именами где-то в «Vector.h» или строке. Переименование этих переменных должно быть исправлено.

+2

err, no, его не ключевое слово в C++. – PlasmaHH

+0

Какая версия C++ вы получили, где 'type' является ключевым словом ...? –

+0

Ах, достаточно справедливо для вас обоих - я ошибся. Я отредактирую соответственно – foips

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