Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
serjDev
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 2
#1

Как правильно подключить свой заголовочный файл? - C++

20.04.2014, 14:13. Просмотров 1718. Ответов 3
Метки нет (Все метки)

Есть два файла.

Основной файл - "2.cpp"

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <windows.h>
#include <string.h>
#include <map>
#include "notes.h"
 
using namespace std;
 
 
 
 
int main(){
      
 
map< string, float > notes;
initMap(notes);
 
       
       Beep(notes["F6d"],300);
 
return 0;       
}
и собственный заголовочный файл "notes.h":

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#pragma once
#ifndef NOTES_H
#define NOTES_H
 
 
void initMap( map<string, float> &theMap )
{
theMap["C5"] = 261.63;
theMap["D5"] = 293.66;  
theMap["E5"] = 329.63;
theMap["F5"] = 349.23;
theMap["G5"] = 392.00;
theMap["A5"] = 440.00;    
theMap["H5"] = 493.88;
theMap["C6"] = 523.25;
theMap["D6"] = 587.32;  
theMap["E6"] = 659.26;
theMap["F6"] = 698.46;
theMap["G6"] = 784.00;
theMap["A6"] = 880.00;
theMap["H6"] = 987.75;
theMap["Г‘5d"] = 277.18;
theMap["D5d"] = 311.13;
theMap["F5d"] = 369.99;
theMap["G5d"] = 415.30;
theMap["A5d"] = 466.16;
theMap["C6d"] = 554.36;
theMap["D6d"] = 622.26;
theMap["F6d"] = 739.98;
theMap["G6d"] = 830.60;
theMap["A6d"] = 932.32;
}  
 
#endif NOTES_H
Вместе работает нормально, но, если выносить ф-ию в h-файл, то Dev-C++ выдает такую ошибку: "5 [путь к файлу '2.cpp'] In file included from [путь к файлу ''2.cpp']" Может, я неправильно оформляю заголовочный файл?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2014, 14:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как правильно подключить свой заголовочный файл? (C++):

Как подключить свой заголовочный файл? - C++
По книге Липпмана занимаюсь, нужно подключить заголовочный файл .h. Добавлял его как класс и как существующий элемент, но пишет одно и тоже...

Как подключить свой заголовочный файл в Borland 3.1 - C++
Друзья,у меня свой заголовочный файл с расширением .h ,который я буду вызывать в основном файле .cpp . Но при компиляции вызывает ошибку...

Как правильно организовать заголовочный файл со своими функциями? - C++
Есть файл в котором я храню функции, которые часто использую(среди них есть и шаблонные). Например: //Utils.h template &lt;typename...

Куда подключить заголовочный файл. - C++
Есть много файлов типа:1.h ... 100.h,1.cpp ... 100.cpp, а также один файл main.cpp. Во всех используются функции из &lt;cmath&gt;. Во все...

Подключить заголовочный файл CMU Sphinx - C++
Здравствуйте. Помогите пожалуйста, включил заголовочный файл pocketsphinx.h и все равно пишет &quot;не удалось открыть файл pocketsphinx.h&quot;...

Ошибка: "CTriangle: No such file or directory". Как подключить заголовочный файл? - C++
не удается открыть файл включение CTriangle:No such file or directory #include &quot;stdafx.h&quot; #include &quot;CTriangle.h&quot; #include &lt;iostream&gt; ...

3
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2014, 14:30 #2
Ошибка непонятна. Внешне, вроде бы, всё правильно подключено, но не нужно помещать реализации в заголовочный файл. Там, по общим правилам, делают объявления (прототипы), а реализации помещают в .cpp.

Добавлено через 10 минут
C++
1
2
3
4
5
6
7
#include <iostream>
#include <windows.h>
#include <string> // не string.h
#include <map>
#include "notes.h"
 
using namespace std;
C++
1
2
3
4
5
6
7
8
#pragma once
#ifndef NOTES_H
#define NOTES_H
#include <string>
#include <map>
 
void initMap( std::map <std::string, float>&theMap )
{
1
serjDev
0 / 0 / 0
Регистрация: 20.04.2014
Сообщений: 2
20.04.2014, 14:45  [ТС] #3
В общем-то проблема оказалась банальнейшей. Не проставил std. Спасибо за помощь.

Там, по общим правилам, делают объявления (прототипы), а реализации помещают в .cpp.
А это важно или просто стандарт, которого стараются придерживаться?
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2014, 19:40 #4
Цитата Сообщение от serjDev Посмотреть сообщение
Не проставил std.
Не только: string.h вмеcто string - это разные заголовочные файлы; если не сделать в .h файле:
C++
1
2
#include <string>
#include <map>
, то компиляция будет зависеть от места подключения файла notes.h в файле 2.cpp (если поставить его выше, чем сделаны #include <string> и #include <map>, то компилироваться уже не будет), а этого не должно быть.
Цитата Сообщение от serjDev Посмотреть сообщение
А это важно или просто стандарт, которого стараются придерживаться?
Это важно. Если хедер с реализациями будет подключен к нескольким .cpp, то будет ошибка линкера: множественные определения.
0
20.04.2014, 19:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2014, 19:40
Привет! Вот еще темы с ответами:

Какой заголовочный файл нужно подключить чтобы стали доступны int32_t size_t ? - C++
Какой заголовочный файл нужно подключить чтобы стали доступны int32_t size_t ?

Какой заголовочный файл надо подключить, чтобы вывести значение констант CHAR_MIN и CHAR_MAX? - C++
У меня почему-то не получается написать программу, которая выводит пределы значений переменных типа char. Какой заголовочный файл надо...

Как добавить заголовочный файл? - C++
помогите, я недавно решил научится программировать, и скачал пример кода одной игры, но в нём используются файлы которые вызываются с...

Как восстановить заголовочный файл sal.h? - C++
При компиляции выскакивали ошибки, связанные с sal.h. Я удалила его подчистую, теперь выдаются ошибки в math. h и не компилируется вообще...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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