0 / 0 / 0
Регистрация: 05.04.2018
Сообщений: 4
1

Несколько заголовочных файлов в одной программе С++

04.12.2019, 21:45. Показов 957. Ответов 4
Метки нет (Все метки)

Здравствуйте)!
У меня возникло недопонимание с заголовочными файлами.Я хочу использовать заголовочный файл для вывода на консоль контур квадрата из чисел и для того, чтобы определить размер, я использую другой заголовочный файл, в котором и происходит инициализация и определение , однако в таком случае компилятор соответственно ругается, что они не определены и не инициализированы в 1 заголовочном файле.Если же я в обоих файлах инициализирую то естественно происходит переопределение и переинициализация .Пробовал использовать еxtern, но она делает их константами, а тогда они не могут нормально инициализироваться, потому что их значения высчитывается по формуле, а константа есть константа.Вот я и не могу разрешить , как можно использовать одну переменную определяемую в одном заголовочном файле, чтобы можно было использовать в других.

ну например:

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
#include<iostream>
#include"cart.h"
#include"Input.h"
#include"Logic.h"
using namespace std;
 bool GameOver;
extern const int weight = 40;
extern const int height = 10;
  int x, y, fruitX, fruitY, score;
enum numb { STOP = 0, LEFT, RIGHT, UP, DOWN };
 numb dir;
 
void Setup() {
    
    GameOver = false;
    dir = STOP;
    x = weight / 2;
    y = height / 2;
    fruitX = rand() % weight;
    fruitY = rand() % height;
    score = 0;
}
 
int main() {
    Setup ();
    while (!GameOver) {
        Draw(weight, height);
        Input();
        Logic();
    }
    system("pause");    
    return 0;
}
это cart.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
#include<iostream>
using namespace std; 
void Draw(int weight,int height) {
    system("cls");
    for (int i = 0; i < weight + 1; i++) {
        cout << "#";
    }
    cout << endl;
    int x, y, fruitY, fruitX;
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < weight; j++) {
            if (j != 0 & j != weight)
                cout << " ";
            else cout << "#";
            if (i == y && j == x)
                cout << "0";
            else if (i == fruitY && j == fruitX)
                cout << "F";
        }
    }
    
    for (int i = 0; i < weight + 1; i++) {
        cout << "#";
    }
    cout << endl;
 
    
}
 
#endif // !
остальные не прописал ещё, но думаю там могут возникнуть схожие проблемы.Функция Setup раньше тоже была заголовочным файлом, но там произошла та же история и я уже начал всё сносить в основной файл, но мне не удобно листать основу кода в поисках нужного элемента, поэтому и разбиваю на несколько частей из заголовочных файлов.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2019, 21:45
Ответы с готовыми решениями:

Может ли в папке jni быть несколько заголовочных файлов?
Может ли в папке jni быть несколько заголовочных файлов .h ?? И как если это надо прописать в...

Про добавление заголовочных файлов в заголовочных файлах
В который раз эта вещь засовывает мозги в блендер! Я про то, что не могу однозначно запомнить...

Как добавить несколько файлов одной кнопкой и в одной форме php
Здравствуйте! Как добавить несколько файлов одной кнопкой и в одной форме php Например есть такая...

Несколько функций в одной программе
Проблема такая. Пишу программу, хочу, чтобы при выборе определенного номера (задания) программа...

4
6565 / 4550 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
04.12.2019, 23:24 2
Цитата Сообщение от mardered Посмотреть сообщение
У меня возникло недопонимание с заголовочными файлами.Я хочу использовать заголовочный файл для вывода на консоль контур квадрата из чисел и для того, чтобы определить размер, я использую другой заголовочный файл, в котором и происходит инициализация и определение , однако в таком случае компилятор соответственно ругается, что они не определены и не инициализированы в 1 заголовочном файле.Если же я в обоих файлах инициализирую то естественно происходит переопределение и переинициализация
Для начала, никогда не делай в заголовках using namespace
Цитата Сообщение от mardered Посмотреть сообщение
extern const int weight = 40;
extern const int height = 10;
Здесь убери extern
Цитата Сообщение от mardered Посмотреть сообщение
Вот я и не могу разрешить , как можно использовать одну переменную определяемую в одном заголовочном файле, чтобы можно было использовать в других.
Какие конкретно переменные ты хочешь определить в одно файле? Из примера нифига непонятно.
1
Комп_Оратор)
Эксперт по математике/физике
8725 / 4472 / 600
Регистрация: 04.12.2011
Сообщений: 13,358
Записей в блоге: 16
04.12.2019, 23:52 3
Цитата Сообщение от mardered Посмотреть сообщение
Я хочу использовать заголовочный файл для вывода на консоль контур квадрата
А для забивания гвоздей не хотите? mardered, откуда стремление к поступкам не объяснимым традиционной логикой?
Почему бы вам не познакомиться с задачами которые решаются заголовочными файлами?
Например:
Простое включение деклараций и определений в другие фалы чревато циклическими зависимостями. Разделение модулей на объявления и реализацию позволяет преодолеть подобные неприятности. Отсюда, разумные самоограничения на то, что следует включать в заголовочные файлы. Тут же название само за себя говорит. Заголовок функции это то что предществует первой фигурной скобке. mardered, соберитесь и настройтесь на целенаправленную деятельность.
1
0 / 0 / 0
Регистрация: 05.04.2018
Сообщений: 4
07.12.2019, 00:01  [ТС] 4
Спасибо за ответ, я уже разобрался в проблеме и понял, что пытался заставить кошку крякать.Просто многие пособия написаны с таким обилием терминов и дополнительной информации, что я просто не мог толком разобраться в теории, вот и получил такое на практике

Добавлено через 2 минуты
Спасибо за ответ, я уже разобрался в проблеме и понял, что пытался заставить кошку крякать.Просто многие пособия написаны с таким обилием терминов и дополнительной информации, что я просто не мог толком разобраться в теории, вот и получил такое на практике (просто скопировал,потому что ,какой смысл печатать другое? )
0
Комп_Оратор)
Эксперт по математике/физике
8725 / 4472 / 600
Регистрация: 04.12.2011
Сообщений: 13,358
Записей в блоге: 16
07.12.2019, 00:09 5
Цитата Сообщение от mardered Посмотреть сообщение
я уже разобрался в проблеме и понял, что пытался заставить кошку крякать.
Англичане говорят, что если что-то крякает как кошка, плавает как кошка и выглядит как кошка, то это скорее всего не утка. Мудрые люди.
Цитата Сообщение от mardered Посмотреть сообщение
Спасибо за ответ, я уже разобрался
Приятно это слышать. Значит мы провели время с пользой и удовольствием. Привет кошке.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2019, 00:09
Помогаю со студенческими работами здесь

Несколько серверов в одной программе
Гуру, подскажите, Spring на такое способен? Задумка: сервер на :8000 для клиентов (обычный...

Несколько классов в одной программе
Как написать программу, которая состоит из двух классов, притом, что первый должен определять,...

Несколько алгоритмов сортировки в одной программе
Здравствуйте, форумчане. Подскажите пожалуйста, у меня есть 5 кодов программ. Суть в том, что...

Подскажите, как сделать несколько итераций в одной программе
суть такова: есть формула типа а=f(v,h)нужно, рассчитать несколько итераций по схеме a=f9v,h);...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru