使用非默认构造函数进行成员变量初始化会产生错误

时间:2016-04-07 02:37:47

标签: c++

  

robot.h:11:20:错误:数字常量之前的预期标识符      队列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类的另一个声明,它在main中工作,但由于某种原因它在struct中不起作用,这是我在main中声明的

Queue<Robot> R(10);

1 个答案:

答案 0 :(得分:1)

您不能像这样指定在成员变量初始化中使用的非默认构造函数。

您可以使用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};