【问题标题】:Error declaring vector in header file在头文件中声明向量时出错
【发布时间】:2012-08-17 07:01:26
【问题描述】:

当我尝试在标头中声明向量时,我不断收到一长串错误。我环顾了一段时间,但找不到解决方案。

以下是错误:

1>正在编译... 1>game.cpp 1>c:\users\legacyblade\documents\visual 工作室 2008\projects\fourswords\fourswords\input.h(38):错误 C2143: 语法错误:缺少';'在'c:\users\legacyblade\documents\visual studio 2008\projects\fourswords\fourswords\input.h(38):错误 C2071: 'input::vector' : 非法存储类 1>c:\users\legacyblade\documents\visual studio 2008\projects\fourswords\fourswords\input.h(38):错误 C4430:丢失 类型说明符 - 假定为 int。注意:C++ 不支持默认整数 1>c:\users\legacyblade\documents\visual studio 2008\projects\fourswords\fourswords\input.h(38):错误 C2238: ';' 之前的意外标记1>main.cpp 1>c:\users\legacyblade\documents\visual studio 2008\projects\fourswords\fourswords\input.h(38):错误 C2143:语法 错误:缺少';'在 'c:\users\legacyblade\documents\visual 之前 工作室 2008\projects\fourswords\fourswords\input.h(38):错误 C2071: 'input::vector' : 非法存储类 1>c:\users\legacyblade\documents\visual studio 2008\projects\fourswords\fourswords\input.h(38):错误 C4430:丢失 类型说明符 - 假定为 int。注意:C++ 不支持默认整数 1>c:\users\legacyblade\documents\visual studio 2008\projects\fourswords\fourswords\input.h(38):错误 C2238: ';' 之前的意外标记1>输入.cpp 1>c:\users\legacyblade\documents\visual studio 2008\projects\fourswords\fourswords\input.h(38):错误 C2143:语法 错误:缺少';'在 'c:\users\legacyblade\documents\visual 之前 工作室 2008\projects\fourswords\fourswords\input.h(38):错误 C2071: 'input::vector' : 非法存储类 1>c:\users\legacyblade\documents\visual studio 2008\projects\fourswords\fourswords\input.h(38):错误 C4430:丢失 类型说明符 - 假定为 int。注意:C++ 不支持默认整数 1>c:\users\legacyblade\documents\visual studio 2008\projects\fourswords\fourswords\input.h(38):错误 C2238: ';' 之前的意外标记

这里是源代码:

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

#ifndef _input_h
#define _input_h

class input
{
public:
      input();
     void update();

//----input keys----//

    // Directions
    bool upPress;
    bool downPress;
    bool leftPress;
    bool rightPress;

    // Actions
    bool aPress;
    bool bPress;
    bool jumpPress;
    bool shieldPress;

    // Menu
    bool startPress;
    bool screenshotPress;
    bool fullscreenPress;

//------------------//

private:
    extern vector<sf::Keyboard::Key> keyBindings;

};

#endif

无论有没有 extern,它都会给我同样的错误,即使我改变了向量内事物的类型(甚至是 int)。

非常感谢您的阅读。如果有人可以提供帮助,那就太好了。我需要向量来做我想做的事情。不知道为什么给我带来这么大的麻烦。同一地点的任何其他类型的变量都不会导致错误。只有向量。

【问题讨论】:

    标签: c++ visual-studio-2008 vector sfml


    【解决方案1】:

    只是补充一下,您需要在声明中使用命名空间,因为我们通常不希望使用“使用命名空间 std”来膨胀头文件。因此,如果您在其他地方看到过在其前面没有 std:: 的向量,则命名空间可能是在其他地方声明的。

    【讨论】:

    • 效果很好。谢谢你。不敢相信我忘记了 std:: x.x 我到处都在使用“std::cout”,因为我没有制作适当的控制台类,不知道为什么这让我不以为然。再次感谢:)
    【解决方案2】:

    您需要使用向量的命名空间。前缀vectorstd::

    此外,类成员上的extern 在语义上没有任何意义。删除它。

    std::vector<sf::Keyboard::Key> keyBindings;
    

    【讨论】:

      【解决方案3】:
      extern vector<sf::Keyboard::Key> keyBindings;
      

      应该是

      std::vector<sf::Keyboard::Key> keyBindings;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多