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

error LNK2019: unresolved external symbol "public: __thiscall Shape2D::Shape2D(void)" (??0Shape2D@@QAE@XZ) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 52, средняя оценка - 4.77
azaron
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 14
02.04.2011, 19:36     error LNK2019: unresolved external symbol "public: __thiscall Shape2D::Shape2D(void)" (??0Shape2D@@QAE@XZ) #1
Наследование.
Базовый класс:
C++
1
2
3
4
5
6
7
8
9
class Shape2D  
{   
public:
    Shape2D();
    virtual ~ Shape2D();
    virtual float Area( )= 0;
    virtual float Perimeter() = 0;
    virtual void PrintMessage();
};
Shape2D() – конструктор Базового класса.
~ Shape2D() – деструктор базового класса.
Area() – возвращает значение площади фигуры.
Perimeter() – возвращает значение периметру фигуры.
PrintMessage() – выводит сообщение о типе фигуры.

Производные классы Triangle и Rectangle
Определить необходимые для производных классов параметры и переопределить необходимые функции.

мой код:
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
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
class Shape2D  
{   
public:
    Shape2D();
    virtual ~ Shape2D();
    virtual float Area() const = 0;
    virtual float Perimeter() const = 0;
    virtual void PrintMessage();
};
 
 
class Triangle: public Shape2D
{
private:
    float _a, _b, _c;
public:
    Triangle(float a = 3, float b=4, float c=5): _a(a), _b(b), _c(c) { }
 
    virtual float Area( ) const 
    {
        float p=(_a+_b+_c)/2;
        float s=(p(p-_a)(p-_b)(p-_c));
        return p; 
    }
    virtual float Perimeter() const
    {
        return _a+_b+_c;
    }
    virtual void PrintMassage() 
    {
        cout<<"Triangle\n"<<"Area:\n" ;
    }
};
 
class Rectangle: public Shape2D
{
private:
    float _d, _sh;
public:
    Rectangle(float d = 4, float sh = 5): _d(d), _sh(sh) { }
 
    virtual float Area() const
    { 
        return _d*_sh; 
    }
 
    virtual float Perimeter() const
    {
        return 2*(_d+_sh);
    }
 virtual void PrintMassage() 
    {
        cout<<"Rectangle\n" ;
    }
};
 
int main()
{
    Shape2D *shapes[2];
 
    shapes[0] = new Rectangle (2,9);
    shapes[1] = new Triangle (5,9,6);
    
    for (int i = 0; i < 2; ++i)
    {
        cout << shapes[i]->Perimeter()<<endl;
        cout << shapes[i]->Area() <<endl;
    }
    for (int i = 0; i < 2; ++i)
        delete shapes[i];
    getch();
    return 0;
}
но при компилации видаєт:
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall Shape2D::Shape2D(void)" (??0Shape2D@@QAE@XZ) referenced in function "public: __thiscall Triangle::Triangle(float,float,float)" (??0Triangle@@QAE@MMM@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual void __thiscall Shape2D::PrintMessage(void)" (?PrintMessage@Shape2D@@UAEXXZ)
1>main.obj : error LNK2019: unresolved external symbol "public: virtual __thiscall Shape2D::~Shape2D(void)" (??1Shape2D@@UAE@XZ) referenced in function "public: virtual __thiscall Triangle::~Triangle(void)" (??1Triangle@@UAE@XZ)


что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
02.04.2011, 19:43     error LNK2019: unresolved external symbol "public: __thiscall Shape2D::Shape2D(void)" (??0Shape2D@@QAE@XZ) #2
Второй раз на дню
конструктор объявлен но не описан

тоже и деструктором и с другой функцией (они не абстрактны)
опиши реализацию
azaron
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 14
02.04.2011, 19:47  [ТС]     error LNK2019: unresolved external symbol "public: __thiscall Shape2D::Shape2D(void)" (??0Shape2D@@QAE@XZ) #3
так просто дело в том, что я не понимаю как? для меня ето что то новое, из-за этого прошу помощи!
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,051
02.04.2011, 20:29     error LNK2019: unresolved external symbol "public: __thiscall Shape2D::Shape2D(void)" (??0Shape2D@@QAE@XZ) #4
как бы это сказать по проще
примеры из твоего листинга
у функции есть объявление
Цитата Сообщение от azaron Посмотреть сообщение
virtual void PrintMessage();
где говорится какая функция какие входные/выходные параметры
кода как такового нет как и что будет делать функция неизвестно
Для этого есть реализация
как сделано у тебя в производных классах
Цитата Сообщение от azaron Посмотреть сообщение
virtual void PrintMassage()
{
cout<<"Triangle\n"<<"Area:\n" ;
}
в базовом классе нет ни одной реализации
по этому компилятор (линкер) говорит что он не нашел этих функций

А что такое виртуальные функции, абстрактные классы Ты знаешь
Yandex
Объявления
02.04.2011, 20:29     error LNK2019: unresolved external symbol "public: __thiscall Shape2D::Shape2D(void)" (??0Shape2D@@QAE@XZ)
Ответ Создать тему
Опции темы

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