2009-04-07 5 views
0

정의에 작은 문제가 있습니다. 정수 변수에 할당하고 싶지만 컴파일러에서 선언하지 않았다고합니다. 여기 C2065 정의를 int에 할당하는 동안 선언되지 않은 식별자

코드가 어떻게 표시되는지를 보여줍니다 같은 : defines.h

#ifndef DEFINES_H 
#define DEFINES_H 

#define MYDEFINE 2 

#endif 

에서 MyClass.h

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

myclass.cxx

INT 할당을 라인에서
#include "defines.h" 
#include "myclass.h" 
namespace mynamespace { 
int myClass::someFunction() { 
    int var = MYDEFINE; 
    return 0; 
} 
} 

컴파일러 오류가 발생합니다. 또한 위와 같은 헤더 파일에 정의 된 다른 정의를 동일한 효과의 함수 매개 변수로 사용하려고했습니다. 어떤 아이디어? 미리 감사드립니다.

나는 정의를 사용하는 것이 나쁜 습관이라는 것을 알고 있지만, 기존 프로젝트를 확장하고 그들의 디자인 방식을 유지하려고합니다.

편집 : 오류 메시지는 간단히 : Fehler 1 error C2065: 'MYDEFINE': nichtdeklarierter Bezeichner ... 이것은 실제 소스 코드가 아니라는 것을 알 수 있습니다. 그러나 나는 질문을 정리하는 동안 매우 신중하다고 생각합니다.

EDIT2 : # 경고와 함께 힌트를 주셔서 감사합니다. 서로 다른 폴더에 같은 이름의 파일이 두 개있었습니다. 나는 왜 컴파일러가 이것을 가져 오지 않았는지 전혀 모른다. 어쨌든 이제는 작동합니다.

+0

정확한 오류 메시지를 포함 시키십시오. 때로는 악마가 자세히 나와 있습니다. – unwind

답변

2

당신은 심볼 MYDEFINE가 정말 정의되어 있는지 여부를 확인해야합니다.

이 선언 된 헤더 파일이 실제로 포함되어 있는지 확인하십시오. (및 컴파일 됨). ,

#ifndef DEFINES_H 
#define DEFINES_H 

#define MYDEFINE 2 
#warning My define is defined 

#endif 

가 컴파일되지 않은 경우 (당신이 컴파일 로그에 경고 메시지를 찾을 수 있습니다) DEFINES_H에 대한 검색을합니다이 myclass.cxx 컴파일되어 있는지 확인하기 위해 정의 근처 # 회신 사용합니다. 이미 다른 곳에 정의되어있을 수 있습니다.

0

일부 다른 헤더 파일도 DEFINES_H? 한번의 #pragma에 대한

한 인수 ...

+0

프로젝트에서 두 개의 "defines.h"헤더가있는 문제가 계속 발생하므로 차이가 없습니다. – MSalters

+0

일단 Microsoft가 표준이 아닌 #pragma를 추가합니다. –

+0

#pragma once는 MS가 아닙니다. gcc는 또한 그것을 구현합니다. 모든 프리 프로세서에서 인식되지는 않지만 매우 다양한 환경에 있다면 사용할 수 없습니다. – danio

2

의 완성 :

#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를에 뭔가 문제가있다.

+0

+1 멋진 잡기. 약간의 문법 오류는 대개 컴파일러에게 많은 슬픔을 주며 이는 고전적인 오류입니다. –

+0

힌트를위한 감사합니다, 나는 잊었다; 또한 #include "myclass.h". – DaClown

1

당신이 수업을 선언하지 않았다고 불평 할 것 같습니다. ';'

아, 실종 "에서 MyClass.h"

편집을 #include 한 시도 클래스 선언 후에.

+0

ㅎ, 오 잘. 나는 예제 코드로 그렇게 문자 화해서는 안된다. – veefu

+0

+1 지적 해주세요. – DaClown

0

전처리 기가 코드에 수행하는 작업을 확인해야합니다. myclass.cxx를 -P 플래그로 컴파일하고 생성 된 .i 파일을 검사 해보십시오.