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

Правильное подключение .h и .cpp файлов

24.10.2019, 00:00. Показов 10740. Ответов 7

Author24 — интернет-сервис помощи студентам
Доброго времени уважаемые форумчане. Я совсем зеленый в плюсах, не бейте пожалуйста сильно.

Делаю программу которая выдает разные математические задачи для решения.
На примере этой программы хочу попрактиковаться в подключении разных файлов.
Задача следующая:
Оформить 2 заголовочных файла main.h и tasks.h:
В main.h будут все необходимые #include используемые в коде.
В tasks.h будет перечисление всех .cpp с исходными кодами задач (task1.cpp, task2.cpp, task3.cpp...).

Файлы task1.cpp, task2.cpp... должны включать в себя только код отвечающий за отработку методов отдельных задач.
(пример метода одной задачи - bool task1() в коде ниже)

В главном MathTrainer.cpp файле проекта будет описан код отвечающий за случайную выдачу задач и ведение счета, то-есть метод int main ().

Также хочу вывести в отдельный файл Randomer.cpp с кодом который отвечает за методы int random() генерирующую "случайные" числа.

На данный момент у меня есть рабочий код с одной задачей, но работает он только в если весь код в главном файле MathTrainer.cpp. Если я пытаюсь как-либо это все "распихать" по разным файлам и попереподключать все это дело, ловлю ошибки LNK2005 и LNK1169. Подскажите пожалуйста, как это правильно делать?

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
#include <chrono>
#include <random>
#include <string>
 
int random(int num)
{
    int seed1 = (int)(std::chrono::system_clock::now().time_since_epoch().count());
 
    std::minstd_rand0 random(seed1);
    int randomResult = random() % num;
    return randomResult;
}
 
int random(int from, int to)
{
    int seed1 = (int)(std::chrono::system_clock::now().time_since_epoch().count());
    std::minstd_rand0 random(seed1);
    int randomResult;
    do {
        randomResult = random() % to;
    } while (randomResult < from);
    randomResult /= 10;
    randomResult *= 10;
    return randomResult;
}
 
bool task1()
{
    int attempt = 0;
    int maxAttempts = 5;
    int price = random(20, 50);
    int money = random(price, 1000);
    double discount = random(2, 90);
    int answer = money / (price - (price * (discount / 100)));
    bool result = false;
 
    std::cout << "You have a " << money << " dollars." << std::endl;
    std::cout << "Notebook costs " << price << " dollars." << std::endl;
    std::cout << "Today the store has a " << discount << "% of discount" << std::endl;
    std::cout << "What is the largest number of such notebooks you can buy?" << std::endl << std::endl;
    int userAnswer;
    do {
        ++attempt;
        std::cout << "Attempt #" << attempt << "\t";
        std::cin >> userAnswer;
        if (userAnswer != answer)
            std::cout << "Incorrect solution. " << maxAttempts - attempt << " Attempts left. Try again!" << std::endl;
        else
        {
            std::cout << "Correct! Good job!" << std::endl << std::endl;
            result = true;
        }
    } while (result == false && attempt != maxAttempts);
    system("pause");
    system("cls");
    return result;
}
 
int main()
{
    int score = 0;
    int toWin = 10;
    do{
        std::cout << std::endl << "Total Score - " << score << std::endl << std::endl;
        std::cout << toWin - score << " attempts left" << std::endl << std::endl;
        if (task1())
            ++score;
        else
            --toWin;
    } while (score != toWin);
    
    std::cout << "You managed to reach " << score << " Points" << std::endl;
    system("pause");
}
ЗАРАНЕЕ БОЛЬШОЕ СПАСИБО!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.10.2019, 00:00
Ответы с готовыми решениями:

Подключение файлов main.cpp some.cpp some.h
Всем привет, программа разделенна на три файла poly.cpp main.cpp poly.h Кто мог бы объяснить как происходит подключение этих файлов, и как...

Условное подключение cpp файлов
Здравствуйте,я вот захотел сделать в своей программе выбор языка,но увеличивать программу на кучу строк не захотел и поэтому создал 2 файла...

Подключение в проекте .hpp и .cpp файлов
Добрый день! Среда разработки Code Blocks 13.12 Компилятор GNU GCC В проекте существует 3 файла в проекте - main.cpp, SW229.cpp и...

7
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
24.10.2019, 00:05 2
посмотри урок может зайдет
https://www.youtube.com/watch?... s&index=28
0
Эксперт С++
 Аватар для _lunar_
3701 / 2835 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
24.10.2019, 15:00 3
Лучший ответ Сообщение было отмечено _lunar_ как решение

Решение

Цитата Сообщение от GeneralBoobs Посмотреть сообщение
хочу попрактиковаться в подключении разных файлов
а в чём проблема?

task1.h
C++
1
2
3
#include <iostream>
 
void Foo1();
task1.cpp
C++
1
2
3
4
5
6
7
#include "task1.h"
 
void Foo1()
{
    int a = 2, b = 3;
    std::cout << "Sum = " << a + b << std::endl;
}
main.h
C++
1
#include "task1.h"
main.cpp
C++
1
2
3
4
5
6
7
8
#include "main.h"
 
