2014-05-11 4 views
0

Я создал класс с конструктором, который принимает значение int, чтобы определить размер связанного списка, который имеет объект. Проблема, с которой я столкнулась, - это иметь возможность вызвать этот конструктор, когда этот объект создается как частный член другого класса. Так что в принципе:Использование конструктора объекта в другом классе

class A { 
public: 
    A(); 
    A(int size); 
}; 

class B { 
    const int size = // any number > 0 
private: 
    A a(size); 
}; 

Я получаю эту ошибку:

constant "B::size" is not a type name

Я пытался искать в Интернете, но я не могу встретить этот конкретный вопрос. Возможно, я пытаюсь правильно сформулировать вопрос ... это странная проблема, которую я еще не видел. Любая помощь приветствуется!

+0

Вы объявивших методы, но вы не реализовали их. Где реализация? – merlin2011

+0

Это неправильный дизайн. Я предлагаю вам спросить о реальной проблеме, которую вы пытаетесь решить, а не о решении, которое вы имели в виду. – StoryTeller

+0

Конструктор для A следует вызывать в конструкторе для B. Вы не можете создавать экземпляр непосредственно в файле заголовка, если вы не используете константу. – donutmonger

ответ

3

Вы не можете вызвать конструктор с параметрами в объявлении переменной-члена.

Вы можете реализовать конструктор для B и сделать его там.

B::B() : a(size) {} 
+0

Спасибо! Это именно то, что я искал. Я понятия не имею, почему я не пробовал это ... – user3625087

2

Вы должны сделать в B конструктору, используя initializer list:

class B 
{ 
public: 
    B() : a(size) 
    {} 

private: 
    A a; 
    const int size = ...; 
}; 
Смежные вопросы