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

Использование одной константы в нескольких файлах

19.07.2017, 14:01. Показов 4979. Ответов 2

Author24 — интернет-сервис помощи студентам
Пишу примитивную игру, в которой игрок ходит по прямоугольному полю и встречает монстров. Решил разделить разросшийся cpp-файл на несколько. В файле был следующий код:
C++
1
2
const int FIELDSIZE = 10;
bool visited[FIELDSIZE][FIELDSIZE];
В одном файле я так всё и оставил, в другом visited сделал extern.
C++
1
2
const int FIELDSIZE=10;
extern bool visited[FIELDSIZE][FIELDSIZE];
Не нравится то, что константа повторяется в двух файлах, хотелось бы иметь одно значение, при однократном изменении которого вся конструкция бы корректно работала.
Попробовал так:
C++
1
2
extern const int FIELDSIZE;
extern bool visited[FIELDSIZE][FIELDSIZE];
Итог:
Код
field.cpp(21): error C2087: visited: отсутствует индекс
Сделал так:
C++
1
2
extern const int FIELDSIZE=10;
extern bool visited[FIELDSIZE][FIELDSIZE];
Проект собирается, но мы вернулись к разбитому корыту с необходимостью помнить об изменении числа в двух файлах. Как сделать красиво?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.07.2017, 14:01
Ответы с готовыми решениями:

Использование namespace в нескольких файлах
Добрый вечер, хочу спросить, можно ли вот так размещать функции в namespace?: Memory.h ...

Использование enum в нескольких файлах
Как объявить или куда поместить enum mode{x, y, z} чтобы его можно было использовать в файлах f1.h...

Использование type alias в нескольких файлах
define.h: #pragma once using uint = unsigned int; using ushort = unsigned short; static...

Подключение одной директивы в нескольких файлах
Здравствуйте форумчане!Изучаю классы и столкнулся с такой ошибкой : Понял что эта ошибка связана...

2
11 / 10 / 8
Регистрация: 22.04.2015
Сообщений: 43
19.07.2017, 14:09 2
Если нужно использовать константу одну и туже в нескольких .cpp тогда лучше будет создать заголовочный файл.
1
308 / 271 / 220
Регистрация: 14.11.2016
Сообщений: 1,049
19.07.2017, 15:01 3
Все константы в отдельный файл вынеси в header, как понимаю у тебя есть ещё 2 файла с реализацией.
1) Подключаешь файл с константами в каждый файл.
2) Либо если у тебя они потом все подключаются в тот файл где main(), то подключаешь константы, потом 2 файла с реализацией.

Цитата Сообщение от Achez Посмотреть сообщение
В одном файле я так всё и оставил, в другом
Цитата Сообщение от Achez Посмотреть сообщение
C++
1
2
extern const int FIELDSIZE=10;
extern bool visited[FIELDSIZE][FIELDSIZE];
Это тоже как вариант.

Добавлено через 43 минуты
C++
1
2
3
4
5
6
//****** constant.h *******
#ifndef CONSTANT_H
#define CONSTANT_H
extern const int FIELDSIZE;
extern bool visited[10][10];
#endif // !CONSTANT_H
C++
1
2
3
4
//****** constant.cpp ******
#include "constant.h"
const int FIELDSIZE = 10;
bool visited[FIELDSIZE][FIELDSIZE];
C++
1
2
3
4
5
6
7
//****** Source.h *******
#ifndef SOURCE_H
#define SOURCE_H
#include <cstdlib>
#include <ctime>
void input_rand(void);
#endif // !SOURCE_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//****** Source.cpp ******
#include "constant.h"
#include "Source.h"
void input_rand(void)
{
    std::srand(unsigned(std::time(NULL)));
    for (unsigned i(0U); i < FIELDSIZE; i++)
    {
        for (unsigned j(0U); j < FIELDSIZE; j++)
        {
            visited[i][j] = rand() % 2;
        }
    }
}
C++
1
2
3
4
5
6
//****** OtherSource.h *******
#ifndef OTHERSOURCE_H
#define OTHERSOURCE_H
#include <iostream>
void print(void);
#endif // !OTHERSOURCE_H
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//****** OtherSource.cpp ******
#include "constant.h"
#include "OtherSource.h"
void print(void)
{
    std::cout << "visited: " << std::endl;
    for (unsigned i(0U); i < FIELDSIZE; i++)
    {
        for (unsigned j(0U); j < FIELDSIZE; j++)
        {
            std::cout << visited[i][j] << " ";
        }
        std::cout << std::endl;
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
//****** main.cpp ******
#include "Source.h"
#include "OtherSource.h"
#include <iostream>
int main(int argc, char **argv)
{
    input_rand();
    print();
    std::cin.get();
    return EXIT_SUCCESS;
}
0
19.07.2017, 15:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.07.2017, 15:01
Помогаю со студенческими работами здесь

Создать внешний скрипт (макрос) для удаления строк с объеденными ячейками в нескольких файлах Excel в одной папке
Например есть в папке несколько файлов Excel, нужно чтобы при запуске скрипта в этих файлах...

Использование нескольких form на одной странице
Задача следующая: На странице есть пару ссылок на формирование документа в формате Excel....

Использование нескольких функций для одной переменной
Здравствуйте! В программах видел такое: предположим, есть переменная типа string (string f =...

Константы в заголовочных файлах
declare.h #pragma once extern const size_t rows; extern const size_t cols; double...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru