当我尝试在标头中声明一个向量时,我一直收到一长串错误。我环顾了一会儿,但找不到解决办法。
以下是错误:
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)。
非常感谢您的阅读。如果有人能帮忙的话会很棒。我需要矢量来做我想做的事情。不知道为什么它会给我这样的麻烦。同一点中的任何其他类型的变量都不会导致错误。只有载体。
答案 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;