Ошибка объявления вектора в файле заголовка

Я продолжаю получать длинную строку ошибок, когда пытаюсь объявить вектор в заголовке. Я поискал некоторое время, но не могу найти решения.

Вот ошибки:

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: отсутствует спецификатор типа - предполагается int. Примечание. C ++ не поддерживает default-int 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: синтаксическая ошибка: отсутствует ';' перед '‹' 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. Примечание. C ++ не поддерживает default-int 1> c: \ users \ legacyblade \ documents \ visual studio 2008 \ projects \ fourswords \ fourswords \ input.h (38): ошибка C2238: неожиданные токены, предшествующие ';' 1> input.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: отсутствует спецификатор типа - предполагается 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).

Большое спасибо за чтение. Было бы здорово, если бы кто-нибудь мог помочь. Мне нужны векторы, чтобы делать то, что я хочу делать. Не знаю, почему это доставляет мне такие неприятности. Любой другой тип переменной в том же месте НЕ вызывает ошибку. Только векторы.


person Legacyblade    schedule 21.08.2012    source источник


Ответы (3)


Просто чтобы добавить к сказанному, вам нужно пространство имен в объявлении, потому что мы обычно не хотим раздувать файлы заголовков с помощью «using namespace std». Итак, если вы видели векторы, используемые где-то еще, без std :: перед ним, пространство имен, вероятно, было объявлено где-то еще.

person James Kuang    schedule 21.08.2012
comment
Это сработало отлично. Спасибо. Не могу поверить, что забыл std :: x.x. Я использую std :: cout повсюду, потому что я не сделал правильный класс консоли, не знаю, почему это ускользнуло от меня. Еще раз спасибо :) - person Legacyblade; 22.08.2012

Вам нужно использовать пространство имен для вектора. Префикс vector с std::.

Кроме того, extern для члена класса семантически не имеет никакого смысла. Убери это.

std::vector<sf::Keyboard::Key> keyBindings;
person Levi Morrison    schedule 21.08.2012

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

должно быть

std::vector<sf::Keyboard::Key> keyBindings;
person Luchian Grigore    schedule 21.08.2012