С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 20

#ifndef MAP_H

10.03.2024, 18:51. Показов 630. Ответов 16

Студворк — интернет-сервис помощи студентам
У меня есть заголовок, который включается в два файла cpp. Защита не помогает, все равно вылетает ошибка многократного определения. Может быть моя ошибка очень глупа, тапками не кидать.

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
#include <SFML/Graphics.hpp>
 
using namespace sf;
 
static const int H = 15;
static const int W = 40;
 
 
#ifndef MAP_H
#define MAP_H
 
String TileMap[H] = {
    "0000000000000000000000000000000000000000",
    "0                                      0",
    "0                                      0",
    "0                                      0",
    "0                                      0",
    "0                                      0",
    "0                                      0",
    "0                       000000         0",
    "0                                      0",
    "0                                      0",
    "0                                      0",
    "0             0000000                  0",
    "0                                      0",
    "0                                      0",
    "0000000000000000000000000000000000000000",
};
 
 
#endif // !MAP_H
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.03.2024, 18:51
Ответы с готовыми решениями:

Директива #ifndef
Здравствуйте! Есть такой код: #define lastVersion #ifndef lastVersion #include &lt;version1.h&gt; int main() { ClassA A; ...

#ifndef и #include
Допустим, я создал класс #ifndef SOMECLASS_H #define SOMECLASS_H class SomeClass{}; #endif Есть несколько вопросов.

Почему отказались от #ifndef?
Всем привет, Лафоре пишет, что от использовании директивы #ifndef стали отказываться в пользу #if !defined(). Может кто-нибудь объяснить...

16
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,206
10.03.2024, 19:02
Цитата Сообщение от vernol Посмотреть сообщение
все равно вылетает ошибка многократного определения.
Так вот же оно

