Форум программистов, компьютерный форум CyberForum.ru

Предварительное объявление классов. Вызвать функцию до реализации класса - C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Russian_Dragon
 Аватар для Russian_Dragon
10 / 11 / 0
Регистрация: 18.02.2012
Сообщений: 140
05.01.2014, 22:36     Предварительное объявление классов. Вызвать функцию до реализации класса #1
Приветствую, народ.
Пытаюсь реализовать структуру типа патерна "Посредник". И при реализации взаимодействий возникла проблемка.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class B;
 
class A {
public:
    B* b;
    void foo(){
        b->foo(); //Вот здесь проблема.
    }
};
 
class B {
public:
    A a;
    void foo(){ 
    }
};
 
int main(){
    B bb = B();
    bb.a.foo();
    return 0;
}
На указанной строке компилятор говорит, что он не может найти реализацию функции.
Может кто-то подсказать, как добиться того, чтобы можно было вызвать функцию до реализации класса?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2014, 22:36     Предварительное объявление классов. Вызвать функцию до реализации класса
Посмотрите здесь:

Как использовать функцию класса в другом классе (ни один из классов не наследует другой)? C++
Отделение интерфейса от реализации класса: компиляция кода реализации C++
C++ Как вызвать виртуальную функцию из дочернего класса, если она определена и вызывается в конструкторе РОДИТЕЛЬСКОГО класса?
C++ Предварительное объявление
Как вызвать функцию родительского класса? C++
C++ Предварительное объявление класса
Как создать указатель на функцию-член класса и вызвать его? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6414 / 4880 / 448
Регистрация: 14.02.2011
Сообщений: 16,182
06.01.2014, 00:04     Предварительное объявление классов. Вызвать функцию до реализации класса #21
Цитата Сообщение от Croessmah Посмотреть сообщение
void inline
про инлайн уговора не было
это вообще не функция, с низкой точки зрения, а,считай, тот же макрос, подставляет свой код вместо вызова
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12289 / 6976 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
06.01.2014, 00:05     Предварительное объявление классов. Вызвать функцию до реализации класса #22
Цитата Сообщение от ValeryS Посмотреть сообщение
про инлайн уговора не было
да мы вообще ни о чем не договаривались
но факт остается фактом - реализовать можно и в заголовке, но получится ерунда в результате
ValeryS
Модератор
6414 / 4880 / 448
Регистрация: 14.02.2011
Сообщений: 16,182
06.01.2014, 00:10     Предварительное объявление классов. Вызвать функцию до реализации класса #23
кстати inline это не приказ, а так пожелание, компилятор может запросто не вставлять код а создать обычную функцию.
раньше такое было если в теле функции присутствовал цикл, компилятор не инлайнил функцию а создавал отдельно, как сейчас не знаю
так что и с inline можно нарваться

Добавлено через 2 минуты
Цитата Сообщение от Croessmah Посмотреть сообщение
но факт остается фактом - реализовать можно и в заголовке
можно, но нежелательно
Цитата Сообщение от Croessmah Посмотреть сообщение
но получится ерунда в результате
об чем я и говорил
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12289 / 6976 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
06.01.2014, 00:12     Предварительное объявление классов. Вызвать функцию до реализации класса #24
Цитата Сообщение от ValeryS Посмотреть сообщение
как сейчас не знаю
а сейчас, если не тыкать компилятор носом куда следует, то он встроит что сочтет нужным, даже то, что не объявлено как inline, ну или вообще функцию из другого модуля... эпоха оптимизирующих компиляторов настала. Ждем эру компиляторов-самописцев, которые будут писать заданную программу по желанию пользователя
ValeryS
Модератор
6414 / 4880 / 448
Регистрация: 14.02.2011
Сообщений: 16,182
06.01.2014, 00:22     Предварительное объявление классов. Вызвать функцию до реализации класса #25
Цитата Сообщение от Croessmah Посмотреть сообщение
то он встроит что сочтет нужным, даже то, что не объявлено как inline,
то что реализовано внутри описания класса, считается inline "по умолчанию"
т.е
C++
1
2
3
4
5
6
7
8
9
class A {
public:
    void inline bar ( const char * str ) ;
} ;
 
 
void A::bar ( const char * str ) {
    std::cout << str <<std::endl ;
}
и
C++
1
2
3
4
class A {
public:
    void  bar ( const char * str ){  std::cout << str <<std::endl ;} ;
} ;
это одно и тоже
Цитата Сообщение от Croessmah Посмотреть сообщение
ну или вообще функцию из другого модуля...
дозвольте, не поверить
оптимизация внутри модуля это еще нормально
а оптимизировать все чохом, это сколько ж ресурсов нужно
представь прога из 100 модулей, правишь один
компилируешь
и тогда компилятор должен все оставшиеся 99 модулей перекомпилировать, создать дерево и оптимизировать
Цитата Сообщение от Croessmah Посмотреть сообщение
Ждем эру компиляторов-самописцев,
Эх-х-х, житуха настанет
скорей бы
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2014, 00:30     Предварительное объявление классов. Вызвать функцию до реализации класса
Еще ссылки по теме:

C++ Объявление класса без его реализации
Предварительное объявление для класса, помещенного в простанство C++
Спрятать указатель на функцию класса в map и вызвать из другого объекта C++
Два класса в одном заголовочном файле, предварительное объявление C++
C++ Вызвать функцию базового класса с ссылочным квалификатором &&

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12289 / 6976 / 784
Регистрация: 27.09.2012
Сообщений: 17,286
Записей в блоге: 2
Завершенные тесты: 1
06.01.2014, 00:30     Предварительное объявление классов. Вызвать функцию до реализации класса #26
Цитата Сообщение от ValeryS Посмотреть сообщение
дозвольте, не поверить
оптимизация внутри модуля это еще нормально
а оптимизировать все чохом, это сколько ж ресурсов нужно
обо всем уже писали. Вот почитайте тему реализация класса в .h файле хорошо или плохо?

Добавлено через 1 минуту
Цитата Сообщение от ValeryS Посмотреть сообщение
то что реализовано внутри описания класса, считается inline "по умолчанию"
я про то, что даже если вы напишите функцию
C++
1
2
3
void foo ( ) {
//...
}
то компилятор может её встроить, если сочтет нужным
Yandex
Объявления
06.01.2014, 00:30     Предварительное объявление классов. Вызвать функцию до реализации класса
Ответ Создать тему
Опции темы

Текущее время: 12:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru