Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/26: Рейтинг темы: голосов - 26, средняя оценка - 4.88
 Аватар для insolent
829 / 353 / 64
Регистрация: 30.01.2009
Сообщений: 1,204

Error LNK2019 + упрощенный вариант консольной графики

11.08.2009, 03:49. Показов 5210. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Программка из книги Лафоре "ОПП в С++", Глава 10.
Закинул я msoftcon.h и msoftcon.срр в папку к исходникам..
horse.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <ctime>
#include <cstdlib>
#include "msoftcon.h"
const int CPF = 5;
const int maxHorses = 7;
//////////////////////////////////////////////////////////////////////////
class track;
//////////////////////////////////////////////////////////////////////////
class horse
{
private:
    const track* ptrTrack;
    const int horse_number;
    float finish_time;
    float distance_run;
public:
    horse(const int n, const track* ptrT):
      horse_number(n),
      ptrTrack(ptrT),
      distance_run(0.0)
    {}
    ~horse()
    {}
    void display_horse(const float elapsed_time);
};
//////////////////////////////////////////////////////////////////////////
class track
{
private:
    horse* hArray[maxHorses];
    int total_horses;
    int horse_count;
    const float track_length;
    float elapsed_time;
public:
    track(float lenTr, int nH);
    ~track();
    void display_track();
    void run();
    float get_track_len() const;
};
//////////////////////////////////////////////////////////////////////////
void horse::display_horse(const float elapsed_time)
{
    set_cursor_pos(1 + int(distance_run*CPF),2 + horse_number*2);
    set_color(static_cast<color>(cBLUE + horse_number));
    char horse_char = '0' + static_cast<char>(horse_number);
    putch(' ');
    putch('\xDB');
    putch(horse_char);
    putch('\xDB');
    if(distance_run < ptrTrack->get_track_len() + 1.0/CPF)
    {
        if(rand()%3)
            distance_run = 0.2F;
        finish_time = elapsed_time;
    }
    else
    {
        int mins = int(finish_time)/60;
        int secs = int(finish_time) - mins*60;
        cout << "Время = " << mins << ":" << secs; 
    }
}
//////////////////////////////////////////////////////////////////////////
track::track(float lenTr, int nH):
    track_length(lenTr),
    total_horses(nH),
    horse_count(0),
    elapsed_time(0.0)
{
    init_graphics();
    total_horses = (total_horses > maxHorses) ? maxHorses : total_horses;
    for(int j = 0; j < total_horses;j++)
        hArray[j] = new horse(horse_count++,this);
 
    time_t aTime;
    srand(static_cast<unsigned>(time(&aTime)));
    display_track();
}
//////////////////////////////////////////////////////////////////////////
track::~track()
{
    for(int j = 0; j < total_horses;j++)
        delete hArray[j];
}
//////////////////////////////////////////////////////////////////////////
void track::display_track()
{
    clear_screen();
 
    for(int f = 0; f <= track_length;f++)
        for(int r = 1; r <= track_length*2 + 1;r++)
        {
            set_cursor_pos(f * CPF + 5, r);
            if(f == 0 || f == track_length)
                cout << '\xDB';
            else 
                cout << '\xB3';
        }
}
//////////////////////////////////////////////////////////////////////////
void track::run()
{
    while(!kbhit())
    {
        elapsed_time += 1.75;
        for(int j = 0; j < total_horses;j++)
            hArray[j]->display_horse(elapsed_time);
        wait(500);
    }
    getch();
    cout << endl;
}
//////////////////////////////////////////////////////////////////////////
float track::get_track_len() const
{
    return track_length;
}
//////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
    float length;
    int total;
    cout << "\nВведите длину дистанции(от 1 до 12): ";
    cin >> length;
    cout << "\nВведите количество лошадей(от 1 до 7): ";
    cin >> total;
    track theTrack(length,total);
    theTrack.run();
    getchar();
    return 0;
}

