2015-01-10 4 views
0
Chemical_Compound::Chemical_Compound(Element &a) 
{ 
    Elements.push_back(a); 
} 

Это мой конструкторНет соответствующего вызова функции с аргументами, которые соответствуют вызов

Прототип

 Chemical_Compound(Element & a); 

Теперь, вот, где я пытаюсь использовать конструктор внутри другого класса, и это дает меня проблемы

 Product_b(a); 

который определен в заголовке, как

 Chemical_Compound Product_b; 
     Element a; 

Итак, я очень смущен, почему я получаю сообщение об ошибке, так как аргументы совпадают, и даже если я удалю &, он все равно дает мне ошибку, спасибо!

Я использую QT редактор

/home/CENCORED/Code/cpp/Chem_Framework/reaction.cpp:23: error: no match for call to '(Chemical_Compound) (Element&)' 
Product_b(a); 
      ^
+0

Распечатать сообщение полной ошибки – ha9u63ar

+0

Я думаю, что вы имели в виду: 'Элемент а; Chemical_Compound Product_b (a); ' – 0x499602D2

ответ

1

Конструктор вызывается только на строительство.

Что происходит в том, что по адресу:

Chemical_Compound Product_b; 

вы вызываете конструктор по умолчанию, генерируемый компилятором, который не принимает никаких аргументов.

Теперь, когда вы пытаетесь

Product_b(a); 

Делает nosense как компилятор говорит вам.

Это будет работать:

Element a; 
Chemical_Compound Product_b(a); 
+0

Итак, объявление объекта в заголовке означает, что я его назвал? Я не называю это несколько раз. Я просто инициализирую его один раз в функции. Так что это --- --- объявить объект в заголовке ---> инициализировать объект с помощью конструктора в .cpp-файле. – Anon

+0

Вы создаете объект в заголовке. – Mustafa

1

Для начала это

Chemical_Compound Product_b; 
Element a; 

не должно быть в заголовке.

Но также должна быть

Element a; 
    Chemical_Compound Product_b(a); 
+0

Я думал, что акт объявления отличается от инициализации, я понимаю, что я сделал неправильно сейчас. Итак, вы говорите, что для хорошей практики нужно только объявлять переменные класса в заголовке? Или вы можете уточнить, почему это не должно быть в заголовке? – Anon

+1

Вы не заявляете об этом, но создаете их. –

+0

Не знаю, как это сделать. –

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