Форум программистов, компьютерный форум CyberForum.ru

ошибка компиляции в Borland C++ 3.1 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.61
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
23.02.2010, 12:28     ошибка компиляции в Borland C++ 3.1 #1
Есть задание, сделать что то на подобии оконной библиотеки иль тип того...в общем класс по работе с окнами в консоли (можно создавать произвольные окна, закрывать их и т.п.). Делаем это пока в Borland C++ 3.1, т.к. там проще всего выводить графику в консоли (через реальный режим процессора мона напрямую одресовать видеопамять и выводить псевдографику).
Собственно вот недоделаный код
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream.h>
#include "test.h"
 
int main( void )
{
    win_lib w1( 10, 10, 20, 20, 0x10, 0x17 );
    win_lib w2( 11, 12, 18, 17, 0xA7, 0x16 );
    
    w1.open();
    system( "pause" );
    w2.open();
    system( "pause" );
    w2.close();
    system( "pause" );
    w1.close();
 
    system( "pause" );
    return 0;
}
test.h (пока самое основное, недоделано енто все еще, потому и test)
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
#include <stdlib.h>
 
class win_lib
{
public:
    win_lib( int sx, int sy, int ex, int ey, int bc, int fc)
    {
        vid_mem  = ( char* )0xB8000000L;
 
        buffer = ( char* ) malloc( ( ex - sx + 1 ) * ( ey - sy ) * 2 );
 
        startx = sx;
        endx = ex;
        starty = sy;
        endy = ey;
        bcolor = bc;
        fcolor = fc;
    }
    
    open( void )
    {
        char *v;
        int k = 0;
    
        for( int i = startx; i <= endx; i++ )
        {
            for( int j = starty; j <= endy; j++ )
            {
                v = vid_mem + ( i * 160 ) + ( j * 2 );
                buffer[ k ] = *v;
                v++;
                k++;
                buffer[ k ] = *v;
                k++;
            }
        }
    
        //clear();
    
        return 0;
    }
    
    close( void )
    {
        char *v;
        int k = 0;
    
        for( int i = startx; i <= endx; i++ )
        {
            for( int j = starty; j <= endy; j++ )
            {
                v = vid_mem + ( i * 160 ) + ( j * 2 );
                *v = buffer[ k ];
                v++;
                k++;
                *v = buffer[ k ];
                k++;
            }
        }
 
        return 0;
    }
 
private:
    //int writechar( void );
    //int clear( void );
 
    char *vid_mem;
    int startx, starty, endx, endy;
    int bcolor, fcolor;
    char *name;
    char *buffer;
};
Собственно проблема в том, что:
1) на 25 строке файла test.h, "for( int i = startx; i <= endx; i++ )". Происходит следующее:
warning test.h 25:Functions containing for are not expanded inline
Тоже самое на строчке 48 того же файла.
2) на 3 строчке файла test.h, "class win_lib". При компиляции происходит следующее:
error test.h: declaration syntax error

Собственно я понимаю об чём мне пытается сказать компилятор, но ошибок я не вижу в этих строчках...помогите, мож я уже просто отупел, столько время за компом провёл....

Заранее всем благодарен...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2010, 12:28     ошибка компиляции в Borland C++ 3.1
Посмотрите здесь:

C++ Вопрос по компиляции в Borland C++ 3.1
ошибка компиляции C++
C++ Ошибка компиляции
Ошибка компиляции C++
ошибка компиляции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,307
23.02.2010, 12:59     ошибка компиляции в Borland C++ 3.1 #2
Borland C++ 3.1 - это ну ооооочень древнючий, антикварный такой компилятор.....
Попробуй так:
C++
1
2
int i;
for( i = startx; i <= endx; i++ )
Ну и так далее.... К сожалению, Стандарт языка тут не поможет - BC++ 3.1 ему не следует.....
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
23.02.2010, 13:31  [ТС]     ошибка компиляции в Borland C++ 3.1 #3
2CheshireCat:
изменение вида оформления цикла for не помогло. да и инициализация и объявление в этом цикле приемлемы, уже проверял, т.е. конструкция:
for( int i = 0; i < 100; i++ )
рабочая...есть ещё идеи?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.02.2010, 07:59     ошибка компиляции в Borland C++ 3.1 #4
return 0 есть, а функция по-сишному написана
int open(void)
перевод строки после описания класса
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
24.02.2010, 17:58  [ТС]     ошибка компиляции в Borland C++ 3.1 #5
2accept:
переписал более внятно, но эффекту это не изменило.
"перевод строки после описания класса" - я этого не понял.

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
#include <stdlib.h>
 
class win_lib
{
public:
    win_lib( int sx, int sy, int ex, int ey, int bc, int fc)
    {
        vid_mem  = ( char* )0xB8000000L;
 
        buffer = ( char* ) malloc( ( ex - sx + 1 ) * ( ey - sy ) * 2 );
 
        startx = sx;
        endx = ex;
        starty = sy;
        endy = ey;
        bcolor = bc;
        fcolor = fc;
    }
    
    void open( void )
    {
        char *v;
        int k = 0;
    
        int i, j;
        for( i = startx; i <= endx; i++ )
        {
            for( j = starty; j <= endy; j++ )
            {
                v = vid_mem + ( i * 160 ) + ( j * 2 );
                buffer[ k ] = *v;
                v++;
                k++;
                buffer[ k ] = *v;
                k++;
            }
        }
    
        //clear();
    }
    
    void close( void )
    {
        char *v;
        int k = 0;
    
        int i, j;
        for( i = startx; i <= endx; i++ )
        {
            for( j = starty; j <= endy; j++ )
            {
                v = vid_mem + ( i * 160 ) + ( j * 2 );
                *v = buffer[ k ];
                v++;
                k++;
                *v = buffer[ k ];
                k++;
            }
        }
    }
 
private:
    //int writechar( void );
    //int clear( void );
 
