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

Ошибка LNK2005 в многофайловом проекте

18.01.2019, 09:18. Показов 1791. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Появилась такая проблема ,выдает ошибку LNK2005 при компиляции программы,вроде сделано все правильно прототипы в .h,а реализация в .cpp , вызаваю функции из главного.cpp файла. Подскажите,что не так ? и еще он на #endif ругается,но если поставить #if 1 ругаться перестает,но стоит ли использовать #if 1 ?
вот программный код по 3 файлам:
*.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
#if 1
#include <iostream>
#include <string>
#include <map>
#include <set>
 
using std::string;
using std::cout;
using std::cin;
using namespace std;
 
class MyClass {
public:
    void Create_tram(map<int, set<string>> &m);
    void trams(map<int, set<string>> &m);
    void Trams_in_stop(map<int, set<string>> &m, string s);
    void Stops_in_tram(map<int, set<string>> &m, int n);
};
#endif
*.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
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
#include "pch.h"
#include <iostream>
#include <string>
#include <map>
#include <set>
#include "Source.h"
 
 
using namespace std;
using std::string;
using std::cout;
using std::cin;
 
 
void MyClass::Create_tram(map<int, set<string>>& m)
{
    int i, n, k;
    string s;
    cout << "Enter the nimber of tramstops: " << endl;
    cin >> k;
    cout << "Enter the number of tram: " << endl;
    cin >> n;
    for (i = 0; i < k; i++) {
        cout << "Enter tne name of tramstop:" << endl;
        cin >> s;
        m[n].insert(s);
    }
}
 
void MyClass::trams(map<int, set<string>>& m)
{
    for (const auto &i : m) {
        cout << "Number of tram: " << i.first << endl;
        cout << "Tramstops: ";
        for (const auto &el : m[i.first]) {
            cout << el << " ";
        }
        cout << "\n--------------------------------------------------\n";
    }
}
 
void MyClass::Trams_in_stop(map<int, set<string>>& m, string s)
{
    for (const auto &i : m) {
        for (const auto &el : m[i.first]) {
            if (el == s) {
                cout << "Number of tram: " << i.first << endl;
            }
        }
    }
}
 
void MyClass::Stops_in_tram(map<int, set<string>>& m, int n)
{
    for (const auto &i : m) {
        if (i.first == n) {
            cout << "Tramstops: ";
            for (const auto &el : m[i.first]) {
                cout << el << " ";
            }
        }
    }
}
и main.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
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "pch.h"
#include <iostream>
#include <string>
#include <map>
#include <set>
#include "Source.h"
#include "Source.cpp"
 
using std::string;
using std::cout;
using std::cin;
using namespace std;
 
enum class type {
    CREATE_TRAM = 1,
    TRAMS_IN_STOP = 2,
    STOPS_IN_TRAM = 3,
    TRAMS = 4
};
 
int status;
void Menu() {
    cout << "          Меню\n"
        << "(0) Выйти из программы. \n"
        << "(1) Создать трамвай.\n"
        << "(2) Вывод трамваев, проходящих через остановку.\n"
        << "(3) Вывод остановок указанного трамвая.\n"
        << "(4) Вывод всех трамваев.\n";
 
    cin >> status;
}
 
int main()
{
    MyClass tram;
    
    map<int, set<string>> m;
    Menu();
    while (status != 0) {
        auto status_enum = static_cast<type>(status);//явное преобразование int в type
        switch (status_enum)
        {
        case type::CREATE_TRAM: {//создание трамвая
            system("cls");
 
            tram.Create_tram(m);
 
            system("pause");
            system("cls");
            Menu();
        }
                                break;
        case type::TRAMS_IN_STOP: {//поиск трамваев для данной остановки
            system("cls");
 
            string s;
            cout << "Enter the name of tramstop:" << endl;
            cin >> s;
            tram.Trams_in_stop(m, s);
 
            system("pause");
            system("cls");
            Menu();
        }
                                  break;
        case type::STOPS_IN_TRAM: {//вывод остановок данного трамвая
            system("cls");
 
            int n;
            cout << "Enter the number of tram:" << endl;
            cin >> n;
            tram.Stops_in_tram(m, n);
 
            system("pause");
            system("cls");
            Menu();
        }
                                  break;
        case type::TRAMS: {//вывод всех трамваев
            system("cls");
 
            tram.trams(m);
 
            system("pause");
            system("cls");
            Menu();
        }
                          break;
        default:
            cout << "Invalid mode" << endl;
 
            system("pause");
            system("cls");
            Menu();
            break;
        }
    }
    system("cls");
    cout << "The end of work\n";
    system("pause");
 
}
Прошу,пожалуйста,помогите
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.01.2019, 09:18
Ответы с готовыми решениями:

Ошибка LNK2019 в многофайловом проекте
Смысл: Мне нужно создать абстрактный класс контейнер, на его основе конкретные классы, далее создать абстрактный класс итератор и для...

Ошибка линковки в многофайловом проекте
что за на??? в проекте 3 модуля: main.cpp, test.cpp, test.h, в main.cpp и test.cpp подключен test.h, в test.h одна единственная функция int...

Ошибка при работе с шаблонами в многофайловом проекте
Цель проста - пишу класс очереди, используя шаблоны. Возниает следующая ошибка: ||=== Build: Debug in Queue (compiler: GNU GCC Compiler)...

3
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
18.01.2019, 09:40
Цитата Сообщение от LolinaZzZ Посмотреть сообщение
#include "Source.cpp"
на первый взгляд это не надо в main.cpp

Добавлено через 2 минуты
Цитата Сообщение от LolinaZzZ Посмотреть сообщение
и еще он на #endif ругается,но если поставить #if 1 ругаться
что ругаться, перестает?

Добавлено через 4 минуты
до директивы #endif всегда должна быть директива #if
C++
1
2
3
4
5
6
7
#if 1 // если истина или 1 то препроцессор разбирает то что внутри #if ... #endif
int i = 10;
#endif
 
#if 0 // если ложь или 0 то препроцессор пропускает то что внутри #if ... #endif
int i = 10;
#endif
0
0 / 0 / 0
Регистрация: 21.10.2018
Сообщений: 21
18.01.2019, 09:49  [ТС]
_stanislav,да,перестает ругаться,ошибочка вышла,просто есть еще такие вещи как #ifndef и #define ,для чего они нужны ?

Как оказалось,в этом и была ошибка,еще учиться и учиться,да и внимательнее быть не помешает
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
18.01.2019, 09:56
Цитата Сообщение от LolinaZzZ Посмотреть сообщение
для чего они нужны ?
C++
1
2
3
4
#ifndef BLABLABLA // если BLABLABLA не определен
#define BLABLABLA // определить BLABLABLA
...
#endif
это используется для include guards.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.01.2019, 09:56
Помогаю со студенческими работами здесь

Struct в многофайловом проекте
Если в main файле создать структуру, то как её использовать в функциях, которые в других cpp файлах? Структуру требуется объявить в...

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

Перегрузка << в многофайловом проекте
Чтобы узнать, как перегружать потоки, зашел на msdn, нашел там это: #include &lt;iostream&gt; using namespace std; class...

Вызов функции в многофайловом проекте
Компилятор ругается на указатель на массив &quot;a&quot; , в файле main.cpp Вот файлы проекта: main.cpp/// #include &quot;iostream&quot;...

Иерархия классов в многофайловом проекте
Всем привет. Есть проблема с созданием программы. Должна быть небольшая иерархия классов, и все классы должны быть описаны в паре .h и .cpp...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru