2013-12-13 3 views
2

나는이 프로젝트에 다음 코드 : 내가 컴파일 갈 때클래스 유형 오류의 이름이없는

#ifndef MAP_H 
    #define MAP_H 

    #include <string> 
    #include "MapCell.h" 

    using namespace std; 

    class Map{ 
    public: 
     Map(); 
     Map(int, int); 
     Map(string); 
     virtual ~Map(); 
    private: 
     int grid_size; 
     MapCell * grid; 

    }; 

    #endif 

, 나는 오류 "오류 : 'MapCell'는 타입의 이름이없는"을 얻을 아직 때 필자는 MapCell * 그리드를 주석 처리하고 메인에서 다음 코드 블록을 실행합니다.

#include <iostream> 
#include <cstdlib> 

#include "MapCell.h" 

using namespace std; 


int main() { 

    MapCell * test_var; 

    test_var = new MapCell(); 

    delete test_var; 


    cout << "Press enter to end process..."; 
    cin.get(); 
    cin.get(); 
    return 0; 
} 

모두 잘 작동합니다. MapCell.h 및 .cpp 파일이 올바른 위치에 있으며 컴파일러가 기본에서 작동하므로 볼 수 있다고 생각합니다. 다른 질문을 읽었을 때 대부분의 대답은 문법 오류나 앞으로 선언 할 때 실제로 여기에 맞지 않는 것을 가리킬 것입니다. (뭔가 간과하지 않는 한)

여기에 무슨 일이 벌어지고 있는지에 대한 아이디어가 있습니까?

+1

내 텔레파시 회로 사용 ... 아우라 필드 계획 ... ESP 간섭 패턴 스캔 ... 음, 죄송합니다. 일하지 않았어. –

+3

아, 생각 : 문제의 헤더를 보는 것이 도움이 될 수 있습니다. 빌드 명령과 검색 경로는 물론. –

+1

자, 네가 네임 스페이스'std'에'MapCell'의 선언을 넣었습니까? 또는 ... 같은 머리글을 포함 시켰습니까? 또는 ... 그 동안 헤더를 편집 했습니까? –

답변

1

chris와 greatwolf가 문제를 해결하는 해결책을 찾았습니다. 컴파일러가 전체 클래스에 링크 할 수 있도록 내 MapCell 클래스를 선언해야했습니다.

+0

include *는 순환 종속성이 없으면 작동해야하지만 적용 가능한 경우 전달 선언이 더 좋습니다. – chris

관련 문제