0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 57
1

Вызов функции из другого класса

07.09.2019, 14:33. Показов 9270. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, пишу в qt. Столкнулся с проблемой вызова функции в другом классе. Все бы ничего, но функция из класса 2 частично использует списки и структуры из класса 1 .Не могу понять, как реализовать вызов функции из 2 в 1. Пытался объявить статической, но для этого нужно и все переменные иметь статические, а это проблематично, переводить из 1 класса структуры и списки в static. Есть ли какой-нибудь другой способ ?
Я новичок в c++, рассчитываю на ваше понимание.


Спасибо за внимание
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.09.2019, 14:33
Ответы с готовыми решениями:

Вызов функции из одного класса кнопкой из другого класса
Доброго времени суток. Помогите разобраться с сигналами и слотами. Уже устал перечитывать не могу...

Вызов слота из другого класса
При вызове слота из MainWindow.cpp в MainWindow.cpp все работает. Перенес слот в mouses.cpp. ...

Вызов функции из QItemDelegate класса QAbstractListModel
Привет, у меня получается очень интересная ситуация. Есть QListView, так же унаследовал два класса...

Вызов функции другого потока и получение ответа с наименьшим кол-вом строк кода [QueuedConnection]
В общем, предположим есть два объекта классов GUIBackEnd и Processor, работающих в разных потоках....

13
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
07.09.2019, 15:29 2
Цитата Сообщение от ma2loi Посмотреть сообщение
Я новичок в c++, рассчитываю на ваше понимание.
Цитата Сообщение от ma2loi Посмотреть сообщение
пишу в qt
Надеюсь ты работаешь в консольном режиме? Если нет, то срочно начинай.

Нужно создать екземпляр класса Class2, и в нем вызвать функцию (а точнее метод).

Ты о таком?:
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
class Class1 {
 
public:
    struct MyStruct
    {
        char *name;
        int year;
    };
};
 
class Class2 {
    Class1::MyStruct value;
 
public:
 
    Class2(char *name, const int &year)
    {
        value.name = name;
        value.year = year;
    }
 
    void Method()
    {
        std::cout << "Class2 method. " << value.name << " is " << value.year << " old" << std::endl;
    }
};
 
int main()
{
    char* s = new char[10] {"Rostyslav"};
    Class2 cl2(s, 19);
    cl2.Method();
    return 0;
}
0
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 57
07.09.2019, 16:08  [ТС] 3
Спасибо за ответ, да, в консоли. У меня 2 файла .h, каждый из них описывает свой класс. Основной код работает в 1-м, а второй как доп класс обработки части данных из первого, описал нужный мне алгоритм, который как кусок кода в первом работает отлично, необходимо было поместить в отдельный класс его и там описать. А вот обратиться не получается к доп функции
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
07.09.2019, 16:12 4
Цитата Сообщение от ma2loi Посмотреть сообщение
необходимо было поместить в отдельный класс его и там описать
Блин, что ж вы все такие не разговорчивые, как я должен понять что тебе нужно? Просто передай указатель на объект как параметр функции да и все.
1
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 57
07.09.2019, 16:29  [ТС] 5
Буду разбираться с указателями, спасибо)
0
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 57
09.09.2019, 20:13  [ТС] 6
Что-то не выходит с указателями. На выходе первого класса сформированы данные для обработки вторым классом, но когда начинает выполняться функция из 2 класса, то все данные пропадают и компилятор не видит 0 элемент списка 1 класса, который был заполнен. Надеюсь, что понятно описал проблему.

Спасибо за внимание)
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
09.09.2019, 20:48 7
Цитата Сообщение от ma2loi Посмотреть сообщение
Надеюсь, что понятно описал проблему.
Бред бредовый. Лучшее описания проблема - её код, а еще лучше фрагмент с ошибкой и деталями (по типу вызова)
0
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 57
11.09.2019, 21:16  [ТС] 8
Максимально тупой пример того, что мне надо. Основной код работает в реальном времени с сетью.

При выполнении функции 2-го класса параметры из 1-го недоступны оказываются. Статическими объявлять совсем не вариант.

Я новичок в C++, передавать параметры другого класса не умею. Обычно в учебниках все в одном заголовочном файле классы описаны, а с отдельными я не могу разобраться.

Class 1.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Class1
{
public:
    Class1();
 
struct randObj{
    int a;
    int b;
    int c;
};
 
randObj rO = { 0, 0, 0};
 
int randFunc();
 
QList<randObj> randList;
 
 
};
 
#endif // CLASS1_H
Class 1.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Class1::Class1()
{
 
    randFunc();
 
    Class2 *cl2;
    cl2->dopFunc();
 
    cout<<"STOP";
}
 