int main()
{
    Foo1();
    std::cin.get();
    return 0;
}
1
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 33
24.10.2019, 17:03  [ТС] 4
Цитата Сообщение от _lunar_ Посмотреть сообщение
а в чём проблема?
Проблема в том что в попытке это сделать я сталкиваюсь с ошибками LNK2005 и LNK1169.
Я не пойму что я делаю не так и поэтому прошу показать как правильно сделать то что я хочу сделать (все подробно описано в первом сообщении)
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
24.10.2019, 17:09 5
Лучший ответ Сообщение было отмечено GeneralBoobs как решение

Решение

Цитата Сообщение от GeneralBoobs Посмотреть сообщение
В tasks.h будет перечисление всех .cpp с исходными кодами задач (task1.cpp, task2.cpp, task3.cpp...).
Это что значит, что за перечисление .cpp?
В h-файлах у тебя должны быть только декларации функции, вот в таком виде
C++
1
2
3
int random(int num);
int random(int from, int to);
bool task1();
а их реализации - в cpp
1
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 33
24.10.2019, 18:13  [ТС] 6
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
В h-файлах у тебя должны быть только декларации функции
Кажется в этом проблема! Сейчас попробую!

Цитата Сообщение от oleg-m1973 Посмотреть сообщение
а их реализации - в cpp
Вот чего я не знал! Все работает! Огромное спасибо!!!
0
Эксперт С++
 Аватар для _lunar_
3701 / 2835 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
24.10.2019, 19:12 7
Цитата Сообщение от GeneralBoobs Посмотреть сообщение
Вот чего я не знал! Все работает! Огромное спасибо!!!

я вам это и показал вообще-то... мда
1
0 / 0 / 0
Регистрация: 16.09.2017
Сообщений: 33
24.10.2019, 22:36  [ТС] 8
Цитата Сообщение от _lunar_ Посмотреть сообщение
я вам это и показал
Теперь я понимаю что Вы показали, до этого это был непонятный мне код. Но все равно спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.10.2019, 22:36
Помогаю со студенческими работами здесь

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

Правильное подключение заголовочных файлов
Всем привет!!!Начал разбираться с ООП , и ... тут же возникла проблема. Пишу программу следующую есть два класса футболист и команда и...

Подключение к main.cpp заголовочных файлов с классами
Есть следующий код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; #include &quot;student.h&quot; using...

Правильное связывание .cpp & .h
Доброго всем! Обращаюсь за советом: как лучше и грамотнее написать? Есть 2 класса, назовем их класс А и класс В. Они и все их...

Подключение .h и .cpp файлов к проекту
Я запутался в элементарном. Но всё по порядку. Создал проект. Автоматически был создан файл Unit1.cpp. Я добавил два файла dat.h и...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Что нового в C# 14
UnmanagedCoder 10.03.2025
Предстоящая версия C# 14 обещает принести изменения, которые сделают разработку еще более приятной и эффективной. Что стоит отметить, так это влияние сообщества разработчиков на формирование новых. . .
Формулы поворота
Igor3D 10.03.2025
Добрый день Тема Эти формулы приводятся во множестве тьюториалов, часто под видом "матрица вращения на плоскости". x' = x * cos(a) - y * sin(a) y' = y * cos(a) + x * sin(a) Как бы Вы их. . .
Что нового в .NET 10
UnmanagedCoder 10.03.2025
. NET 10 выходит как релиз с длительной поддержкой (LTS), включающей три года обновлений. В этом обновлении Microsoft сфокусировались на нескольких направлениях: производительность, оптимизация. . .
Отложенное высвобождение, RCU и Hazard Pointer в C++26
NullReferenced 09.03.2025
Многопоточное программирование стало важной частью современной разработки. Когда несколько потоков одновременно работают с общими данными, возникает целый ряд проблем, связанных с синхронизацией и. . .
Неблокирующийся стек на C++26
NullReferenced 09.03.2025
Традиционные способы синхронизации в многопоточном программировании — мьютексы, семафоры, условные переменные — часто превращаются в узкое место в плане производительности. При этом неблокирующиеся. . .
Обработка строк в C++26: Новые возможности string и string_view
NullReferenced 09.03.2025
Новый стандарт C++26 предлагает много улучшений для работы с привычными string и относительно новыми string_view. string_view - это невладеющая ссылка на последовательность символов, появившаяся в. . .
Мой первый аддон для Blender 3D, с помощью нейронки (не зная даже азов пайтона, но это не значит что так и с остальным).
Hrethgir 09.03.2025
Потратил весь день. Пол-дня мне хватило, чтобы понять что с версией с 14B мне не одолеть написание функционального кода, на языке с которым я вообще никак не знаком - пайтон. Версия 22B от другого. . .
Einstein@Home сегодня исполняется двадцать лет!
Programma_Boinc 09.03.2025
Einstein@Home сегодня исполняется двадцать лет! Отправлено 19 февраля 2025 года в 17:20:21 UTC Я хочу поздравить всех наших волонтеров, разработчиков и ученых из Einstein@Home. Мы официально. . .
Заполнители и расширенный набор символов в C++26
NullReferenced 09.03.2025
C++26 представляет два важных обновления: заполнители и расширенный набор символов. Заполнители (placeholders) решают давнюю проблему лаконичности кода в шаблонных выражениях и лямбда-функциях. Они. . .
Контракты в C++26
NullReferenced 09.03.2025
Контракты – это механизм, позволяющий указывать предусловия, постусловия и инварианты для функций в коде. Эта функциональность должна была стать частью C++20, но была исключена на встрече комитета. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru