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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
8bpp
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 13
#1

Класс Triangle ошибка - C++

08.06.2013, 19:57. Просмотров 357. Ответов 6
Метки нет (Все метки)

Помогите исправить ошибку класса:
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
#include "stdafx.h"
#include <iostream>
#include <cmath>
 
using namespace std;
 
class Triangle
{
 
public:
 
double a,b,c,al,bt,gm,pl,per;
    void Init();
    void Change();
    void Ob4();
    Triangle();
    Triangle(double _a,double _b,double _c) //конструктор
    {
        a=_a;
        b=_b;
        c=_c;
    }
    };  
 
class RightAngled: public Triangle 
{
public:
    RightAngled();
    void Ploshad();
};
 
void Triangle::Init()
{
    cout<<"стороны по умолчанию:"<<endl;
    cout<<"сторона а="<<a<<endl;
    cout<<"сторона b="<<b<<endl;
    cout<<"сторона c="<<c<<endl;
    cout<<"хотите изменить?(1-да, другое-нет)"<<endl;
}
 
void Triangle::Change()
{
    cout<<"введите стороны:"<<endl;
    cout<<"сторона а="; cin>>a; 
    cout<<"сторона b="; cin>>b; 
    cout<<"сторона c="; cin>>c;
    if(((a+b)<c)||((a+c)<b)||((c+b)<a))
    {
        cout<<"Ошибка, неправильно введены стороны"<<endl;
        Change();
    }
}
 
void Triangle::Ob4()
{
    al=acos((b*b+c*c-a*a)/(2*b*c))*180/3,14;
    bt=acos((a*a+c*c-b*b)/(2*a*c))*180/3,14;
    gm=acos((b*b+a*a-c*c)/(2*b*a))*180/3,14;
    per=a+b+c;
    cout<<"Вычисления углов:"<<endl;
    cout<<"alfa="<<al<<endl<<"beta="<<bt<<endl<<"gamma="<<gm<<endl<<"Периметр="<<per<<endl;
}
 
void RightAngled::Ploshad()
{
    cout<<"введите 2 катета прямоугольного треугольника"<<endl;
    cout<<"катет а="; cin>>a; 
    cout<<"катет b="; cin>>b; 
    c=sqrt(a*a+b*b);
    cout<<"гипотенуза c="<<c;
/*
    al=acos((b*b+c*c-a*a)/(2*b*c))*180/3,14;
    bt=acos((a*a+c*c-b*b)/(2*a*c))*180/3,14;
    gm=acos((b*b+a*a-c*c)/(2*b*a))*180/3,14;
    per=a+b+c;
    cout<<"Вычисления углов:"<<endl;
    cout<<"alfa="<<al<<endl<<"beta="<<bt<<endl<<"gamma="<<gm<<endl<<"Периметр="<<per<<endl;
    */
}
int main()
{
setlocale( LC_ALL, "Russian");
Triangle obj(3,4,5);
obj.Init();
int x;
cin>>x;
if (x==1) obj.Change();
system("Pause");
system("cls");
obj.Ob4();
system("Pause");
system("cls");
 
RightAngled obj1;
 
return 0;
}
Ошибки:
Кликните здесь для просмотра всего текста
1>------ Построение начато: проект: triangle, Конфигурация: Debug Win32 ------
1>Компиляция...
1>triangle.cpp
1>Компиляция манифеста в ресурсы...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.1.6723.1
1>Copyright (C) Microsoft Corporation. All rights reserved.
1>Компоновка...
1>triangle.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall RightAngled::RightAngled(void)" (??0RightAngled@@QAE@XZ) в функции _main
1>d:\projects_c++\Projects\triangle\Debug\triangle.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
1>Журнал построения был сохранен в "file://d:\projects_c++\Projects\triangle\triangle\Debug\BuildLog.htm"
1>triangle - ошибок 2, предупреждений 0
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Гром
205 / 124 / 11
Регистрация: 20.03.2009
Сообщений: 1,091
Записей в блоге: 16
Завершенные тесты: 1
08.06.2013, 20:14     Класс Triangle ошибка #2
Вы объявили конструктор RightAngled, но не реализовали его. Нужно написать реализацию:
C++
1
2
3
4
RightAngled::RightAngled():
 Triangle()
 {
 }
То же самое для самого Triangle - но тут можете просто к объявлению дописать "{}", указав, что у него пустое тело.
8bpp
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 13
08.06.2013, 20:26  [ТС]     Класс Triangle ошибка #3
можно подробнее про реализацию..
Гром
205 / 124 / 11
Регистрация: 20.03.2009
Сообщений: 1,091
Записей в блоге: 16
Завершенные тесты: 1
08.06.2013, 20:49     Класс Triangle ошибка #4
Если кратко - просто добавьте в код тот фрагмент, что я привел, и в строке
C++
1
Triangle();
напишите вместо этого
C++
1
Triangle() {}
(точка с запятой не нужна, поскольку функция, а именно конструктор, здесь же и определена - указано тело функции, пускай и пустое).