    int startx, starty, endx, endy;
    int bcolor, fcolor;
    char *vid_mem;
    char *name;
    char *buffer;
};
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.02.2010, 07:50     ошибка компиляции в Borland C++ 3.1 #6
надо определения функций вынести в cpp файл
конструктор оставить
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
25.02.2010, 10:12  [ТС]     ошибка компиляции в Borland C++ 3.1 #7
ну вот, переделал:
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream.h>
#include "win.h"
 
int main( void )
{
    win_lib w1( 10, 10, 20, 20, 0x10, 0x17 );
    win_lib w2( 11, 12, 18, 17, 0xA7, 0x16 );
    
    w1.open();
    system( "pause" );
    w2.open();
    system( "pause" );
    w2.close();
    system( "pause" );
    w1.close();
 
    system( "pause" );
    return 0;
}
win.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
#include <stdlib.h>
 
class win_lib
{
public:
    win_lib( int sx, int sy, int ex, int ey, int br, int fr)
    {
        vid_mem  = ( char* )0xB8000000L;
 
        buffer = ( char* ) malloc( ( ex - sx + 1 ) * ( ey-sy ) * 2 );
    
        startx = sx;
        endx = ex;
        starty = sy;
        endy = ey;
        bcolor = br;
        fcolor = fr;
    }
    
    void open( void );
    void close( void );
 
private:
    //int writechar( void );
    //int clear( void );
 
    char *vid_mem;
    int startx, starty, endx, endy;
    int bcolor, fcolor;
    char *name;
    char *buffer;
};
win.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
#include "win.h"
 
void win_lib::open( void )
{
    char *v;
    int k = 0;
    
    for( int i = win_lib::startx; i <= win_lib::endx; i++ )
    {
        for( int j = win_lib::starty; j <= win_lib::endy; j++ )
        {
            v = win_lib::vid_mem + ( i * 160 ) + ( j * 2 );
            win_lib::buffer[ k ] = *v;
            v++;
            k++;
            win_lib::buffer[ k ] = *v;
            k++;
        }
    }
    
    //clear();
}
void win_lib::close( void )
{
    char *v;
    int k = 0;
    
    for( int i = win_lib::startx; i <= win_lib::endx; i++ )
    {
        for( int j = win_lib::starty; j <= win_lib::endy; j++ )
        {
            v = win_lib::vid_mem + ( i * 160 ) + ( j * 2 );
            *v = win_lib::buffer[ k ];
            v++;
            k++;
            *v = win_lib::buffer[ k ];
            k++;
        }
    }
}
Собственно предыдущие ошибки теперь не в моде (хотя я так и не понял что изменилось от того что мы все функции вынесли в другой класс, а конструктор оставили...ну не суть), у нас теперь ошибка линковки:
Linker Error: win_lib::close() defined in module WIN.CPP is duplicated in module WIN.CPP
Linker Error: win_lib::open() defined in module WIN.CPP is duplicated in module WIN.CPP
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.02.2010, 10:53     ошибка компиляции в Borland C++ 3.1 #8
два раза win.h включается
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
25.02.2010, 12:12  [ТС]     ошибка компиляции в Borland C++ 3.1 #9
2accept:
я не совсем уж чайник, но я что #pragma once, что конструкцию:
#ifndef _WIN_H_
#define _WIN_H_
...
#endif
в хэдере применял...один фиг. Как ещё можно это обойти?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.02.2010, 03:07     ошибка компиляции в Borland C++ 3.1 #10
у меня запустилось
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
26.02.2010, 07:36  [ТС]     ошибка компиляции в Borland C++ 3.1 #11
2accept:
ты просто скопировал моё и скомпилил или что то подправил\изменил?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.02.2010, 08:12     ошибка компиляции в Borland C++ 3.1 #12
самое первое ещё
это подключил в main.cpp test.h
ниже main определил функции (переменные класса внутри функций не проводил)

а это просто скопировал, сделал проект
заголовок win.h оставил подключённым в обоих файлах
скомпилировал, запустил
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
26.02.2010, 09:25  [ТС]     ошибка компиляции в Borland C++ 3.1 #13
кароче, ничё у мня не получилось с Borland 3.1, не знаю чё там за лажа, но повторюсь, код компилируемый, т.е. чёт, скорее всего, с настройками компилятора не так.

В общем вышел я из положения, собрав проект на Open Watcom. Там в настройках можно выбирать под какую ось компилировать проект, выбрал dos16 и всё запустилось без проблем. В общем думаю данную тему можно закрыть.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.02.2010, 09:44     ошибка компиляции в Borland C++ 3.1 #14
ну, его надо настроить, сделать save
G-Cat
16 / 16 / 1
Регистрация: 15.03.2009
Сообщений: 94
26.02.2010, 19:32  [ТС]     ошибка компиляции в Borland C++ 3.1 #15
2 accept:
у тебя какие то обобщённые изречения...нельзя ли поконкретней что именно и как настроить и save чего\кого сделать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2010, 01:27     ошибка компиляции в Borland C++ 3.1
Еще ссылки по теме:

Ошибка компиляции C++
Ошибка компиляции C++
C++ Ошибка в компиляции

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.02.2010, 01:27     ошибка компиляции в Borland C++ 3.1 #16
bcc3.1
там внутри настройки есть
Yandex
Объявления
27.02.2010, 01:27     ошибка компиляции в Borland C++ 3.1
Ответ Создать тему
Опции темы

Текущее время: 09:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru