Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача объектов в ф-ии класса

35K
16 мая 2012 года
Mediv63
50 / / 08.12.2009
Здравствуйте. Я вот понять не могу как в ф-ии класса передавать объекты другого класса? Например код вроде:
 
Код:
class A
{
    public:
    A(void);
       ~A(void);

    void init(B* test);
};
При компиляции выдаёт ошибку: error C2061: синтаксическая ошибка: идентификатор "B"

Что я делаю не так?
2.1K
16 мая 2012 года
disputant
95 / / 28.05.2007
А что такое B - откуда компилятору знать?
35K
16 мая 2012 года
Mediv63
50 / / 08.12.2009
В .cpp я хедер класса "B" подключаю.
Например тут:
Код:
class A
{
    public:
    A(void);
       ~A(void);

    void init(void);
};

void A::init(void)
{
    A test();
    return;
}
Ругается только если в функции параметром является объект.
35K
16 мая 2012 года
Mediv63
50 / / 08.12.2009
То есть здесь всё нормально:

Код:
class A
{
    public:
    A(void);
       ~A(void);

    void init(void);
};

void A::init(void)
{
    A test();
    return;
}

А здесь ошибка:

 
Код:
class A
{
    public:
    A(void);
       ~A(void);

    void init(B* test);
};
35K
16 мая 2012 года
Mediv63
50 / / 08.12.2009
Никто не передаёт в методы класса объекты других самодельных классов?
285
16 мая 2012 года
Romik
479 / / 24.11.2002
Я не специалист по cpp, но вот что у меня получилось: gist
35K
16 мая 2012 года
Mediv63
50 / / 08.12.2009
Разобрался. Как я понял сторонние классы нужно инклюдить в хедере а не в .cpp?
285
16 мая 2012 года
Romik
479 / / 24.11.2002
Их нужно подключать там, где их используете.
2.1K
16 мая 2012 года
disputant
95 / / 28.05.2007
В случае указателя минимально должно быть хотя бы сказано class B;, "внутренности" можно оставить до реализации.

a.h:
 
Код:
class B;

class A
{
public:
    void test(B*);
};
b.h:

 
Код:
class B
{
public:
    void test();
};
main.cpp

Код:
#include <iostream>
#include "a.h"
#include "b.h"

void A::test(B* t)
{
    t->test();
}

void B::test()
{
    std::cout << __func__ << std::endl;
}

int main(int argc, const char * argv[])
{
    B b;
    A().test(&b);
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог