2013-12-13 143 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