«Символ« карта »не может быть разрешен» в пространстве имен - PullRequest
2 голосов
/ 29 сентября 2011

Здравствуйте!

В настоящее время я занимаюсь разработкой игрового движка.Даже если я только начал, у меня уже возникла проблема.

У меня есть этот код:

#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 выдает мне следующую ошибку:

Не удалось разрешить символ 'карта' Instans.h

В чем может быть причина?

Ответы [ 6 ]

3 голосов
/ 29 сентября 2011

Правильно определенное имя - ::std::map, поскольку вы уже находитесь в другом пространстве имен.

1 голос
/ 29 сентября 2011

Третий параметр map - это тип функции сравнения, а не третий содержащийся тип данных. Скорее всего, это то, что вызывает вашу проблему.

Я не могу точно сказать, что вы пытаетесь сделать, но если вы пытаетесь сопоставить составной ключ int / string с компонентом, вы можете использовать:

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

0 голосов
/ 17 апреля 2016
#include <map>
using namespace std;
map<string, SDL_Texture* > m_textureMap;

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

0 голосов
/ 27 августа 2012

Если вы установили плагин CDT для Eclipse, все должно работать "из коробки".Я пытался объявить вектор, но когда дело дошло до его создания, он дал такую ​​же неразрешенную ошибку символа.Проверяя форумы 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;
}
0 голосов
/ 20 декабря 2011

Если это проблема 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

0 голосов
/ 29 сентября 2011

Третий параметр шаблона для сопоставления должен быть функцией сравнения. Я предполагаю, что вы пытаетесь отобразить из int -> (char *, Component ). Вам нужно будет обернуть char и Component * в структуру или пару ...

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

ComponentMap _components;
...