2016-01-03 2 views
2

Я до сих пор удивляюсь, почему сообщение об ошибке продолжает появляться при попытке объявить вектор:Ошибка при объявлении вектора в качестве члена данных класса

«Неизвестное имя типа„SetSize“»

#ifndef INTEGERSET_H 
#define INTEGERSET_H 

#include <vector> 
using namespace std; 

class IntegerSet 
{ 
public: 
    IntegerSet(); 
    IntegerSet(const int [], const int); 
    IntegerSet & unionOfSets(const IntegerSet &, const IntegerSet &) const; 
    IntegerSet & intersectionOfSets(const IntegerSet &, const IntegerSet &) const; 
    void insertElement(int); 
    void deleteElement(int); 
    void printSet(); 
    bool isEqualTo(const IntegerSet &); 

    const int setSize = 10; 
    vector<bool> set(setSize); 

}; 



#endif 

PS: мне пришлось добавить 4 пробела в каждую строку, чтобы скопировать и вставить указанный выше код, потому что все вышло из формата. Есть ли более простой способ?

+0

Что касается вашего PS: просто вставьте код, выделите его и нажмите Ctrl + K. –

+0

Я не понимаю эту причуду об инициализации в объявлении класса ... это то, что делают разработчики java ... почему бы не использовать список инициализаторов/конструктор? – basav

+0

@basav Это может спасти вас при вводе и уменьшении объема ошибок, если у вас много конструкторов. Я бы не назвал это «причудой». Это довольно полезная функция языка. – juanchopanza

ответ

7

Это обрабатывается как объявление функции:

vector<bool> set(setSize); // function `set`, argument type `setSize` 

Вам нужен другой синтаксис инициализации:

vector<bool> set = vector<bool>(setSize); 

отметить также, что дает вещи такие имена, как set в то время как using namespace std; очень плохая идея. using namespace std; is a bad idea in most cases anyway.

+0

Альтернативно вы может использовать равномерную инициализацию: 'vector set {size}' –

+1

@Revolver_Ocelot. Это может привести к созданию вектора размера 1 с единственным элементом, установленным в 'true'. – juanchopanza

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