向量不是一个模板吗?

45
我目前正尝试跟着一个制作简单的2D瓦片引擎的教程,用于制作自顶向下的RPG。不过出现了Intellisense错误。红色下划线标记了“vector”一词。为什么不起作用?为什么它告诉我它是一个模板,这意味着程序不能工作?
#ifndef _IMAGEMANAGER_H
#define _IMAGEMANAGER_H

#include <vector>
#include <SFML\Graphics.hpp>

class ImageManager
{
private:
    vector<sf::Texture> textureList;

public:
    ImageManager();
    ~ImageManager();

    void AddTexture(sf::Texture& texture);
    sf::Texture& GetTexture(int index);
};
#endif

我遇到的错误(毫无疑问这其中一些源于上面部分的错误):

  • Error 1 error C2143: syntax error : missing ';' before '<' c:\users<omitted>\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users<omitted>\dropbox\computer
    science\programming\visual studio
    2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • Error 3 error C2238: unexpected token(s) preceding ';' c:\users<omitted>\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • Error 4 error C2143: syntax error : missing ';' before '<' c:\users<omitted>\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • Error 5 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users<omitted>\dropbox\computer
    science\programming\visual studio
    2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • Error 6 error C2238: unexpected token(s) preceding ';' c:\users<omitted>\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • Error 7 error C2065: 'textureList' : undeclared identifier c:\users<omitted>\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.cpp 22 1 sfml-app

  • Error 8 error C2143: syntax error : missing ';' before '<' c:\users<omitted>\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • Error 9 error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users<omitted>\dropbox\computer
    science\programming\visual studio
    2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • Error 10 error C2238: unexpected token(s) preceding ';' c:\users<omitted>\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • 11 IntelliSense: vector is not a template c:\Users<omitted>\Dropbox\Computer Science\Programming\Visual
    Studio 2012\Projects\sfml-app\sfml-app\ImageManager.h 10 2 sfml-app


你应该遵守这个规则:https://dev59.com/KHVC5IYBdhLWcg3woSxW - chris
4
这段代码是C++中的标准库std::vector,其中存储了SFML图形库中的纹理sf::Texture。 - yngccc
2
以下划线开头并后跟大写字母(_IMAGEMANAGER_H)的名称以及包含两个连续下划线的名称保留给实现。请勿使用它们。 - Pete Becker
2个回答

75

vector来自于std命名空间,因此您必须使用std::进行指定:

std::vector<sf::Texture> textureList;

或者您可以使用 using 语句:

using std::vector;

vector<sf::Texture> textureList;

谢谢。我使用了第一个提示来解决它。使用命名空间也很可能会解决它。 - OmniOwl
请记住,在头文件中不建议使用指令。 - Hiura
2
不要忘记 #include <vector> - hmfarimani
2
除了上面的解决方案,我还需要进一步添加 #include<vector>,因为我得到了错误信息 std has no member vector。 - Ganesh S
在Ganesh所说的基础上,如果你在2019年之后到达这里,你需要使用#include<vector>和std::vector来使用向量。 - user14803978

10

由于在您的代码示例中没有看到任何using语句,所以我相当肯定您需要在vector声明中添加std::,就像这样:

std::vector<sf::Texture> textureList;

那个人列出了不止一个解决方案,所以我接受了他的,但我也为你的努力点了赞! :3 - OmniOwl
@Vipar 不用担心,你应该选择对你最有帮助的答案。 - Shafik Yaghmour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接