C++
1
String TileMap[H] = { ...
Если это включить в два файла, по получится многократное определение.

Цитата Сообщение от vernol Посмотреть сообщение
Защита не помогает,
Какая "защита"? О чем речь?
0
0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 20
10.03.2024, 19:07  [ТС]
под защитой я имел в виду это
C++
1
2
3
4
#ifndef MAP_H
#define MAP_H
.... 
#endif // !MAP_H
Добавлено через 36 секунд
Что сделать, чтобы эта ошибка не вылетала?
0
46 / 112 / 11
Регистрация: 24.04.2019
Сообщений: 756
10.03.2024, 19:07
vernol, строки 9 и 10 должны быть в самом начале файла.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,206
10.03.2024, 19:09
Цитата Сообщение от vernol Посмотреть сообщение
C++
1
2
static const int H = 15;
static const int W = 40;
Кстати, в чем назначение этих static здесь?
0
0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 20
10.03.2024, 19:10  [ТС]
это не решает проблемы. я пробовал их ставить сразу после подключения библеотеки сфмл, все равно та же ошибка.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,206
10.03.2024, 19:12
Цитата Сообщение от vernol Посмотреть сообщение
под защитой я имел в виду это

C++
1
2
3
4
#ifndef MAP_H
#define MAP_H
.... 
#endif // !MAP_H
Это "защита" от множественного включения заголовочного файла в один и тот же .cpp файл. Она не имеет и никогда не имела никакого отношения к защите от множественно определения вообще. То есть она вообще к вашей теме не относится.

Цитата Сообщение от vernol Посмотреть сообщение
Что сделать, чтобы эта ошибка не вылетала?
Самое простое:

C++
1
inline String TileMap[H] = {
Цитата Сообщение от vernol Посмотреть сообщение
это не решает проблемы. я пробовал их ставить сразу после подключения библеотеки сфмл, все равно та же ошибка.
Вы о чем вообще пишете? Кому адресованы эти ответы?
0
0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 20
10.03.2024, 19:16  [ТС]
static нужны потому что без этого обозначения вылетает ошибка. эти значения потом используются в функции main.

Добавлено через 1 минуту
inline тоже не решает проблему множественного определения

Добавлено через 1 минуту
Вы о чем вообще пишете? Кому адресованы эти ответы?
Извините, но почему-то ваши сообщения приходят частями, возможно проблема в моем подключении к интернету.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,206
10.03.2024, 19:22
Цитата Сообщение от vernol Посмотреть сообщение
static нужны потому что без этого обозначения вылетает ошибка. эти значения потом используются в функции main.
Вы что-то выдумываете. О чем речь? Какая "ошибка"?

Напишите подробное объяснение по следующему вопросу: почему вы в форуме постоянно рассказываете какие-то сказки про какие-то "ошибки", но до сих пор не привели ни подробного описания ошибки, ни хотя бы одной цитаты сообщений компилятора?

Цитата Сообщение от vernol Посмотреть сообщение
inline тоже не решает проблему множественного определения
Вы пытаетесь обмануть участников форума. Зачем вы это делаете?
0
0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 20
10.03.2024, 19:22  [ТС]
сори, inline требует как минимум /std: c++ 17
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,206
10.03.2024, 19:25
Цитата Сообщение от vernol Посмотреть сообщение
сори, inline требует как минимум /std: c++ 17
Ну так поставьте /std: c++ 17
0
0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 20
10.03.2024, 19:27  [ТС]
а extern не выделяется ошибкой, но все равно выдает многократное определение. данная карта используется в двух cpp файлах. я не знаю какие еще подробности тут нужны
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,206
10.03.2024, 19:29
Цитата Сообщение от vernol Посмотреть сообщение
а extern не выделяется ошибкой
О чем речь вообще? Какой extern? Где? До сих пор нигде не было никакого extern.

И что значит "выделяется ошибкой"?

Еще раз: в чем назначение static в

C++
1
2
static const int H = 15;
static const int W = 40;
?
0
0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 20
10.03.2024, 19:33  [ТС]
окей, я поставил /std: c++ 17. теперь код компилируется и программа запускается с ошибкой

вот упоминание в файлах cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Player::collisionX()
{
    for (int i = rect.top / 32; i < (rect.top + rect.height) / 32; i++) {
        for (int j = rect.left / 32; j < (rect.left + rect.width) / 32; j++) {
            if (TileMap[i][j] == '0') {
                if (dx > 0) rect.left = j * 32 - rect.width;
                if (dx < 0)rect.left = j * 32 + 32;
            }
        }
    }
}
 
void Player::collisionY()
{
    for (int i = rect.top / 32; i < (rect.top + rect.height) / 32; i++) {
        for (int j = rect.left / 32; j < (rect.left + rect.width) / 32; j++) {
            if (TileMap[i][j] == '0') {
                if (dy > 0) { rect.top = j * 32 - rect.height; dy = 0; onGround = true; }
                if (dy < 0) { rect.top = j * 32 + 32; dy = 0; }
            }
        }
    }
}
C++
1
2
3
4
5
6
7
8
9
for (int i = 0; i < H; i++) {
            for (int j = 0; j < W; j++) {
                if (TileMap[i][j] == '0') rectangle.setFillColor(Color::White);
                if (TileMap[i][j] == ' ') continue;
 
                rectangle.setPosition(j * 32, i * 32);
                window.draw(rectangle);
            }
        }
Миниатюры
#ifndef MAP_H  
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,206
10.03.2024, 19:37
Цитата Сообщение от vernol Посмотреть сообщение
теперь код компилируется и программа запускается с ошибкой
Это прекрасно. Но это уже совсем другие ошибки. Подозреваю, что у вас в программе их еще много, учитывая, что она только сейчас начала компилироваться.
0
0 / 0 / 0
Регистрация: 20.02.2024
Сообщений: 20
10.03.2024, 19:39  [ТС]
этих ошибок не было, до того как функцию включили во второй файл
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,206
10.03.2024, 19:48
Цитата Сообщение от vernol Посмотреть сообщение
этих ошибок не было, до того как функцию включили во второй файл
Ну так раньше "функция" и не вызывалась. Вот и ошибок не было.

Цитата Сообщение от vernol Посмотреть сообщение
вот упоминание в файлах cpp
И что из этого? Как нам предлагается догадаться, чему равны все эти значения, фигурирующие в этих функциях?

Цитата Сообщение от vernol Посмотреть сообщение
и программа запускается с ошибкой
Так отладчик вам ясно показал, в каком месте вашего кода происходит ошибка. Отладчик вам показал конкретную строчку вашего кода, в которой произошел выход за пределы массива. Что это вам сказало? Почему вы до сих пор не указали на нее здесь, в форуме?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.03.2024, 19:48
Помогаю со студенческими работами здесь

Объяаление #ifndef STRING_H_
Вот мы объявляем #include &lt;iostream&gt; #ifndef STRING_H_ #define STRING_H_ Уже не редко встречаю такое включение string.h Просто...

Команды #ifndef #ifdef и #endif
Помогите разобраться с командами #ifndef #endif и #ifndef в книге все как то не понятно объяснено или же лучше если у кого то есть видео на...

Какую функцию выполняет #ifdef и #ifndef ?
#ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 101 #define _APS_NEXT_COMMAND_VALUE...

Назначение директив препроцессора: #ifndef, #define, #endif
Объясните, что обозначают эти директивы? Заем это использовать в классах? #ifndef myclass #define myclass class someclass { ...

Объясните, в чем суть директив #ifndef/#define/#endif
Не понял в чем суть директив: #ifndef .. #define.. #endifОбъясните пожалуйста..это как - то связано с хедерами, но вот как ??


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru