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

Сборка проекта в Borland Turbo C++ 3.0 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
larev01
0 / 0 / 0
Регистрация: 11.07.2010
Сообщений: 39
09.07.2011, 11:30     Сборка проекта в Borland Turbo C++ 3.0 #1
Здравствуйте. Помогите пожалуйста разобраться в чем проблема. Создаю в turbo c++ (надо обязательно в нём из-за поганой консольной графики, будь она не ладна) проект и закидываю в него следующие файлы:

"shapes.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
#ifndef __SHAPES_H
#define __SHAPES_H
 
#include <graphics.h>
 
class Shape {
        short x;
        short y;
    public:
        Shape(short, short);
        void setX(short);
        void setY(short);
        short getX() const;
        short getY() const;
        short isMovable(short, short);
        virtual void move(short, short) = 0;
        virtual void draw() const = 0;
};
 
class Circle : public Shape {
        short radius;
    public:
        Circle(short _x, short _y, short _r);
        void setRadius(short);
        short getRadius() const;
        void draw() const;
        void move(short, short);
};
 
#endif
"shapes.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
#include <graphics.h>
#include "shapes.h"
 
Shape::Shape(short set_x, short set_y) : x(set_x), y(set_y) {}
 
void Shape::setX(short set_x) { x = set_x; }
void Shape::setY(short set_y) { y = set_y; }
short Shape::getX() const { return x; }
short Shape::getY() const { return y; }
 
short Shape::isMovable(short check_x, short check_y)
{
    if(check_x>=640 || check_x<0)
        return 0;
    else if(check_y>=480 || check_y<0)
        return 0;
 
    return 1;
}
 
 
Circle::Circle(short set_x, short set_y, short set_radius) :
        Shape(set_x, set_y), radius(set_radius) {}
 
void Circle::setRadius(short set_radius) { radius = set_radius; }
short Circle::getRadius() const { return radius; }
 
void Circle::draw() const { circle(getX(), getY(), radius); }
 
void Circle::move(short delta_x, short delta_y)
{
    if(!isMovable(getX()+delta_x, getY()+delta_y))
        return;
    setX(getX()+delta_x);
    setY(getY()+delta_y);
    cleardevice();
    draw();
}
"main.cpp"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "shapes.h"
#include <conio.h>
 
int main()
{
    int driver, mode;
    driver = DETECT;
    Circle object(320, 240, 10);
 
    initgraph(&driver, &mode, "");
    object.draw();
    getch();
    closegraph();
 
    return 0;
}
Пытаюсь собрать проект - линковщик кричит и ругается. По-отдельности файлы компилируются нормально. Если методы класса определяю не в shapes.cpp, а в shapes.h, то все хорошо. Где ошибка, как бороться? Подскажите пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2011, 11:30     Сборка проекта в Borland Turbo C++ 3.0
Посмотрите здесь:

Классы в Turbo C/Borland C C++
C++ Бегущая строка Borland Turbo C++
C++ Помогите найти Borland Turbo C + Debugger
C++ создание многофайлового проекта в Borland 5.02
C++ Сборка проекта Microsip
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
09.07.2011, 12:21     Сборка проекта в Borland Turbo C++ 3.0 #2
Я так предполагаю - файл Shapes.cpp просто не включен в проект. Потому его содержимое не компилируется и не линкуется.
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
09.07.2011, 12:30     Сборка проекта в Borland Turbo C++ 3.0 #3
ошибки хотя бы покажи.
В целом по коду:
1) grafics будет дважды включён в shapes.cpp. В .h файле вроде как он вобще не нужен, по крайней мере я не вижу где он в нём используется.
2) если у тебя есть виртуальные методы, то неплохо бы и деструктор иметь виртуальный. По умолчанию генерится невиртуальный, если только ты не наследуешься от класса в котором он виртуальный
3) дело твоё конечно, но я бы на твоём месте структуру point завёл
4) сдаётся мне, что isMovable bool должна возвращать
рекомендую перенести свой прожект в vs 2008 и накатать всё на win32api, делов то на пять минут, тебе только WM_PAINT надо обрабатывать и никаких зато проблем с компилером

Добавлено через 4 минуты
если исключить graphics то у меня всё откомпилировалось в gcc-g++, так что это твой борланд понтуется
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
09.07.2011, 12:42     Сборка проекта в Borland Turbo C++ 3.0 #4
pito211,
Цитата Сообщение от pito211 Посмотреть сообщение
1) grafics будет дважды включён в shapes.cpp. В .h файле вроде как он вобще не нужен, по крайней мере я не вижу где он в нём используется
не будет, это стандартная приблуда
Borland Turbo C++ 3.0
pito211
 Аватар для pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
09.07.2011, 12:46     Сборка проекта в Borland Turbo C++ 3.0 #5
ну может и не будет, суть в том что не надо пихать что попало без явной необходимости
larev01
0 / 0 / 0
Регистрация: 11.07.2010
Сообщений: 39
09.07.2011, 13:14  [ТС]     Сборка проекта в Borland Turbo C++ 3.0 #6
Цитата Сообщение от Roof Посмотреть сообщение
Я так предполагаю - файл Shapes.cpp просто не включен в проект. Потому его содержимое не компилируется и не линкуется.
Включен. Объектный файл создается. А вот линковщик плеваться начинает.

Цитата Сообщение от pito211 Посмотреть сообщение
ошибки хотя бы покажи.
Linker error: Undefined symbol Circle::draw() const in module main.cpp
Linker error: Undefined symbol Circle::Circle(short, short, short) in module main.cpp

Если конструктор включаю в заголовочный файл, то:
Linker error: Undefined symbol Circle::draw() const in module main.cpp
Linker error: Undefined symbol Circle::move(short, short) in module main.cpp

Цитата Сообщение от pito211 Посмотреть сообщение
1) grafics будет дважды включён в shapes.cpp. В .h файле вроде как он вобще не нужен, по крайней мере я не вижу где он в нём используется.
Не будет, #ifndef'ом поймается. Хотя действительно он не нужен (остался висеть с тех пор, как класс со всеми методами был определен в заголовочном файле).

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

Цитата Сообщение от pito211 Посмотреть сообщение
3) дело твоё конечно, но я бы на твоём месте структуру point завёл
Какой в ней смысл?

Цитата Сообщение от pito211 Посмотреть сообщение
4) сдаётся мне, что isMovable bool должна возвращать
Так и есть. Тока борландовский турбос, как оказалось, понятия не имеет о типе bool.

Цитата Сообщение от pito211 Посмотреть сообщение
рекомендую перенести свой прожект в vs 2008 и накатать всё на win32api, делов то на пять минут, тебе только WM_PAINT надо обрабатывать и никаких зато проблем с компилером
Мне проще в заголовочный файл определения методов вернуть (делов секунды на 3-4 ), но хочется разобраться с той ситуацией, которая сложилась.

Цитата Сообщение от pito211 Посмотреть сообщение
если исключить graphics то у меня всё откомпилировалось в gcc-g++, так что это твой борланд понтуется
В том-то и дело. Ошибок не вижу. Не понимаю че ему надо.
grizlik78
Эксперт С++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,960
09.07.2011, 14:54     Сборка проекта в Borland Turbo C++ 3.0 #7
larev01, shapes.h тоже чтоль в проект добавлен? Убери.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2011, 15:05     Сборка проекта в Borland Turbo C++ 3.0
Еще ссылки по теме:

Сборка проекта C++
Сборка POCO проекта C++
Borland Turbo C++ не видит библиотеки C++

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

Или воспользуйтесь поиском по форуму:
larev01
0 / 0 / 0
Регистрация: 11.07.2010
Сообщений: 39
09.07.2011, 15:05  [ТС]     Сборка проекта в Borland Turbo C++ 3.0 #8
Цитата Сообщение от grizlik78 Посмотреть сообщение
larev01, shapes.h тоже чтоль в проект добавлен? Убери.
Блин, а ведь всё так просто... grizlik78, спасибо огромное! Теперь работает!
Yandex
Объявления
09.07.2011, 15:05     Сборка проекта в Borland Turbo C++ 3.0
Ответ Создать тему
Опции темы

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