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

Раздельная компиляция

16.10.2014, 11:24. Показов 1356. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я перечитал на форуме информацию по этой теме, но пока что не сумел разобраться. У меня в проекте такие файлы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//ClassTree.h
 
#pragma once
 
class Node{
 
private:
    int id;
    Node *left;
    Node *right;
public: 
    Node * first();
    void search(Node *root, int digit);
    Node * insert(Node *root, int digit);
    void print_tree(Node *root, int level);
    int max_internal(Node *root);
    Node * delete_key(Node *root, int digit);
 
};
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
//ForClass.cpp
 
#include "ClassTree.h"
#include <iostream.h>
 
Node * Node::first(){
    cout << "Root's id: ";
    int temp = 0;
    cin >> temp;
    Node *pv = new Node;
    pv->id = temp;
    pv->left = 0;
    pv->right = 0;
    return pv;
}
 
void Node::search(Node *root, int digit){
    Node *pv = root;
    bool found = false;
    while (pv && !found){
        if (digit == pv->id){
            cout << "Digit " << digit << " was found!";
            found = true;
        }
        else if (digit < pv->id){ 
            pv = pv -> left;
        }
        else{
            pv = pv -> right;
        }
    }
    cout << "Digit " << digit << " was not found!";
}
 
Node * Node::insert(Node *root, int digit){
    Node *pv = root; 
    Node *prev = 0;
    while (pv){
        prev = pv;
        if (digit == pv->id){
            return pv;
        }
        else if (digit < pv->id){ 
            pv = pv -> left;
        }
        else{
            pv = pv -> right;
        }
    }
    Node *pnew = new Node;
    pnew->id = digit;
    pnew->left = 0;
    pnew->right = 0;
    if (digit < prev->id){
        prev->left = pnew;
    }
    else{
        prev->right = pnew;
    }
    return pnew;
 
}
 
void Node::print_tree(Node *root, int level){
    if (root){
        print_tree(root->left, level + 1);
        for (int i = 0; i < level; i++){
            cout << " ";
        }
        cout << root->id << endl; 
        print_tree(root->right, level +1); 
    }
}
 
int Node::max_internal(Node *root){
    int temp_max = root->id;
    Node *pv = root;
    while (pv){
        temp_max = pv->id;
        pv = pv -> right;
        if(pv->left == 0 && pv->right == 0){
            break;
        }
    }
    return temp_max;
}
 
 
Node * Node::delete_key(Node *root, int digit){
   Node* P, *v;
   if (!root){
      cout << "Tree is empty!\n";
      }
   else if (digit < root->id){
      root->left = delete_key(root->left, digit);
      }
   else if (digit > root-> id){
      root->right = delete_key(root->right, digit);
      }
   else{
      P = root;
      if (!root->right){
          root = root->left;
      }
      else if (!root->left){
         root = root->right;
      }
      else{
         v = root->left;
         if (v->right){
             while (v->right->right){
                 v = v->right;
             }
            root->id = v->right->id;
            P = v->right;
            v->right = v->right->left;
         }
         else{
            root->id = v->id;
            P = v;
            root->left = root->left->left;
         }
      }
   }
   return root;
}
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
//ForMain.cpp
 
#include "ClassTree.h"
#include <stdlib.h>
#include <iostream.h>
 
void generation(Node *root){
    int low_range = 0;
    cout << "Low range: ";
    cin >> low_range;
 
    int high_range = 0;
    cout << "High range: ";
    cin >> high_range;
 
    int amount = 0;
    cout << "Amount of nodes: ";
    cin >> amount;
 
    for(int i = 0; i < amount - 1; ++i){
        root->insert(root, ( rand() % (high_range - low_range) + low_range) );
    }
    cout << amount << " new digits was entered in the tree!\n";
}
 
