简体   繁体   English

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

[英]Error declaring vector in header file

I keep receiving a long string of errors when I try to declare a vector in the header. 当我尝试在标题中声明一个向量时,我一直收到一长串错误。 I've looked around for awhile, but can't find a solution. 我环顾了一会儿,但找不到解决办法。

Here are the errors: 以下是错误:

1>Compiling... 1>game.cpp 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C2143: syntax error : missing ';' 1>编译... 1> game.cpp 1> c:\\ users \\ legacyblade \\ documents \\ visual studio 2008 \\ projects \\ fourswords \\ fourswords \\ input.h(38):错误C2143:语法错误:缺少';' before '<' 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C2071: 'input::vector' : illegal storage class 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C4430: missing type specifier - int assumed. 在'<'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:缺少类型说明符 - 假定为int。 Note: C++ does not support default-int 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C2238: unexpected token(s) preceding ';' 注意:C ++不支持default-int 1> c:\\ users \\ legacyblade \\ documents \\ visual studio 2008 \\ projects \\ fourswords \\ fourswords \\ input.h(38):error C2238:';'之前的意外令牌 1>main.cpp 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C2143: syntax error : missing ';' 1> main.cpp 1> c:\\ users \\ legacyblade \\ documents \\ visual studio 2008 \\ projects \\ fourswords \\ fourswords \\ input.h(38):错误C2143:语法错误:缺少';' before '<' 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C2071: 'input::vector' : illegal storage class 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C4430: missing type specifier - int assumed. 在'<'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:缺少类型说明符 - 假定为int。 Note: C++ does not support default-int 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C2238: unexpected token(s) preceding ';' 注意:C ++不支持default-int 1> c:\\ users \\ legacyblade \\ documents \\ visual studio 2008 \\ projects \\ fourswords \\ fourswords \\ input.h(38):error C2238:';'之前的意外令牌 1>input.cpp 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C2143: syntax error : missing ';' 1> input.cpp 1> c:\\ users \\ legacyblade \\ documents \\ visual studio 2008 \\ projects \\ fourswords \\ fourswords \\ _ input.h(38):错误C2143:语法错误:缺少';' before '<' 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C2071: 'input::vector' : illegal storage class 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C4430: missing type specifier - int assumed. 在'<'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:缺少类型说明符 - 假定为int。 Note: C++ does not support default-int 1>c:\\users\\legacyblade\\documents\\visual studio 2008\\projects\\fourswords\\fourswords\\input.h(38) : error C2238: unexpected token(s) preceding ';' 注意:C ++不支持default-int 1> c:\\ users \\ legacyblade \\ documents \\ visual studio 2008 \\ projects \\ fourswords \\ fourswords \\ input.h(38):error C2238:';'之前的意外令牌

Here is the source code: 这是源代码:

#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

It gives me the same error with and without extern, and even if I change the type of thing inside the vector (even int). 它给了我同样的错误,有或没有extern,即使我改变了向量内部的东西类型(甚至是int)。

Thank you so much for reading. 非常感谢您的阅读。 It would be great if anyone could help. 如果有人能帮忙的话会很棒。 I need vectors to do what I'm wanting to do. 我需要矢量来做我想做的事情。 Don't know why it's giving me such trouble. 不知道为什么它会给我这样的麻烦。 Any other type of variable in the same spot DOES NOT cause the error. 同一点中的任何其他类型的变量都不会导致错误。 Only vectors. 只有矢量。

You need to use the namespace for vector. 您需要使用矢量名称空间。 Prefix vector with std:: . 带有std::前缀vector

Also, extern on a class member semantically doesn't make any sense. 另外,类成员在语义上的extern没有任何意义。 Remove it. 去掉它。

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

Just to add to what's been said, you need the namespace in the declaration because we usually don't want to bloat up header files with "using namespace std". 只是添加到已经说过的内容中,您需要声明中的命名空间,因为我们通常不希望使用“using namespace std”来扩展头文件。 So if you've seen vectors used elsewhere without std:: in front of it, the namespace was probably declared elsewhere. 因此,如果您已经在其他地方看到了没有std ::的其他地方使用的向量,那么名称空间可能在别处被声明了。

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

应该

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM