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

Объявление класса Point - C++

Восстановить пароль Регистрация
 
 
zero-11
 Аватар для zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
05.04.2014, 16:40     Объявление класса Point #1
Объявил класс Point в заголовочном класса для хранения значений координат x,y а далее класс Rectanagle
и вот в классе Rectanagle каждая точка определяет координаты на плоскости линий и используется для создания объекта Rectanagle но при объявлении в нем переменной тип int - требует точку с запятой:

C++
1
2
3
4
5
6
7
8
9
10
11
12
 class Rectangle
{
public:
    Rectangle (int top, int left, int Bottom, int right);
    ~Rectangle ()
    
 
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
Код
В строке int GetTop()  const { return itsTop; }
Здесь сразу встроены функции а их реализация в файле Ractanagle.cpp

Код на C++

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
#include <iostream>
class Point
{
public:
    void setX( int x) { itsX = x; }
    void setY( int y) { itsY = y; }
    int GetX() const { return itsX; }
    int GetY() const { return itsY; }
private:
    int itsX;
    int itsY;
};
 
class Rectangle
{
public:
    Rectangle (int top, int left, int Bottom, int right);
    ~Rectangle ()
    
 
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location) 
           { itsLowerLeft = Location; }
    void SetUpperRight( Point = Location)
           { itsUpperRight = Location; } 
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsbottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea const;
 
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,158
Завершенные тесты: 1
05.04.2014, 17:09     Объявление класса Point #2
C++
1
2
~Rectangle ()
       { } // код деструктора
zero-11
 Аватар для zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
05.04.2014, 17:58  [ТС]     Объявление класса Point #3
А что не так с деструктором-? Конструктор принимает четыре параметра а деструктор по умолчанию и что за код-?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
05.04.2014, 18:13     Объявление класса Point #4
zero-11, после объявления деструктора пропущена точка с запятой либо тело.
zero-11
 Аватар для zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 11:42  [ТС]     Объявление класса Point #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
 #include <iostream>
class Point
{
public:
    void setX( int x) { itsX = x; }
    void setY( int y) { itsY = y; }
    int GetX() const { return itsX; }
    int GetY() const { return itsY; }
private:
    int itsX;
    int itsY;
};
 
class Rectangle
{
public:
    Rectangle (int top, int left, int Bottom, int right);
    ~Rectangle ()
    
 
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location) 
           { itsLowerLeft = Location; }
    void SetUpperRight( Point = Location)
           { itsUpperRight = Location; } 
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsbottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea const;
 
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
Может я чего то не заметил или класс можно объявить иначе:

C++
1
2
3
4
5
6
7
8
9
10
public:
    Rectangle (int top, int left, int Bottom, int right);
    ~Rectangle ()
    
 
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
заранее спасибо.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
07.04.2014, 12:04     Объявление класса Point #6
Как еще показать...

Цитата Сообщение от zero-11 Посмотреть сообщение
C++
1
2
3
public:
* * Rectangle (int top, int left, int Bottom, int right);
* * ~Rectangle () {} // < вот тут нужна либо точка с запятой, либо тело
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.04.2014, 12:06     Объявление класса Point #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Добавить точку с запятой:
C++
18
    ~Rectangle ();
Убрать равно:
C++
36
    void SetUpperRight( Point = Location)
Добавть круглые скобки:
C++
46
    int GetArea() const;
Исправить опечатку в имени переменной:
C++
43
    void SetBottom(int bottom)          { itsbottom = bottom;}

Весь
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
 #include <iostream>
class Point
{
public:
    void setX( int x) { itsX = x; }
    void setY( int y) { itsY = y; }
    int GetX() const { return itsX; }
    int GetY() const { return itsY; }
private:
    int itsX;
    int itsY;
};
 
class Rectangle
{
public:
    Rectangle( int top, int left, int Bottom, int right );
      /*{
        itsTop    = top;
        itsLeft   = left;
        itsBottom = Bottom;
        itsRight  = right;
      }*/
    ~Rectangle ();
      /*{
        top    = 0;
        left   = 0;
        Bottom = 0;
        right  = 0;
      };*/
 
 
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location)
           { itsLowerLeft = Location; }
    void SetUpperRight( Point Location)
           { itsUpperRight = Location; }
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsBottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea() const;
 
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
zero-11
 Аватар для zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 14:17  [ТС]     Объявление класса Point #8
Все понятно - разобрался. Спасибо.

Добавлено через 1 час 4 минуты
Только еще одна проблема - подключил файл заголовка, к самому исходному коду Rectangle.cpp но не хочет компилировать.

Rectangle.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
// Rectangle.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include "Rectangle.h"
 
Rectangle::Rectangle(int top, int left, int bottom, int right)
{
    itsTop = top;
    itsLeft = left;
    itsBottom = bottom;
    itsRight = right;
 
    itsUpperLeft.setX(left);
    itsUpperLeft.setY(top);
 
    itsUpperRight.setX(right);
    itsUpperRight.setY(top);
 
    itsLowerLeft.setX(left);
    itsLowerLeft.setY(bottom);
 
    itsLowerRight.setX(right);
    itsLowerRight.setY(bottom);
}
 
int Rectangle::GetArea() const
{
    int Width = itsRight - itsLeft;
    int Height = itsTop - itsBottom;
    return ( Width * Height );
}
 
int main()
{
    Rectangle MyRectangle(100, 20, 50, 80 );
 
    int Area = MyRectangle.GetArea();
 
    std::cout << "Area: " << Area << endl;
    std::cout << "Upper Left X Coordinate: ";
    std::cout << MyRectangle.GetUpperLeft().GetX();
    system("PAUSE");
}
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.04.2014, 14:19     Объявление класса Point #9
Цитата Сообщение от zero-11 Посмотреть сообщение
но не хочет компилировать
Накричите на него Какие-нибудь сообщения об ошибках выдает?
zero-11
 Аватар для zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 14:30  [ТС]     Объявление класса Point #10
Да, выдает:

1>------ Построение начато: проект: Rectangle, Конфигурация: Debug Win32 ------
1> Rectangle.cpp
C++
1
2
3
1>Rectangle.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Rectangle::~Rectangle(void)" (??1Rectangle@@QAE@XZ) в функции _main
1>C:\Users\Игорь\Documents\Visual Studio 2010\Projects\Rectangle\Debug\Rectangle.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.04.2014, 14:40     Объявление класса Point #11
zero-11, ну а где тела конструктора и деструктора? Раскомментируйте их в коде, который я писал чуть выше (и точки с запятой удалите после каждого).

Добавлено через 666 секунд
Хотя к черту. Вот:
код
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
class Rectangle
{
public:
    Rectangle( int top, int left, int Bottom, int right )
      {
        itsTop    = top;
        itsLeft   = left;
        itsBottom = Bottom;
        itsRight  = right;
      }
    ~Rectangle ()
      {
        itsTop    = 0;
        itsLeft   = 0;
        itsBottom = 0;
        itsRight  = 0;
      };
 
 
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location)
           { itsLowerLeft = Location; }
    void SetUpperRight( Point Location)
           { itsUpperRight = Location; }
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsBottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea() const;
 
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
zero-11
 Аватар для zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 14:43  [ТС]     Объявление класса Point #12
Но функция GetX - функция доступа к переменной x - int GetX - определена и поэтому он не должен ссылаться на невозможность получить доступ к классу Point - функция доступа int GetX() имеет встроенное определение int GetX() const { return itsX } и является функцией доступа класса Point.

Или же дело в деструкторе:

Код
1>Rectangle.obj : error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Rectangle::~Rectangle(void)" (??1Rectangle@@QAE@XZ) в функции _main
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.04.2014, 14:50     Объявление класса Point #13
Продолжая отвлеченный разговор, можно наблюдать интересный факт, как студия наглядно обзывает функции:
Код
??1Rectangle@@QAE@XZ
zero-11
 Аватар для zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 14:52  [ТС]     Объявление класса Point #14
Все равно:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Rectangle
{
public:
    Rectangle( int top, int left, int Bottom, int right );
      {
        itsTop    = top;
        itsLeft   = left;
        itsBottom = Bottom;
        itsRight  = right;
      }
    ~Rectangle ();
     {
        top    = 0;
        left   = 0;
        Bottom = 0;
        right  = 0;
      };
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
Код на С++

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
#include <iostream>
using namespace std;
class Point
{
public:
    void setX( int x) { itsX = x; }
    void setY( int y) { itsY = y; }
    int GetX() const { return itsX; }
    int GetY() const { return itsY; }
private:
    int itsX;
    int itsY;
};
 
class Rectangle
{
public:
    Rectangle( int top, int left, int Bottom, int right );
      {
        itsTop    = top;
        itsLeft   = left;
        itsBottom = Bottom;
        itsRight  = right;
      }
    ~Rectangle ();
     {
        top    = 0;
        left   = 0;
        Bottom = 0;
        right  = 0;
      };
    
    int GetTop()  const { return itsTop; }
    int GetLeft() const { return itsLeft; }
    int GetBottom() const { return itsBottom; }
    int GetRight() const { return itsRight; }
 
    Point GetUpperLeft () const { return itsUpperLeft; }
    Point GetLowerleft () const { return itsLowerLeft; }
    Point GetUpperRight () const { return itsUpperRight; }
    Point GetLowerRight () const { return itsLowerRight; }
 
    void SetUpperLeft(Point Location)
           { itsUpperLeft = Location; }
    void SetLowerleft (Point Location) 
           { itsLowerLeft = Location; }
    void SetUpperRight( Point  Location)
           { itsUpperRight = Location; } 
    void SetLowerRigh(Point Location)
           { itsLowerRight = Location; }
 
 
    void SetTop (int top)               { itsTop = top; }
    void Setleft (int left)             { itsLeft = left; }
    void SetBottom(int bottom)          { itsBottom = bottom;}
    void SetRight(int right)            { itsRight = right; }
 
    int GetArea() const;
    
private:
    Point itsUpperLeft;
    Point itsUpperRight;
    Point itsLowerLeft;
    Point itsLowerRight;
    int itsTop;
    int itsLeft;
    int itsBottom;
    int itsRight;
};
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.04.2014, 14:57     Объявление класса Point #15
Цитата Сообщение от zero-11 Посмотреть сообщение
Все равно
Нет. Мне не все равно. Или скопируйте полностью мой код или прислушайтесь к замечанию в скобочках:
в четвертой и в одиннадцатой строке уберите точку с запятой.
zero-11
 Аватар для zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 15:14  [ТС]     Объявление класса Point #16
Убрал:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Rectangle
{
public:
    Rectangle( int top, int left, int Bottom, int right )
      {
        itsTop    = top;
        itsLeft   = left;
        itsBottom = Bottom;
        itsRight  = right;
      }
    ~Rectangle ()
     {
        top    = 0;
        left   = 0;
        Bottom = 0;
        right  = 0;
      };
не определены:

C++
1
2
3
4
5
6
 {
        top    = 0;
        left   = 0;
        Bottom = 0;
        right  = 0;
      };
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
07.04.2014, 15:18     Объявление класса Point #17
zero-11, в классе и нет таких полей. В вашем случае у полей префикс - its.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.04.2014, 15:23     Объявление класса Point #18

Не по теме:

Хотел найти картинку с буддой, но не нашел.



zero-11, перепишите деструктор вот так:
C++
1
2
3
4
5
6
7
    ~Rectangle ()
     {
        itsTop    = 0;
        itsLeft   = 0;
        itsBottom = 0;
        itsRight  = 0;
      };
zero-11
 Аватар для zero-11
0 / 0 / 0
Регистрация: 21.03.2014
Сообщений: 56
07.04.2014, 15:26  [ТС]     Объявление класса Point #19
Уже пробовал - ни в какую!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2014, 15:28     Объявление класса Point
Еще ссылки по теме:

объявление дружественного класса внутри класса C++
Объявление шаблонного класса C++
C++ Объявление класса

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

Или воспользуйтесь поиском по форуму:
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
07.04.2014, 15:28     Объявление класса Point #20
Цитата Сообщение от zero-11 Посмотреть сообщение
Уже пробовал - ни в какую!
Уже слышали. Приводите ошибки. (и за одно полный код с последними правками)
Yandex
Объявления
07.04.2014, 15:28     Объявление класса Point
Ответ Создать тему
Опции темы

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