2016-04-07 2 views
1

robot.h:11:20: error: expected identifier before numeric constant Queue SQ(10);Член инициализация переменная с не конструктором по умолчанию дает ошибке

struct Robot 
{ 
    string m_name; //robot name 
    Queue<string> SQ(10); //queue of services 
    int m_timer; //time til robot is done 
    string m_lastService; //most recent service 
}; 

Я не понимаю, почему я получаю сообщение об ошибке на этом. Когда я забираю (10), он использовал конструктор по умолчанию и отлично работает. Вот класс Queue.

template <typename T> 
class Queue : public AbstractQueue<T> 
{ 
    private: 
    T* m_array; 
    int m_front; 
    int m_back; 
    int m_capacity; 
    int m_size; 
    public: 
    Queue(); 
    Queue(int max); 
    void setMax(int max); 
    bool isEmpty() const; 
    const T& front() const throw (Oops); 
    const T& back() const throw (Oops); 
    void enqueue(const T& x); 
    void dequeue(); 
    void clear(); 
    ~Queue(); 
}; 

Я использовал другое объявление класса Queue, и она работала в основном, но по какой-то причине он не будет работать в структурах, вот что я объявил в главном

Queue<Robot> R(10); 

ответ

1

Вы можете 't указать конструктор, отличный от умолчания, используемый для инициализации переменных-членов, как это.

Вы можете указать конструктор с member initializer list, чтобы указать конструктор Queue для использования.

struct Robot 
{ 
    string m_name; //robot name 
    Queue<string> SQ(); //queue of services 
    int m_timer; //time til robot is done 
    string m_lastService; //most recent service 
    Robot() : SQ(10) {} 
}; 

Или используйте default member initializer (с C++ 11):

Queue<string> SQ{10}; 
Смежные вопросы