msoftcon.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
31
32
//msoftcon.h
//Объявления функций консольной графики от Lafore
//используются консольные функции Windows 
 
#ifndef _INC_WCONSOLE    //этот файл не должен включаться
#define _INC_WCONSOLE    //дважды в тот же исходный файл
 
#include <windows.h>     //для консольных функций Windows
#include <conio.h>       //для kbhit(), getche()
#include <math.h>        //для sin, cos
 
enum fstyle { SOLID_FILL, X_FILL,      O_FILL, 
              LIGHT_FILL, MEDIUM_FILL, DARK_FILL };
 
enum color {
   cBLACK=0,     cDARK_BLUE=1,  cDARK_GREEN=2, DARK_CYAN=3, 
   cDARK_RED=4,  cDARK_MAGENTA=5, cBROWN=6,  cLIGHT_GRAY=7,
   cDARK_GRAY=8, cBLUE=9,         cGREEN=10,     cCYAN=11, 
   cRED=12,      cMAGENTA=13,     cYELLOW=14,    cWHITE=15 };
//---------------------------------------------------------
void init_graphics();
void set_color(color fg, color bg = cBLACK);
void set_cursor_pos(int x, int y);
void clear_screen();
void wait(int milliseconds);
void clear_line();
void draw_rectangle(int left, int top, int right, int bottom);                    
void draw_circle(int x, int y, int rad);
void draw_line(int x1, int y1, int x2, int y2);
void draw_pyramid(int x1, int y1, int height);
void set_fill_style(fstyle);
#endif /* _INC_WCONSOLE */

msoftcon.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
//msoftcon.cpp
//подпрограммы доступа к консольным функциям Windows 
 
//компилятор должен знать, где искать этот файл
//в MCV++, /Tools/Options/Directories/Include/type путь
 
#include "msoftcon.h"
HANDLE hConsole;         //поддержка консольного режима 
char fill_char;          //символ заполнения
//---------------------------------------------------------
void init_graphics()
   {
   COORD console_size = {80, 25};
   //открыть канал ввода/вывода на консоль
   hConsole = CreateFile("CONOUT$", GENERIC_WRITE | GENERIC_READ,
                   FILE_SHARE_READ | FILE_SHARE_WRITE,
                   0L, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0L);
   //установить размер экрана 80x25 
   SetConsoleScreenBufferSize(hConsole, console_size);
   //текст белым по черному 
   SetConsoleTextAttribute( hConsole, (WORD)((0 << 4) | 15) );
 
   fill_char = '\xDB';  //заполнение по умолчанию
   clear_screen();
   }
//---------------------------------------------------------
void set_color(color foreground, color background)
   {
   SetConsoleTextAttribute( hConsole, 
                        (WORD)((background << 4) | foreground) );
   }  //конец setcolor()
 
/* 0  Черный          8  Темно-серый
   1  Темно-синий     9  Синий
   2  Темно-зеленый   10 Зеленый
   3  Темно-голубой   11 Алый
   4  Темно-красный   12 красный
   5  Темно-алый      13 алый
   6  Коричневый      14 Желтый
   7  Светло-серый    15 Белый
*/
//---------------------------------------------------------
void set_cursor_pos(int x, int y)
   {
   COORD cursor_pos;            //Начало в верхнем левом 
   cursor_pos.X = x - 1;        //Windows начинает с (0, 0)
   cursor_pos.Y = y - 1;        //мы начнем с (1, 1)
   SetConsoleCursorPosition(hConsole, cursor_pos);
   }
//---------------------------------------------------------
void clear_screen()
   {
   set_cursor_pos(1, 25);
   for(int j=0; j<25; j++)
      putch('\n');
   set_cursor_pos(1, 1);
   }
//---------------------------------------------------------
void wait(int milliseconds)
   {
   Sleep(milliseconds);
   }
