C ++错误:C4430和C2143在不可能的地方出错

时间:2014-12-31 12:22:57

标签: c++ compiler-errors syntax-error

我试图在互联网上搜索这个错误的答案,但问题似乎总是有人忘了将返回说明符int添加到main函数中。这很奇怪,因为错误被抛到一条线上,没有什么可能是错的:

#ifndef ResMan_H
#define ResMan_H

#include "Loader.h"
#include <iostream>

template<class Res>
class ResourceManager {

private:
    std::map<int, Res*> resourceList; //C4430 & C2143
    Loader<Res> * loader;

public:
    ResourceManager(Loader<Res> * loader);
    void load(int key, std::string);
    Res* request(int key);
    void unload(int key);
    void dispose();
};

#endif

错误在线投放:

std::map<int, Res*> resourceList;

Loader.h文件只包含:

#ifndef Loader_H
#define Loader_H

#include <iostream>

template<class Res>
class Loader {

public:
    virtual Res* loadFromFile(std::string filePath);

};

#endif

错误在于我错过了一个“;”并且我忘记了某处的类型说明符,但事实并非如此。我尝试重新启动VS13(有时它在重启后不再给我那些奇怪的错误),但这没有帮助。

编辑:很高兴知道为什么问题会被投票,这样我就可以避免在下一个问题上做同样的错误。感谢。

1 个答案:

答案 0 :(得分:1)

你忘了放置

#include <map>

在标题中。

因此,编译器无法解析类型std::map<int, Res*>