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

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

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

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

10.09.2013, 13:02. Просмотров 650. Ответов 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     Функции в заголовочном файле
Посмотрите здесь:

Ошибка при объявлении функции в заголовочном файле - C++
Здравствуйте! Я пытаюсь в заголовочном файле объявить вот такой метод: test.h #include <string> #include <vector> class...

В каком заголовочном файле находятся функции Sleep() и delay() и как правильно их использовать? - C++
в каком хедере они находятся и как правильно их использовать Добавлено через 1 минуту дядя яндекс ничего не подсказал =(

Переменная в заголовочном файле - C++
//qwer.h class qwer { public: extern int a; }; //qwer.cpp #include "qwer.h"

Структура в заголовочном файле - C++
Код .h: // file.h #pragma once struct Worker { char name; int cdate; int vdate; char post;

Setlocale в заголовочном файле - C++
main.cpp #include <cstdlib> #include <iostream> #include <cstring> #include <string> #include "studio.h" using namespace...

Объявление класса в заголовочном файле - C++
Здравствуйте. Столкнулся с тем что нужно скомпилировать библиотеку для C++. классы написал, библиотеку скомпилировал. осталось только...

Не подключается namespace в заголовочном файле - C++
Всем доброго дня. Ситуация такая: common.h #pragma once namespace CommonSystem { class Device {

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
solar_wind
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
10.09.2013, 13:06     Функции в заголовочном файле #2
особенности линковки, компилятор тупо линкует твой файл столько раз сколько инклюдов найдет, а потом видит одну и ту же функцию несколько раз, но до него не доходит, что это одна и та же функция, вот и ругается. Разделение на h и cpp файлы поэтому и придумали, что бы эту проблему обойти.
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
756 / 747 / 42
Регистрация: 06.07.2009
Сообщений: 2,969
Завершенные тесты: 1
10.09.2013, 13:13     Функции в заголовочном файле #4
maxon887, Потому что в классе. Он класс нашел один раз и видимо в следующий раз его игнорирует. А функции линкует по-другому. Поищи в сети особенности линковки, наверняка есть статьи где эти механизмы подробно разжеваны.
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
10.09.2013, 13:16  [ТС]     Функции в заголовочном файле #5
solar_wind, спасибо, думаю тему можно закрывать.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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++
Как объявить константу и массив в заголовочном файле? Map.h #pragma once #include <SFML\Graphics.hpp> extern const...

Создание структуры в заголовочном файле - C++
Доброго времени суток! Решил заняться разработкой приложений, сейчас делаю небольшую программу, библиотека SFML. Вопрос: Я создал...

Объявление поля класса в заголовочном файле - C++
Здравствуйте! Подскажите пожалуйста, как сделать правильно. Есть класс А и класс B, в классе B должно быть поле в виде массива классов А....

Можно ли объявлять объекты в заголовочном файле? - C++
Решил написать змейку с использование OpenGL. Сначала написал все в одном файле, все работало, решил сделать по красивее и распихать по...

Дружественные методы в заголовочном и релизационном файле - C++
Доброго времени суток. Есть такая проблема: В заголовочном файле lsf.h описываю класс и перегружаю "<<" ">>" для работы с классом. ...


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

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

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