【问题标题】:Vector is not a Template?矢量不是模板?
【发布时间】:2013-05-18 05:34:27
【问题描述】:

我目前正在尝试学习为自上而下的 RPG 制作简单的 2D 平铺引擎的教程。出于某种原因,虽然我得到了智能感知错误

vector is not a template

“矢量”一词带有红色下划线。为什么这不起作用?为什么它告诉我它是一个模板,为什么意味着程序无法运行?

#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

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

  • 错误 1 ​​错误 C2143:语法错误:缺少 ';'在'

  • 错误 2 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数 c:\users\vipar\dropbox\computer
    科学\编程\视觉工作室
    2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • 错误 3 错误 C2238: ';' 前面的意外令牌c:\users\vipar\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • 错误 4 错误 C2143:语法错误:缺少 ';'在'

  • 错误 5 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数 c:\users\vipar\dropbox\computer
    科学\编程\视觉工作室
    2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • 错误 6 错误 C2238:';' 前面的意外令牌c:\users\vipar\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • 错误 7 错误 C2065:'textureList':未声明的标识符 c:\users\vipar\dropbox\computer science\programming\visual 工作室 2012\projects\sfml-app\sfml-app\imagemanager.cpp 22 1 sfml-app

  • 错误 8 错误 C2143:语法错误:缺少 ';'在'

  • 错误 9 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数 c:\users\vipar\dropbox\computer
    科学\编程\视觉工作室
    2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • 错误 10 错误 C2238:“;”之前的意外令牌c:\users\vipar\dropbox\computer science\programming\visual studio 2012\projects\sfml-app\sfml-app\imagemanager.h 10 1 sfml-app

  • 11 IntelliSense:向量不是模板 c:\Users\Vipar\Dropbox\Computer Science\Programming\Visual
    Studio 2012\Projects\sfml-app\sfml-app\ImageManager.h 10 2 sfml-app

【问题讨论】:

  • 你应该遵守这个:stackoverflow.com/questions/228783/…
  • std::vector&lt;sf::Texture&gt;
  • 以下划线开头后跟大写字母 (_IMAGEMANAGER_H) 的名称和包含两个连续下划线的名称保留给实现。不要使用它们。

标签: c++ vector sfml


【解决方案1】:

vector 来自std 命名空间,所以必须使用std:: 来指定:

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

或者您可以使用using 声明:

using std::vector;

vector<sf::Texture> textureList;

【讨论】:

  • 谢谢。我使用了解决它的第一个技巧。使用命名空间很可能也能解决它。
  • 请记住,不建议在头文件中使用指令。
  • 别忘了#include
  • 除了上述解决方案之外,我还必须做#include,因为我收到错误std has no member vector
【解决方案2】:

由于我在您的代码示例中没有看到任何 using 语句,我很确定您需要将 std:: 添加到您的 vector 声明中,如下所示:

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

【讨论】:

  • 另一个人列出了不止一个解决方案,所以我接受了他的解决方案,尽管我也为你的努力投了赞成票! :3
  • @Vipar 不用担心,您应该选择对您最有帮助的答案。
猜你喜欢
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多