инициировать класс с аргументом в объявлении класса - PullRequest
0 голосов
/ 23 сентября 2011

в моем состоянии объекта, я хотел бы иметь объект pq.но pq нужно инициализировать с параметром.Есть ли способ включить класс, который зависит от параметра в другой класс?

file.h

class Pq
{
  int a;
  Pq(ClassB b);
};
class State
{
  ClassB b2;
  Pq pq(b2);
  State(ClassB b3);
};

file.cc

State::State(ClassB b3) : b2(b3) {}

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Вы можете инициализировать его в списке инициализаторов , так же, как вы делаете с b2:

State::State(ClassB b3) : b2(b3), pq(b2) {}

Помните, что элементы инициализируются в том порядке, в каком они объявлены в заголовочном файле, а не в порядке инициализаторов в списке инициализаторов.

Вам также необходимо удалить попытку инициализации в заголовке:

class Pq
{
  int a;
  Pq(ClassB b);
};
class State
{
  ClassB b2;
  Pq pq;
  State(ClassB b3);
};
1 голос
/ 23 сентября 2011

</p> <pre> Class State{ public: State(ClassB& bref):b2(bref),pq(b2){} // Depends on the order you declare objects // in private/public/protected private: ClassB b2; Pq pq; }; </pre> <p>

В приведенном выше коде вы должны поддерживать этот порядок в списке инициализации, в противном случае вы получите то, чего не ожидали ... поэтому довольно рискованно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...