C2065 необъявленный идентификатор при назначении определения для int - PullRequest
0 голосов
/ 07 апреля 2009

У меня небольшая проблема с определением. Я хочу присвоить его целочисленной переменной, но компилятор говорит, что он не объявлен.

Вот как выглядит код: defines.h

#ifndef DEFINES_H
#define DEFINES_H

#define MYDEFINE 2

#endif

myclass.h

namespace mynamespace {
class myClass {
    int someFunction();
};
}

myclass.cxx

#include "defines.h"
#include "myclass.h"
namespace mynamespace {
int myClass::someFunction() {
    int var = MYDEFINE;
    return 0;
}
}

В строке с присваиванием int происходит ошибка компилятора. Я также попытался использовать другое определение, определенное в том же заголовочном файле, что и выше, в качестве параметра функции с тем же эффектом. Есть идеи? Заранее спасибо.

Я знаю, что использование определений - плохая привычка, но я только расширяю существующий проект и стараюсь придерживаться их принципов проектирования.

РЕДАКТИРОВАТЬ: Сообщение об ошибке просто: Fehler 1 error C2065: 'MYDEFINE': nichtdeklarierter Bezeichner ... Как вы могли заметить, это не настоящий исходный код, но я думаю, что я был очень осторожен при составлении вопроса.

EDIT2: Спасибо за подсказку с предупреждением. В разных папках было 2 файла с одинаковыми именами. Я понятия не имею, почему компилятор не поднял это. Во всяком случае, это работает сейчас.

Ответы [ 5 ]

2 голосов
/ 07 апреля 2009

Вы должны проверить, действительно ли обозначен символ MYDEFINE.

Проверьте, где находится заголовочный файл объявлено действительно включено (и скомпилировано). Используйте #warning рядом с определением, чтобы убедиться, что оно скомпилировано для myclass.cxx:

#ifndef DEFINES_H
#define DEFINES_H

#define MYDEFINE 2
#warning My define is defined

#endif

Если он не компилируется (вы не найдете предупреждение в журнале компиляции), выполните поиск DEFINES_H. Это может быть уже определено где-то еще.

2 голосов
/ 07 апреля 2009

Давайте сложим все вместе:

    #ifndef DEFINES_H
    #define DEFINES_H
    #define MYDEFINE 2
    #endif

    namespace mynamespace {
    class myClass {
        int someFunction();
    };    // note ; missing in your code
    }

    namespace mynamespace {
    int myClass::someFunction() {
        int var = MYDEFINE;
        return 0;
    }

Компилируется без ошибок, поэтому в вашем # include что-то не так.

1 голос
/ 07 апреля 2009

Вероятно, вы жалуетесь на то, что вы не объявили свой класс. Попробуйте #include "myclass.h"

Edit:

О, не хватает ';' после объявления вашего класса.

0 голосов
/ 07 апреля 2009

Вам нужно посмотреть, что препроцессор делает с вашим кодом - попробуйте скомпилировать myclass.cxx с флагом -P и проверить сгенерированный файл .i.

0 голосов
/ 07 апреля 2009

В некоторых других заголовочных файлах также используется DEFINES_H?

Один аргумент для #pragma один раз ...

...