Если подробнее - то поскольку вы объявляете конструкторы по умолчанию, то вы должны их где-то реализовать - указать тела конструкторов (плюс опционально - списки инициализации). В вашем случае, поскольку ничего особенного делать в конструкторах не нужно, и их тела пустые, вы могли бы не объявлять конструкторы по умолчанию. В этой ситуации компилятор сам бы неявно реализовал бы их (в них будут вызваны конструкторы по умолчанию для всех переменных). Это же будет верно и для конструктора копирования, operator= и деструктора.
8bpp
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 13
08.06.2013, 21:01  [ТС]     Класс Triangle ошибка #5
Гром, ну теперь не понятно почему выскакивает следующая ошибка, вот код в целом:
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
#include "stdafx.h"
#include <iostream>
#include <cmath>
 
using namespace std;
 
class Triangle
{
 
public:
 
double a,b,c,al,bt,gm,pl,per;
    void Init();
    void Change();
    void Ob4();
    Triangle();
    Triangle(double _a,double _b,double _c) //конструктор
    {
        a=_a;
        b=_b;
        c=_c;
    }
    };  
 
class RightAngled: public Triangle 
{
public:
    RightAngled();
    void Ploshad();
};
RightAngled::RightAngled():
Triangle() {}
 
void Triangle::Init()
{
    cout<<"стороны по умолчанию:"<<endl;
    cout<<"сторона а="<<a<<endl;
    cout<<"сторона b="<<b<<endl;
    cout<<"сторона c="<<c<<endl;
    cout<<"хотите изменить?(1-да, другое-нет)"<<endl;
}
 
void Triangle::Change()
{
    cout<<"введите стороны:"<<endl;
    cout<<"сторона а="; cin>>a; 
    cout<<"сторона b="; cin>>b; 
    cout<<"сторона c="; cin>>c;
    if(((a+b)<c)||((a+c)<b)||((c+b)<a))
    {
        cout<<"Ошибка, неправильно введены стороны"<<endl;
        Change();
    }
}
 
void Triangle::Ob4()
{
    al=acos((b*b+c*c-a*a)/(2*b*c))*180/3,14;
    bt=acos((a*a+c*c-b*b)/(2*a*c))*180/3,14;
    gm=acos((b*b+a*a-c*c)/(2*b*a))*180/3,14;
    per=a+b+c;
    cout<<"Вычисления углов:"<<endl;
    cout<<"alfa="<<al<<endl<<"beta="<<bt<<endl<<"gamma="<<gm<<endl<<"Периметр="<<per<<endl;
}
 
void RightAngled::Ploshad()
{
    cout<<"введите 2 катета прямоугольного треугольника"<<endl;
    cout<<"катет а="; cin>>a; 
    cout<<"катет b="; cin>>b; 
    c=sqrt(a*a+b*b);
    cout<<"гипотенуза c="<<c;
/*
    al=acos((b*b+c*c-a*a)/(2*b*c))*180/3,14;
    bt=acos((a*a+c*c-b*b)/(2*a*c))*180/3,14;
    gm=acos((b*b+a*a-c*c)/(2*b*a))*180/3,14;
    per=a+b+c;
    cout<<"Вычисления углов:"<<endl;
    cout<<"alfa="<<al<<endl<<"beta="<<bt<<endl<<"gamma="<<gm<<endl<<"Периметр="<<per<<endl;
    */
}
int main()
{
setlocale( LC_ALL, "Russian");
Triangle obj(3,4,5);
obj.Init();
int x;
cin>>x;
if (x==1) obj.Change();
system("Pause");
system("cls");
obj.Ob4();
system("Pause");
system("cls");
 
RightAngled obj1;
 
return 0;
}
Ошибка 1, вот она:
Кликните здесь для просмотра всего текста

1>triangle.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Triangle::Triangle(void)" (??0Triangle@@QAE@XZ) в функции "public: __thiscall RightAngled::RightAngled(void)" (??0RightAngled@@QAE@XZ)
Гром
205 / 124 / 11
Регистрация: 20.03.2009
Сообщений: 1,091
Записей в блоге: 16
Завершенные тесты: 1
08.06.2013, 21:08     Класс Triangle ошибка #6
8bpp, как я уже писал
Цитата Сообщение от Гром Посмотреть сообщение
в строкеКод C++
C++
1
Triangle();
напишите вместо этогоКод C++
C++
1
Triangle() {}
Ошибка должна пропасть.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2013, 21:11     Класс Triangle ошибка
Еще ссылки по теме:

C++ Создать класс triangle
Создать класс triangle с полями-сторонами C++
C++ Создать класс Triangle, содержащий следующие члены класса
Класс Triangle ошибка C++
Класс Triangle C++

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

Или воспользуйтесь поиском по форуму:
8bpp
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 13
08.06.2013, 21:11  [ТС]     Класс Triangle ошибка #7
Все, разобрался, спасибо огромное
Yandex
Объявления
08.06.2013, 21:11     Класс Triangle ошибка
Ответ Создать тему
Опции темы

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