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

Функции в заголовочном файле - C++

Восстановить пароль Регистрация
 
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 13:02     Функции в заголовочном файле #1
Почему нельза задать тело функции в .h файле???
например(header.h):
C++
1
2
3
4
5
6
#ifndef HEADER_H
#define HEADER_H
 
void f(){}
 
#endif // HEADER_H
minGW пишет "C:\Users\max\Extern\header.h:4: multiple definition of `f()'"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
10.09.2013, 13:06     Функции в заголовочном файле #2
особенности линковки, компилятор тупо линкует твой файл столько раз сколько инклюдов найдет, а потом видит одну и ту же функцию несколько раз, но до него не доходит, что это одна и та же функция, вот и ругается. Разделение на h и cpp файлы поэтому и придумали, что бы эту проблему обойти.
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 13:12  [ТС]     Функции в заголовочном файле #3
Ну так а я тогда не понимаю)))
Пример 2:
C++
1
2
3
4
5
6
7
#ifndef HEADER_H
#define HEADER_H
class A
{
void f(){}
};
#endif // HEADER_H
Теперь всё нормально. В чем разница???

Добавлено через 2 минуты
ща на вижуаловском попробую
solar_wind
 Аватар для solar_wind
740 / 731 / 39
Регистрация: 06.07.2009
Сообщений: 2,937
Завершенные тесты: 1
10.09.2013, 13:13     Функции в заголовочном файле #4
maxon887, Потому что в классе. Он класс нашел один раз и видимо в следующий раз его игнорирует. А функции линкует по-другому. Поищи в сети особенности линковки, наверняка есть статьи где эти механизмы подробно разжеваны.
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 13:16  [ТС]     Функции в заголовочном файле #5
solar_wind, спасибо, думаю тему можно закрывать.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.09.2013, 14:55     Функции в заголовочном файле #6
Цитата Сообщение от maxon887 Посмотреть сообщение
В чем разница???
Разница в том, что функция, определенная внутри класса неявно считается встраиваемой (inline).
Предлагаю проверить такой вариант:
C++
1
2
3
4
5
6
7
8
#ifndef HEADER_H
#define HEADER_H
class A
{
void f();
};
void A::f(){}
#endif // HEADER_H
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2013, 15:58     Функции в заголовочном файле
Еще ссылки по теме:

C++ Создание структуры в заголовочном файле
C++ Объявление константы в заголовочном файле
C++ Не подключается namespace в заголовочном файле

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

Или воспользуйтесь поиском по форуму:
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 15:58  [ТС]     Функции в заголовочном файле #7
Странно, на работе собрался без проблем и первый вариант. Походу нужно разбираться с компилятором или настройками проекта.
Yandex
Объявления
10.09.2013, 15:58     Функции в заголовочном файле
Ответ Создать тему
Опции темы

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