С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12

Функция, возвращающая объект класса

22.02.2015, 17:19. Показов 2025. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток.
Хотел бы узнать правильное описание функции возвращающей объект класса.
У меня есть
C++
1
class Matches  {}
C++
1
2
3
4
class Object
{
    Matches* GetMatches();
}
Я пытаюсь описать метод:
C++
1
2
3
4
Matches* Object::GetMatches()
{
    return Matches;
}
Ошибка E2141 Declaration syntax error
Пробовал без * - вроде работает но не могу получить уже объект:
Matches *M;
M = O->GetMatches();
Ошибка E2034 Cannot convert Matches' to 'Matches *'
Matches M; - вообще не получается создать
Ошибка E2285 Could not find a match for 'Matches::Matches()'
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2015, 17:19
Ответы с готовыми решениями:

Функция, возвращающая объект класса
Visual c++ Visual Studio 2010 Есть задание, в котором, нужно создать класс и некоторые методы. Я создал public ref class. ...

Рекурсивная функция, возвращающая указатель на объект
Есть рекурсивная функция (заполняющая двоичное дерево) Node* fill(int i){ //Возвращаемое значение ????? Node node(lines.key);...

Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел
Разработать заданные согласно условия функции и сделать в главной программе по два вызова этих функций с различными параметрами. Для...

12
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33198 / 21494 / 8233
Регистрация: 22.10.2011
Сообщений: 36,888
Записей в блоге: 12
22.02.2015, 18:16
C++
1
2
3
4
Matches* Object::GetMatches()
{
    return new Matches;
}
, однако
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
22.02.2015, 18:36  [ТС]
volvo, нее
в этой функции перебираю вектор класса Matches и возвращаю существующий.
т.е.:
C++
1
2
3
4
5
6
7
8
9
10
Matches* Object::GetMatches()
{
    for (unsigned i = 0; i < MatchesList.size(); i++)
    {
        if (/*что - то*/) {
            return  MatchesList[i];
        }
    }
    return NULL;
}
А мне ошибка E2141 Declaration syntax error
0
 Аватар для SergeyKu
108 / 49 / 26
Регистрация: 24.10.2012
Сообщений: 56
22.02.2015, 21:05
Цитата Сообщение от ivan.-94 Посмотреть сообщение
E2141 Declaration syntax error
точку с запятой не пропустил нигде?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33198 / 21494 / 8233
Регистрация: 22.10.2011
Сообщений: 36,888
Записей в блоге: 12
22.02.2015, 21:28
Пропустил, конечно. После скобок, закрывающих описание класса, как минимум в двух местах...
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
22.02.2015, 21:41  [ТС]
Цитата Сообщение от volvo Посмотреть сообщение
Пропустил, конечно. После скобок, закрывающих описание класса, как минимум в двух местах...
конечно же у меня есть ; в конце описания каждого класса.
это само собой... у меня бы тогда ничего не работало. У меня все работает, проблема только когда реализовываю эту функцию.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33198 / 21494 / 8233
Регистрация: 22.10.2011
Сообщений: 36,888
Записей в блоге: 12
22.02.2015, 21:42
Значит, показывай описание классов с описанием функций, так, чтобы можно было ошибку воспроизвести
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
23.02.2015, 16:06  [ТС]
*.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
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
namespace Gameplay
{
    class Matches   //спичка
    {
        public:
            Matches(int state, int SquareID); // Конструктор
            AnsiString ToString(void);        // инфа
            void SetSquareID(int ID);         // задание Ид квадрата
            void SetState(int State);         // задание расположения
            int GetSquareID(void);            // получение ИД квадрата
            int GetState(void);               // получение расположения
            TPNGGraphic *BitmapMatches;       // изобаражение
            // координаты
            float   Left;
            float   Top;
            float   Right;
            float   Bottom;
        private:
            int SquareID;   // Ид квадрат
            int State;      // Расположение
    };
    class Square   //квадрат
    {
        public:
            // конструктор
            Square(float Left, float Top, float Right, float Bottom, int ID);
            AnsiString ToString(void);   // инфа в строку
            // Геттеры получения координат
            int     GetID(void);
            float   GetLeft(void);
            float   GetTop(void);
            float   GetRight(void);
            float   GetBottom(void);
            // Флаги занятости
            bool    isLeft;
            bool    isTop;
            bool    isRight;
            bool    isBottom;
            bool    isLT_TO_RB;
            bool    isLB_TO_RT;
        private:
            // координаты
            float   Left;
            float   Top;
            float   Right;
            float   Bottom;
            int     ID;  // Ид квадрата
    };
 
    class Field    // поле
    {
        public:
            // конструкторы
            //Field(AnsiString FieldFileName);   //Поле загружается из файла FieldFileName
            Field(int N, float Height, float Width, TCanvas *Canvas);
            void Draw(void);   //Рисует  поле (подложку и объекты на нем)
            void Repaint(int N, float Height, float Width, TCanvas *Canvas);   //Рисует  поле (подложку и объекты на нем)
            AnsiString SquareToString(void);    // инфа о квадратах в строку
            AnsiString MatchesToString(void);   // инфа о спичках в строку
            int GetSquareFromPoint(int x, int y);  // квадрат под курсором
            void AddMatches(int State, int SquareID); // добавить спичку
            Matches* GetMatchesFromPoint(int X, int Y);   // спичка под курсором
            int GetIDMatchesFromPoint(int X, int Y);      // спичка под курсором
            void MatchesMove(int MatchesID, int SquareID, int X, int Y); // перемещение спички
            int GetStateFromPoint(int SquareID, int X, int Y);
        private:
            int     N;  // Столбцов и Строк
            float   Height;  // высота Canvas
            float   Width;   // Ширина Canvas
            TCanvas *Canvas; // Canvas
            TPNGGraphic *BitmapMatches[6];  // массив изображений спички
            std::vector<Matches*> MatchesList; // вектор спичек
            std::vector<Square*> SquareList;   // вектор Квадратов
    };
 
    extern Field* GameField;
}

*.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
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//---------------------------------------------------------------------------
 
#pragma hdrstop
#pragma once
#pragma package(smart_init)
#include "Gameplay.h"
//---------------------------------------------------------------------------
void Gameplay::InitGameplay()
{
//
}
float Gameplay::DistanceFromPointToLine(int Mx, int My, float X1, float Y1, float X2, float Y2) // Mx и My - координаты точки, а X1,Y1,X2,Y2 - координаты двух точек, образующих линию
{
    float A = Y1-Y2;
    float B = X2-X1;
    float C = X1*Y2-X2*Y1;
    return fabs(A*Mx+B*My+C)/sqrt(A*A+B*B);
}
#pragma region *************Matches(Спичка)**************
Gameplay::Matches::Matches(int state, int SquareID)
{
//
}
int Gameplay::Matches::GetSquareID()
{
//
}
void Gameplay::Matches::SetSquareID(int ID)
{
//
}
void Gameplay::Matches::SetState(int State)
{
//
}
int Gameplay::Matches::GetState(void)
{
//
}
AnsiString Gameplay::Matches::ToString(void)
{
//
}
#pragma end_region
#pragma region *************Square(Квадрат)**************
Gameplay::Square::Square(float Left, float Top, float Right, float Bottom, int ID)
{
//
}
AnsiString Gameplay::Square::ToString(void)
{
//
}
int Gameplay::Square::GetID(void)
{
//
}
float Gameplay::Square::GetLeft(void)
{
//
}
float Gameplay::Square::GetTop(void)
{
//
}
float Gameplay::Square::GetRight(void)
{
//
}
float Gameplay::Square::GetBottom(void)
{
//
}
#pragma end_region
#pragma region *************Field(ПОЛЕ)**************
Gameplay::Field::Field(int N, float Height, float Width, TCanvas *Canvas)
{
//
}
void Gameplay::Field::AddMatches(int State, int SquareID)
{
//
}
void Gameplay::Field::Repaint(int N, float Height, float Width, TCanvas *Canvas)
{
//
}
void Gameplay::Field::Draw(void)
{
//
}
Matches* Gameplay::Field::GetMatchesFromPoint(int X, int Y)
{
    for (unsigned i = 0; i < MatchesList.size(); i++)
    {
        if (((int)MatchesList[i]->Left <= X && (int)MatchesList[i]->Right >= X)
            &&((int)MatchesList[i]->Top <= Y && (int)MatchesList[i]->Bottom >= Y)) {
            return  MatchesList[i];
        }
    }
    return NULL;
}
int Gameplay::Field::GetIDMatchesFromPoint(int X, int Y)
{
//
}
void Gameplay::Field::MatchesMove(int MatchesID, int SquareID, int X, int Y)
{
//
}
AnsiString Gameplay::Field::SquareToString(void)
{
//
}
AnsiString Gameplay::Field::MatchesToString(void)
{
//
}
int Gameplay::Field::GetSquareFromPoint(int x, int y)
{
//
}
int Gameplay::Field::GetStateFromPoint(int SquareID, int X, int Y)
{
//
}
#pragma end_region

Так если убираю Matches* GetMatchesFromPoint(int X, int Y); все отлично работает, добавляю получаю ошибку.
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.02.2015, 16:40
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   class Matches   //спичка
    {
        public:
            Matches(int state, int SquareID); // Конструктор
            AnsiString ToString(void);        // инфа
            void SetSquareID(int ID);         // задание Ид квадрата
            void SetState(int State);         // задание расположения
            int GetSquareID(void);            // получение ИД квадрата
            int GetState(void);               // получение расположения
            TPNGGraphic *BitmapMatches;       // изобаражение
            // координаты
            float   Left;
            float   Top;
            float   Right;
            float   Bottom;
        private:
            int SquareID;   // Ид квадрат
            int State;      // Расположение
    };
Опять этот чудо-код с открытыми членами класса

Добавлено через 1 минуту
Цитата Сообщение от ivan.-94 Посмотреть сообщение
ну хотя бы потому, что я работаю в билдере и пытаюсь это реализовать в билдере
Но вопросы у тебя касаются азов С++, а не билдера...

Добавлено через 14 минут
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
   enum State{  .... }
 
   class Matches   // или спички ? "Match"
    {
        public:
            Matches(State state, int SquareID); // Конструктор
           
            // AnsiString ToString();        // -неудачное название
            String Info();
 
            void SetSquareID(int ID);         // задание Ид квадрата
            void SetState(State state);         // задание расположения
            int GetSquareID();            // получение ИД квадрата
            State GetState();               // получение расположения
 
            float  GetLeft(){return FLeft; }       
            void SetLeft(float Left){  FLeft= Left; };
            // ...
 
        private:
            int FSquareID;   // Ид квадрат
            int FState;      // Расположение
 
            float   FLeft;
            float   FTop;
            float   FRight;
            float   FBottom;
 
            boost::shared_ptr<TPNGGraphic> FBitmapMatches;   // или конструктор копирования,оператор присвоения или static или.. от ситуации, но явно не "тупо" указателем.     
    };
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33198 / 21494 / 8233
Регистрация: 22.10.2011
Сообщений: 36,888
Записей в блоге: 12
23.02.2015, 16:42
C++
1
2
3
4
5
6
7
8
9
10
11
Gameplay::Matches* Gameplay::Field::GetMatchesFromPoint(int X, int Y)
{
    for (unsigned i = 0; i < MatchesList.size(); i++)
    {
        if (((int)MatchesList[i]->Left <= X && (int)MatchesList[i]->Right >= X)
            &&((int)MatchesList[i]->Top <= Y && (int)MatchesList[i]->Bottom >= Y)) {
            return  MatchesList[i];
        }
    }
    return NULL;
}
1
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
23.02.2015, 17:26  [ТС]
Где то читал, что enum не стоит использовать.
Потому у меня
C++
1
2
3
4
5
6
#define LEFT        0
#define TOP         1
#define RIGHT       2
#define BOTTOM      3
#define LT_TO_RB    4
#define LB_TO_RT    5
Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
Опять этот чудо-код с открытыми членами класса
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
23.02.2015, 17:32
Цитата Сообщение от ivan.-94 Посмотреть сообщение
Где то читал, что enum не стоит использовать.
На туалетной бумаге?

Нет слов.
0
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
23.02.2015, 17:37  [ТС]
volvo, дааа, мог бы и догадаться... видимо я уже совсем заработался

Добавлено через 58 секунд
Цитата Сообщение от Avazart Посмотреть сообщение
На туалетной бумаге?
ахах может быть и там)))
Не помню, что ж теперь буду использовать)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.02.2015, 17:37
Помогаю со студенческими работами здесь

Функция, возвращающая экземпляр класса
Доброго времени суток. Допустим есть у нас функция, результатом которой является некий объект: MyClass* func() { ... ...

Функция шаблонного класса возвращающая тип, определенный классом
ошибка. говорит, что не ожидал увидеть идентификатор some(C2061)template&lt;typename T&gt; class a{ public: enum some{one,two}; some...

Функция, принимающая объект импортируемого класса из библиотеки динамической компоновки
Здравствуйте. Возникла следующая проблема: Есть библиотека, экспортирующая класс. Есть приложение-клиент, которое использует...

Функция, возвращающая ссылку
Помогите исправить функцию, которая возвращает ссылку на массив size_t Crd() { size_t crd; return &amp;crd; }

Функция, возвращающая указатель
Нужно написать функцию, входящие параметры которой являются указателем на структуру. Заполнить в функции структуру (не важно). Возвратить...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru