您好!
我目前正在开发游戏引擎。即使我刚开始,我已经遇到了问题。
我有这段代码:
#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
可能是什么原因?
答案 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;