Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2013, 11:23   #1
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию Правильное включение заголовков

Здравствуйте. Допустим имеется vector.h, matrix.h, у обоих свой файл реализации .cpp, но в описании интерфейса у обоих:
Код:
/* vector.h */
class vector
{
public:
     //...
     //...
     friend vector multiply(const matrix&, const vector&);
};

... 
...
/* matrix.h */
class matrix
{
public:
     //...
     //...
     friend vector multiply(const matrix&, const vector&);
};
Где определить функцию multiply()? Как правильно организовать
связь между файлами vector.h и matrix.h? Ведь описание дружественной функции находится в обоих классах.
halcyon вне форума Ответить с цитированием
Старый 06.08.2013, 12:05   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Например multiply.h / multiplay.cpp
В файлах vector.h / matrix.h надо использовать forward declaration.
waleri на форуме Ответить с цитированием
Старый 06.08.2013, 14:45   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
class vector
{
public:
     //...
     //...
     friend vector multiply(const matrix&, const vector&) 
    {/* тело */}
};
_Bers вне форума Ответить с цитированием
Старый 07.08.2013, 04:24   #4
halcyon
crafter
Форумчанин
 
Аватар для halcyon
 
Регистрация: 03.09.2011
Сообщений: 127
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Например multiply.h / multiplay.cpp
В файлах vector.h / matrix.h надо использовать forward declaration.
Спасибо за подсказку.
Цитата:
Сообщение от _Bers Посмотреть сообщение
Код:
class vector
{
public:
     //...
     //...
     friend vector multiply(const matrix&, const vector&) 
    {/* тело */}
};
При таком определении будет ошибка: invalid use of incomplete type, ведь перед определением классов vector или matrix будет находиться forward declaration:
Код:
class matrix;
class vector
{
      //...
};
В общем все получилось.
halcyon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение заголовков ini countteran Общие вопросы Delphi 7 07.12.2011 16:13
контроль заголовков spydark91 Общие вопросы Delphi 4 15.06.2011 21:27
Вопрос про включение заголовков. Lord-of-Hedgehogs Общие вопросы C/C++ 6 26.11.2010 16:13
Скрытие заголовков и сетки segail Microsoft Office Excel 1 05.04.2010 05:22
SOAP передача заголовков talero Работа с сетью в Delphi 0 14.12.2009 12:20