no matching function for call
От: Discordent  
Дата: 04.07.13 21:18
Оценка: -1
class B{
    private:
        int q;
    public:
        B(int b){
            q = b;
        }
};

class A{
    private:
        int q;
        B b;
    public:
        A(){
            q = 1;
            b = B.B(q); --как тут инициализировать переменную
        }
};

в данном случае error: no matching function for call to 'B::B()'
используйте тэги для разметки.
Re: no matching function for call
От: snoman Россия  
Дата: 05.07.13 03:35
Оценка:
Здравствуйте, Discordent, Вы писали:

D>class B{

D> private:
D> int q;
D> public:
D> B(int b){
D> q = b;
D> }
D>};

D>class A{

D> private:
D> int q;
D> B b;
D> public:
D> A(){
D> q = 1;
D> b = B.B(q); --как тут инициализировать переменную
D> }
D>};

D>в данном случае error: no matching function for call to 'B::B()'


A::A():q(1),b(1)
{
}
Re[2]: no matching function for call
От: Mr.Delphist  
Дата: 05.07.13 10:22
Оценка:
Здравствуйте, snoman, Вы писали:

S>
S>A::A():q(1),b(1)
S>{
S>}
S>


Можно ещё так (если вместо единицы какое-то волосатое выражение):

A::A():q(1),b(q)
{
}


Только надо помнить, что инициализация будет исполняться в порядке объявления полей в описании класса A (т.е. сначала q, затем b), а не в порядке упоминания полей в списке инициализации — т.е. можно с одинаковым успехом написать A::A():b(q),q(1), всё равно сначал компилятор выполнит q(1), и только затем b(q).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.