bool menu(Node *root){
    int solution = 0;
    int temp = 0;
    cout << "\nMenu:\n1 - insert\n2 - print\n3 - delete key\n4 - max internal \
        \n5 - search\n6 - generation\nelse - exit.\nYour solution: ";
    cin >> solution;
    cout << endl;
    switch(solution){
    case 1:{
        cout << "\nNew digit: ";
        cin >> temp;
        root->insert(root, temp);
        break;
           }
    case 2:{
        root->print_tree(root, 0);
        break;
           }
    case 3:{
        cout << "\nDigit for delete: ";
        cin >> temp;
        root->delete_key(root, temp);
        break;
           }
    case 4:{
        cout << "Max internal: " << root->max_internal(root) << endl;
        break;
           }
    case 5:{
        cout << "\nDigit for search: ";
        cin >> temp;
        root->search(root, temp);
        break;
           }
    case 6:{
        generation(root);
        break;
           }
    default:{
        cout << "Exit." << endl;
        return false;
            }
    }
    return true;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//Main.cpp
#include "ClassTree.h"
 
bool menu(Node *root);
 
int main(){
 
    Node *P1 = P1->first();
 
    do{
    }while( menu(P1) );
    return 0;
}
Использую Microsoft Visual C++ 6.0. Как мне сделать, чтобы все заработало корректно? Что и куда надо подключить? Постоянно появляется ошибка: error LNK2001: unresolved external symbol _WinMain@16 Debug/BinaryTree.exe : fatal error LNK1120: 1 unresolved externals
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2014, 11:24
Ответы с готовыми решениями:

Раздельная компиляция
В Гугле не забанен,нашел описание самого принципа,но конкретных примеров не нашел. Вопросы вот какие: 1) Если у меня есть класс,...

Раздельная компиляция
Пусть есть программа, которая состоит из 2 файлов. 1 файл: основной, там где main 2 файл: содержит некоторые функции Также есть...

раздельная компиляция
Вот есть три файла: заголовочный файл с классом (.h), файл с реализацией методов класса (.cpp), и функцию main. Как, корректно, выполнить...

