Как в дружественный метод передать объект?
От: pavl  
Дата: 22.03.10 10:12
Оценка:
Собственно код:
#include <iostream>
#include <string>
using namespace std;
class bb;
class aa
{
    int b;
public:
    aa():b(2){};
    int val(bb x){return x.a;}

};
class bb
{
    int a;
public:    
    bb() : a(5){};
    friend  int aa::val(bb x);
};

int main(void)
{
    aa a;
    bb b;
    cout<<a.val(b)<<endl;
}

При компиляции выдает: error C2027: use of undefined type 'bb'

Как его сделать работоспособным?
добавил разметку — Кодт
Re: Как в дружественный метод передать объект?
От: Pavel Dvorkin Россия  
Дата: 22.03.10 10:23
Оценка: +1
Здравствуйте, pavl, Вы писали:

P>Собственно код:

P> int val(bb x){return x.a;}

Оставь в классе только заголовок, определение приведи после описания класса bb
With best regards
Pavel Dvorkin
Re[2]: Как в дружественный метод передать объект?
От: pavl  
Дата: 22.03.10 10:32
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, pavl, Вы писали:


P>>Собственно код:

P>> int val(bb x){return x.a;}

PD>Оставь в классе только заголовок, определение приведи после описания класса bb


Спасибо... Что-то протупил сначала!
Re: Как в дружественный метод передать объект?
От: Кодт Россия  
Дата: 22.03.10 11:01
Оценка:
Здравствуйте, pavl, Вы писали:

Проблема в том, что для функции int val(bb x) нужен конструктор копирования и деструктор bb — потому что x передаётся по значению.
Следовательно, выходов два:
— или определить функцию ниже объявления класса bb (а не просто пред-объявления)
— или передавать x по ссылке: int val(bb const& x){return b;}
Естественно, последний рецепт годится, только если это не ломает интерфейс и логику, и если другие члены bb тоже не задействованы.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.