命名空间中的“符号'映射'无法解析”

时间:2011-09-29 14:04:02

标签: c++ eclipse map namespaces eclipse-cdt

您好!

我目前正在开发游戏引擎。即使我刚开始,我已经遇到了问题。

我有这段代码:

#ifndef INSTANS_H_
#define INSTANS_H_
#include <map>
#include "Core/Version.h"
#include "Core/Window.h"
#include "Core/Component.h"
#include "Core/Game.h"

namespace Instans
{
    class Window;
    class Component;

    class Engine
    {
    public:
        Engine();
        ~Engine();

        void AddComponent(char* name, Component* component, int priority = 10);
        void RemoveComponent(char* name);

        void SetFramerateLimit(int limit);

        int GetFramerate();
        int GetFramerateLimit();

        void Run(char* title, int width, int height);
        void Load();

        void Update();
        void Render();

        void Release();
    protected:
    private:
        Window* _window;

        // Game, managers etc.
        std::map<int, char*, Component*> _components;
    };
};
#endif

即使我已经包含,Eclipse也会给我以下错误:

无法解析符号'map'Instans.h

可能是什么原因?

6 个答案:

答案 0 :(得分:3)

正确限定的名称是::std::map,因为您已经在其他名称空间中。

答案 1 :(得分:1)

map的第三个参数是比较函数类型,而不是第三个包含数据类型的参数。这可能是造成问题的原因。

我不能完全告诉你要做什么但是如果你试图将int / string复合键映射到你可以使用的组件:

std::map<std::pair<int, std::string>, Component*>

答案 2 :(得分:0)

要映射的第三个模板参数应该是比较函数。我猜你正试图从int映射 - &gt; (char *,Component )。你需要将char 和Component *包装成一个struct或一对......

typedef std::pair<char*, Component*> CharAndComponentPair;
typedef std::map<int, CharAndComponentPair> ComponentMap;

ComponentMap _components;

答案 3 :(得分:0)

如果这是一个Eclipse问题而不是编译问题,那么问题是索引器透视图中缺少一堆包含目录。

添加以下内容对我有用,但可能取决于您实际存在的特定设置:

/usr/include/c++/4.6.1
/usr/include/                
/usr/include/c++             
/usr/include/c++/4.6         
/usr/include/x86_64-linux-gnu
/usr/include/asm-generic
/usr/include/c++/4.6.1/x86_64-linux-gnu/

可以在Project>Properties>C++ Include Paths

中设置它们

答案 4 :(得分:0)

如果你为eclipse安装了CDT插件,那么一切都应该是开箱即用的。 我试图声明一个向量,但是当它实例化它时,它给出了相同的未解决的符号错误。检查CDT论坛,我发现有时只是将错误转换为警告。所以我只是忽略了编译错误并运行了项目。它奏效了。

#include <vector>     // this was fine.  no complaints from eclipse

int main() {

std::vector V;        ///  vector was underlined red.  Just ignore and run.
V.push_back(1);

return 0;
}

答案 5 :(得分:0)

#include <map>
using namespace std;
map<string, SDL_Texture* > m_textureMap;

http://www.cplusplus.com/reference/map/map/map/