2013-12-13 182 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文件位於正確的位置,我猜測編譯器可以看到它們,因爲它是從main工作的。我看周圍的一些其他問題,最答案似乎指向任何語法錯誤或真的不適合在這裏(除非我忽視的東西)

在這裏發生了什麼任何想法向前聲明?

+1

參與我的心靈感應電路...投射光環領域...掃描ESP干涉圖案...嗯,抱歉,沒有。沒有工作。 –

+3

哦,主意:它可能有助於查看有問題的標題。以及您的構建命令和搜索路徑。 –

+1

好吧,讓我們猜測一下:你把'MapCell'的聲明放在名字空間'std'中,是嗎?或者...你包括不同的頭文件叫做相同的?或者...您在此期間編輯了標題? –

回答

1

克里斯和greatwolf帶領我到固定的問題的解決方案。我需要向編譯器轉發聲明我的MapCell類,以便能夠鏈接到整個類。

+0

除非有循環依賴關係,否則include * should *工作,但如果適用,則前向聲明更好。 – chris