2013-07-14 6 views
3

У меня есть крошечный .h файл:Почему я не могу объявить вектор в файле .h?

#include "stdafx.h" 
#ifndef BIGNUM_H 
#define BIGNUM_H 
#include <vector> 

class bignum{ 

private: 
    std::vector<int> num; 
    num.resize(4); 

}; 
#endif 

Я получаю следующее сообщение об ошибке:

  • освобожденный типа speciefier
  • эта декларация не имеет класс хранения или спецификатор типа

Что мне не хватает?

+3

Декларация вектора в порядке. Изменение размера неверно. – Pixelchemist

+0

Возможный дубликат [Объявление векторов в файле заголовка C++] (http://stackoverflow.com/questions/4230345/declaring-vectors-in-ac-header-file) – Mgetz

+2

@Mgetz, Нет, это другой вопрос – soon

ответ

10

Вы не можете вызвать метод в переменной-члене внутри объявления класса. Если вы хотите изменить размер вектора на 4, сделайте это в конструкторе класса (или в другой функции, но конструктор, безусловно, является лучшим местом для этого).

В файле CPP вы могли бы сделать что-то вроде:

bignum::bignum() { num.resize(4); } 

или:

bignum::bignum(): num(4) {} 

Второй называет вектор конструктор, который принимает аргумент размера. Или вы сразу можете сделать это в вашем файле .h:

class bignum{ 
    bignum(): num(4) {} // version 1 
    bignum(): num() { num.resize(4); } // version 2 

private: 
    std::vector<int> num; 
}; 
4

Вы не можете позвонить num.resize(4); вне функции. Вы можете использовать конструктор класса или инициализацию C++ 11 в точке объявления.

class bignum 
{ 
private: 
    std::vector<int> num = std::vector<int>(4); // C++11 
}; 

class bignum 
{ 
    bignum() : num(4) {} // C++03 and C++11 
private: 
    std::vector<int> num; 
}; 
+0

Я получил сообщение об ошибке: except a; Если я использую форму std :: vector num {4}; – erbal

+2

@ user2351645 У вас есть соответствующая поддержка C++ 11? Вам это нужно, очевидно. – juanchopanza

+0

Он должен создать вектор размером 4. Как я знаю. – erbal

Смежные вопросы