2016-11-06 5 views
0

У меня есть класс, он имена A и A класс имеет еще 3 класса в своем личном.Инициализация объекта класса внутри другого конструктора классов

class A{ 
    public: 
      A(); 
      A(int num); 
      A(C& mC, P& mP, M& mM, int num); 
    //there is a getter and setter for all member this only one example(please check are they right?) 
      M getM()const{return pM;} 
      void setM(M classM){ pM = classM ;} 
     private: 
      C& pC; 
      P& pP; 
      M& pM; 
      int digit= 0; 
     }; 

Я делаю, что в параметре constucture:

A::A(C& mC, P& mP, M& mM, int num):pC(mc),pP(mP),pM(mM) 
{ 
// doing someting here 
} 

Но я не могу написать код по умолчанию и первого Constructure параметра, когда я пишу что-то компилятор говорит мне, что:

error: uninitialized reference member in ‘class A&’ [-fpermissive] A::A(){

и

note: ‘A& A::pP’ should be initialized A& pP;

примерно такой, несколько ошибок и примечаний.

Что мне делать? Как я могу инициализировать классы по умолчанию и структуре первого параметра?

+0

Все еще я не могу найти решение. –

ответ

1

Категория A содержит ссылки другим объектам. В отличие от указателей ссылки не могут быть нулевыми. Для того, чтобы сделать эту работу, вам необходимо либо:

  • Используйте указатели вместо ссылок, и инициализировать их nullptr является не действительным объектом не предусмотрено в конструкторе
  • хранить эти члены по значению. Это включает в себя копию исходных аргументов, а другую в семантике - может быть не то, что вам нужно.
+0

извините. Можете ли вы объяснить немного ясно? –

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