Class1::randFunc(){
 
    for(int i = 0; i<5; i++)
    {
        randList.append(rO);
 
        randList[i].a += rand();
        randList[i].b += rand();
        randList[i].c += rand();
    }
    return 0;
}
Class 2.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Class2
{
public:
    Class2();
 
struct dopObj{
    int d;
    int e;
    int k;
};
dopObj dO = {0, 0, 0};
QList<dopObj> dopList;
 
int dopFunc();
 
};
 
#endif // CLASS2_H
class 2.cpp

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Class2::dopFunc(){
 
    Class1 *cl1;
 
 
    for(int i = 0; i<5; i++)
    {
        dopList.append(dO);
 
        dopList[i].d += rand();
        dopList[i].e += rand();
        dopList[i].k += rand();
    }
 
 
    for (int i = 0; i < cl1->randList.size(); i++){
 
    if (dopList[i].d < cl1->randList[i].a)
        cout<< "d < a";
 
    }
 
}
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
11.09.2019, 21:23 9
ma2loi, как по этих фрагментах без объяснений я должен понять где ошибка? На слове STOP?

Цитата Сообщение от ma2loi Посмотреть сообщение
Class2 *cl2;
Тогда этого мало, ты просто создал указатель в никуда (то есть null) и пытаешся из ничего (тобиш никуда) достать что-то (метод), так не бывает.

Тебе нужно выделить память, вот так:
C++
1
Class2 *cl2 = new Class2()
Добавлено через 1 минуту
Цитата Сообщение от ma2loi Посмотреть сообщение
Основной код работает в реальном времени с сетью.
Странно конечно, умеешь работать с сетью, но не разбираешся в азах ООП на С++?

Даже если сеть написана на чем-то другом, гугл же дает решения данной проблемы, выскочит же ошибка об обращении по несущестующему указателю (тобиш которые указывает в никуда).
0
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 57
11.09.2019, 21:39  [ТС] 10
Ошибки нет, функция в отладчике вызывает системную остановку на моменте сравнения с элементом 1-го класса, тк обращается к несуществующему объекту.
Цитата Сообщение от kitsoRik Посмотреть сообщение
Тогда этого мало, ты просто создал указатель в никуда (то есть null) и пытаешся из ничего (тобиш никуда) достать что-то (метод), так не бывает.
Тебе нужно выделить память, вот так:
даже когда создаю объект 2 класса, все равно не ссылается, пишет в отладчике на нужном мне списке из 1-го класса QList<randObj> <unavailable synchronous data> в интернете ничего, решающего мою проблему, не нашел. Поэтому обращаюсь сюда за помощью.

Надеюсь, что со мной какая-то проблема, а не лыжи не едут.
0
490 / 286 / 129
Регистрация: 30.10.2018
Сообщений: 1,309
11.09.2019, 21:44 11
ma2loi, ты покажи мне конкрентно на каком фрагменте и какая строка являеться ошибкой, т.к. без выделения памяти у тебя ничего работать не будет
0
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 57
11.09.2019, 21:55  [ТС] 12
как-то так
Миниатюры
Вызов функции из другого класса   Вызов функции из другого класса  
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
12.09.2019, 12:36 13
Цитата Сообщение от kitsoRik Посмотреть сообщение
C++
1
2
3
4
5
Class2(char *name, const int &year)
 {
 value.name = name;
 value.year = year;
 }
Гавнокод который лучше не показывать.

Добавлено через 2 минуты
Цитата Сообщение от ma2loi Посмотреть сообщение
Все бы ничего, но функция из класса 2 частично использует списки и структуры из класса 1 .Не могу понять, как реализовать вызов функции из 2 в 1.
Попахивает изначально неправильным проектированием. Озвучьте задачу полностью.
0
0 / 0 / 0
Регистрация: 14.03.2019
Сообщений: 57
12.09.2019, 15:03  [ТС] 14
Я разобрался, ошибка была в наследовании. Не указал родителя в main.cpp и не мог ссылаться.

Вместо class2 *cl2 = new class2(cl1)
Писал: class2 *cl2 = new class2()
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2019, 15:03
Помогаю со студенческими работами здесь

Вызов нестатической функции класса в другом классе
Нужно вызвать нестатическую функцию одного класса в другом классе (указатель на функцию передаю в...

Вызов функции из другого класса делегатом
Здравствуйте. Имеются два скрипта: Script 1 public Action&lt;float, float&gt; ImgPosChanged =...

Вызов функции одного класса из другого
В классе Form1 вызывается открытие окна Zoom, а в классе Zoom по кнопке нужно вызвать перерисовку...

Вызов функции public function из другого класса
Есть спрайт, который связан с классом. Этот класс &quot;видит&quot; другие объекты в этом спрайте и к ним...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru