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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
#1

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

10.09.2013, 13:02. Просмотров 570. Ответов 6
Метки нет (Все метки)

Почему нельза задать тело функции в .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()'"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2013, 13:02     Функции в заголовочном файле
Посмотрите здесь:

В каком заголовочном файле находятся функции Sleep() и delay() и как правильно их использовать? C++
C++ Переменная в заголовочном файле
C++ определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?
Объявление поля класса в заголовочном файле C++
C++ Объявление класса в заголовочном файле
C++ Как подключить библиотеки в заголовочном файле?
C++ Сортировка пузырьком функцией в заголовочном файле
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
 Аватар для solar_wind
741 / 732 / 39
Регистрация: 06.07.2009
Сообщений: 2,940
Завершенные тесты: 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
741 / 732 / 39
Регистрация: 06.07.2009
Сообщений: 2,940
Завершенные тесты: 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
:)
Эксперт С++
4383 / 3226 / 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++ Setlocale в заголовочном файле
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     Функции в заголовочном файле
Ответ Создать тему
Опции темы

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