//---------------------------------------------------------
void clear_line()                 //очистка до конца строки
   {                              //80 пробелов
   //.....1234567890123456789012345678901234567890
   //.....0........1.........2.........3.........4 
   cputs("                                        ");
   cputs("                                        ");
   }
//---------------------------------------------------------
void draw_rectangle(int left, int top, int right, int bottom) 
   {
   char temp[80];
   int width = right - left + 1;
 
   for(int j=0; j<width; j++)      //строка квадратов
      temp[j] = fill_char;   
   temp[j] = 0;                    //null
 
   for(int y=top; y<=bottom; y++)  //строковый стек 
      {
      set_cursor_pos(left, y);
      cputs(temp);
      }
   }
//---------------------------------------------------------
void draw_circle(int xC, int yC, int radius)
   {
   double theta, increment, xF, pi=3.14159;
   int x, xN, yN;
 
   increment = 0.8 / static_cast<double>(radius);
   for(theta=0;theta<=pi/2;theta+=increment)//1/4 
                                            //окружности
      {
      xF = radius * cos(theta);  
      xN = static_cast<int>(xF * 2 / 1); //пикселы не
                                         //квадратные :-(
      yN = static_cast<int>(radius * sin(theta) + 0.5);
      x = xC-xN;
      while(x <= xC+xN) //заполнить две горизонтальные линии
         {              //по одной на каждую ? окружности
         set_cursor_pos(x, yC-yN); putch(fill_char); //верх
         set_cursor_pos(x++,yC+yN); putch(fill_char); //низ
         }
      }  //конец for
   }
//---------------------------------------------------------
void draw_line(int x1, int y1, int x2, int y2)
   {
 
   int w, z, t, w1, w2, z1, z2;
   double xDelta=x1-x2, yDelta=y1-y2, slope;
   bool isMoreHoriz;
 
   if( fabs(xDelta) > fabs(yDelta) ) //еще горизонтальная
      {
      isMoreHoriz = true;
      slope = yDelta / xDelta;
      w1=x1; z1=y1; w2=x2, z2=y2;    //w=x, z=y 
      }
   else                              //еще вертикальная
      {
      isMoreHoriz = false;
      slope = xDelta / yDelta;
      w1=y1; z1=x1; w2=y2, z2=x2;    //w=y, z=x
      }
 
   if(w1 > w2)                       //если за w
      {
      t=w1; w1=w2; w2=t;             //   заменить (w1,z1)
      t=z1; z1=z2; z2=t;             //   на (w2,z2)
      }
   for(w=w1; w<=w2; w++)            
      {
      z = static_cast<int>(z1 + slope * (w-w1));
      if( !(w==80 && z==25) )  //убрать прокрутку на 80,25
         {
         if(isMoreHoriz)
            set_cursor_pos(w, z);
         else
            set_cursor_pos(z, w);
         putch(fill_char);
         }
      }
   }
//---------------------------------------------------------
void draw_pyramid(int x1, int y1, int height)
   {
   int x, y;
   for(y=y1; y<y1+height; y++)
      {
      int incr = y - y1;
      for(x=x1-incr; x<=x1+incr; x++)
         {
         set_cursor_pos(x, y);
         putch(fill_char);
         }
      }
   }
//---------------------------------------------------------
void set_fill_style(fstyle fs)
   {
   switch(fs)
      {
      case SOLID_FILL:  fill_char = '\xDB'; break;
      case DARK_FILL:   fill_char = '\xB0'; break;
      case MEDIUM_FILL: fill_char = '\xB1'; break;
      case LIGHT_FILL:  fill_char = '\xB2'; break;
      case X_FILL:      fill_char = 'X';    break;
      case O_FILL:      fill_char = 'O';    break;
      }
   }
//---------------------------------------------------------