15
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
16.10.2014, 12:21
а ты для начала проект нормальный создай, в котором хотя б одна функция main нормально собиралась, а потом уже добавляй в него новые файлы.
0
4 / 4 / 6
Регистрация: 16.10.2014
Сообщений: 31
16.10.2014, 15:04  [ТС]
Я создавал уже и работало. В проекте были файлы ClassTree.h, Main.cpp и ForClass.cpp. А содержимое ForMain.cpp было в ForClass.cpp раньше. А как сделать, чтобы теперь работало, когда добавлен ещё один файл?
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
16.10.2014, 15:09
Цитата Сообщение от dimanist Посмотреть сообщение
_WinMain@16 Debug/BinaryTree.exe : fatal error LNK1120: 1 unresolved externals
WinMain главная функция для виндовых приложений
main для консольных
ты какое приложение собираешь?
как проект создаешь?
0
4 / 4 / 6
Регистрация: 16.10.2014
Сообщений: 31
16.10.2014, 15:46  [ТС]
Я всегда делал так: File - New - Win32 Console Application, а затем File - New - C++ Source File или C/C++ Header File по необходимости. Я собираю консольное приложение.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.10.2014, 16:06
Других проектов в решении нет? Скрин окна студии покажи.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
16.10.2014, 17:59
Цитата Сообщение от dimanist Посмотреть сообщение
Win32 Console Application,
но приложение то виндовое
вот и компилятор, точнее линковщик, WinMain? ищет
Цитата Сообщение от dimanist Посмотреть сообщение
LNK2001: unresolved external symbol _WinMain@16 Debug/BinaryTree.exe : fatal error LNK1120: 1 unresolved externals
есть только
Цитата Сообщение от dimanist Посмотреть сообщение
int main(){
значит нужно создавать консольное приложение
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.10.2014, 18:04
Цитата Сообщение от ValeryS Посмотреть сообщение
но приложение то виндовое
Откуда виндовое, если Console?
0
4 / 4 / 6
Регистрация: 16.10.2014
Сообщений: 31
16.10.2014, 18:26  [ТС]
Скриншот вот:
Миниатюры
Раздельная компиляция  
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
16.10.2014, 18:37
Цитата Сообщение от alsav22 Посмотреть сообщение
Откуда виндовое, если Console?
А пусть он сначала покажет, что у него в опциях проекта прописано /SUBSYSTEM:CONSOLE
и почитает это. http://msdn.microsoft.com/en-u... 8842e.aspx
тогда поверим, что его сглазили.
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
16.10.2014, 18:43
Не знаю, скорее всего, проект не тот создал, что пишешь. Зайди в свойства проекта - Компоновщик - Дополнительно - Точка входа, и пропиши там main.
Или Компоновщик - Система - Подсистема, пропиши там: Консоль.
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
16.10.2014, 19:35
Цитата Сообщение от alsav22 Посмотреть сообщение
Откуда виндовое, если Console?
а вот отсюда
Цитата Сообщение от dimanist Посмотреть сообщение
nresolved external symbol _WinMain@16 Debug/BinaryTree.exe
пишет как консоль, в смысле программу
но создал проект как виндовый или в свойствах какую галочку не так поставил
на самом деле с шестеркой лет восемь не работал, конкретней сказать не могу
это к -Юра-

Добавлено через 50 секунд
dimanist, нужен скриншот свойств проекта

Добавлено через 2 минуты
Цитата Сообщение от dimanist Посмотреть сообщение
#include <iostream.h>
устаревшая конструкция правильно сейчас писать
C++
1
#include <iostream>
шестерка уже, по моему, эту запись поддерживает
0
4 / 4 / 6
Регистрация: 16.10.2014
Сообщений: 31
16.10.2014, 19:36  [ТС]
ааа, всё заработало, спасибо большое за помощь, просто заново создал проект и т.д. Действительно, что-то с проектом намудрил. alsav22, благодарю :-) Kuzia domovenok, я прочитал всё http://msdn.microsoft.com/en-u... 8842e.aspx , но суть не уловил, не очень силен в программировании пока, к сожалению, там про точку входа речь вроде.
0
4 / 4 / 6
Регистрация: 16.10.2014
Сообщений: 31
16.10.2014, 19:42  [ТС]
ValeryS, эти свойства здесь где-то надо искать? Это на будущее просто.
Миниатюры
Раздельная компиляция  
0
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,851
16.10.2014, 19:50
Цитата Сообщение от dimanist Посмотреть сообщение
здесь где-то надо искать?
да
но конкретно, поскольку я на шестерке давно не работаю, вкладку подсказать не могу
есть такой форумчанин -Юра-, вот он шестерку зело хорошо знает

А в чем тайный смысл пользования 6???
Цитата Сообщение от dimanist Посмотреть сообщение
там про точку входа речь вроде.

функция main (WinMain) на самом деле это не первая функция программы, сначала исполняется некий установочный код, который настраивает программу
и вот в зависимости от того консольное или оконное приложение этот код отличается
даже у разных фирм он может быть разный
вот это и можно назвать точкой входа
0
4 / 4 / 6
Регистрация: 16.10.2014
Сообщений: 31
16.10.2014, 20:42  [ТС]
ValeryS, да, я нашел уже его профиль на форуме, спасибо, буду знать, если что Я не знаю, почему 6 использую, привык как-то, хотя и Visual C++ 2010 Express есть и Qt. Надо осваивать новое, верно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2014, 20:42
Помогаю со студенческими работами здесь

Раздельная компиляция файлов
Если класс определен в раздельных файлах и изменения сделаны в части main программы, кот использует класс - какой файл необходимо...

Шаблоны и раздельная компиляция
Здравствуйте! Если просто я пишу класс, например: class Test { private: int *pm; ... public: bool inc();

Раздельная компиляция и шаблоны
привет. возьму вот такой выдуманный пример #ifndef CCLASS_H #define CCLASS_H #include &lt;functional&gt; class...

Раздельная компиляция и шаблоны
Есть 3 файла с кодом: 1) foo.hpp template&lt;typename T&gt; class foo { public: T bar; foo(); ~foo(); };

Раздельная компиляция шаблонных классов
Пытаюсь сделать класс, который определяет вектор. И содержит методы для работы с ними. Выдаёт эти ошибки и я не понимаю почему) ...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru