在头文件中声明向量时出错

时间:2012-08-21 21:21:52

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

当我尝试在标头中声明一个向量时,我一直收到一长串错误。我环顾了一会儿,但找不到解决办法。

以下是错误:

  

1>正在编译... 1> game.cpp 1> c:\ users \ legacyblade \ documents \ visual   studio 2008 \ projects \ fourswords \ fourswords \ input.h(38):错误C2143:   语法错误:缺少';'在'<'之前   1> 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:缺失   type specifier - 假设为int。注意:C ++不支持default-int   1> c:\ users \ legacyblade \ documents \ visual studio   2008 \ projects \ fourswords \ fourswords \ input.h(38):错误C2238:   ';'之前的意外令牌1 GT; main.cpp中   1> c:\ users \ legacyblade \ documents \ visual studio   2008 \ projects \ fourswords \ fourswords \ input.h(38):错误C2143:语法   错误:缺少';'在'<'之前1以及c:\用户\ legacyblade \文件\视觉   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:缺失   type specifier - 假设为int。注意:C ++不支持default-int   1> c:\ users \ legacyblade \ documents \ visual studio   2008 \ projects \ fourswords \ fourswords \ input.h(38):错误C2238:   ';'之前的意外令牌1 GT; input.cpp   1> c:\ users \ legacyblade \ documents \ visual studio   2008 \ projects \ fourswords \ fourswords \ input.h(38):错误C2143:语法   错误:缺少';'在'<'之前1以及c:\用户\ legacyblade \文件\视觉   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:缺失   type specifier - 假设为int。注意:C ++不支持default-int   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)。

非常感谢您的阅读。如果有人能帮忙的话会很棒。我需要矢量来做我想做的事情。不知道为什么它会给我这样的麻烦。同一点中的任何其他类型的变量都不会导致错误。只有载体。

3 个答案:

答案 0 :(得分:1)

您需要将名称空间用于矢量。使用vector前缀std::

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

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

答案 1 :(得分:1)

只是添加到已经说过的内容中,您需要声明中的命名空间,因为我们通常不希望使用“using namespace std”来扩展头文件。因此,如果您已经在其他地方看到过没有使用过std ::的向量,那么名称空间可能在其他地方被声明了。

答案 2 :(得分:0)

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

应该是

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