Ошибки
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1>c:\myprojects\horse\horse\horse.cpp(54) : warning C4996: 'putch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _putch. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\conio.h(152): см. объявление 'putch'
1>c:\myprojects\horse\horse\horse.cpp(55) : warning C4996: 'putch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _putch. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\conio.h(152): см. объявление 'putch'
1>c:\myprojects\horse\horse\horse.cpp(56) : warning C4996: 'putch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _putch. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\conio.h(152): см. объявление 'putch'
1>c:\myprojects\horse\horse\horse.cpp(57) : warning C4996: 'putch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _putch. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\conio.h(152): см. объявление 'putch'
1>c:\myprojects\horse\horse\horse.cpp(111) : warning C4996: 'kbhit': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _kbhit. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\conio.h(147): см. объявление 'kbhit'
1>c:\myprojects\horse\horse\horse.cpp(118) : warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\conio.h(145): см. объявление 'getch'
1>Компоновка...
1>horse.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl set_color(enum color,enum color)" (?set_color@@YAXW4color@@0@Z) в функции "public: void __thiscall horse::display_horse(float)" (?display_horse@horse@@QAEXM@Z)
1>horse.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl set_cursor_pos(int,int)" (?set_cursor_pos@@YAXHH@Z) в функции "public: void __thiscall horse::display_horse(float)" (?display_horse@horse@@QAEXM@Z)
1>horse.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl init_graphics(void)" (?init_graphics@@YAXXZ) в функции "public: __thiscall track::track(float,int)" (??0track@@QAE@MH@Z)
1>horse.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl clear_screen(void)" (?clear_screen@@YAXXZ) в функции "public: void __thiscall track::display_track(void)" (?display_track@track@@QAEXXZ)
1>horse.obj : error LNK2019: ссылка на неразрешенный внешний символ "void __cdecl wait(int)" (?wait@@YAXH@Z) в функции "public: void __thiscall track::run(void)" (?run@track@@QAEXXZ)

Варинги, я понимаю, от conio.h, а как проблему с error LNK2019 подскажите решить.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.08.2009, 03:49
Ответы с готовыми решениями:

Упрощенный вариант корзины покупателя
Подскажите, кто знает, как сделать очень примитивный вариант корзины покупателя, чтобы при нажатии кнопки &quot;в корзину&quot; название...

Упрощенный вариант программы sort системы UNIX по Кернигану и Ритчи
Не понимаю почему не происходит сортировка. Вот код #include &lt;stdio.h&gt; #include &lt;string.h&gt; #define MAXLINES 5000 //max lines to...

Error LNK1120, error LNK2019, error LNK2028, queue
// свойство класса Parser queue&lt;elem*&gt;* postfix = new queue&lt;elem*&gt;; // строка, из-за которой происходит ошибка ...

20
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
21.09.2012, 22:04
Студворк — интернет-сервис помощи студентам
ну фиг знает что там у вас. могу предложить попробовать вот это:
https://www.cyberforum.ru/post3359659.html
там все по проще. есть функция позиционирования курсора и выставление цветов. круги и прочее самостоятельно придется писать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.09.2012, 22:04
Помогаю со студенческими работами здесь

Очистка консольной графики
Народ, подскажите, пожалуйста, какие есть функции для очистки графиков в консоле? P.S. system(&quot;cls&quot;) и clscr() не предлогать))

С++ библиотеки для консольной графики
Доброго времени суток. Какие в с++ есть библиотеки для создания консольной графики? Заранее спасибо.

Как создать "Упрощенный" вариант формы
Здравствуйте! У меня созрела необходимость создать, так называемый, &quot;Упрощенный&quot; вариант формы, как на скриншоте. Программа, в которой...

Существует ли библиотека для консольной графики в C++?
прочитал уже 3 книги по с++ (не визуал) и не нашёл ни слова о графике. в том же самом паскале есть модуль graph а здесь нету. Может есть...

Функция инициализации консольной графики от Лафоре
Доброго времени суток. Пытаюсь использовать( только обучения ради ) и изменить библиотеку консольной графики от Лафоре. Среди прочих...


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

Или воспользуйтесь поиском по форуму:
21
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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