Задать вопрос

Как вызвать метод основного класса из другого класса?

Есть метод Class::method();
Как мне его вызвать из другого класса Class2? Объявил заголовочный class.h во втором классе, но все равно пишет, что Class wasn't declared.

Пробовал передать указатель в конструктор Class2, как Class *pp. При объявлении класса вписал this. Все равно происходит ошибка. Что я делаю не так?

Заранее спасибо!
  • Вопрос задан
  • 18702 просмотра
Подписаться 3 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 4
EXL
@EXL
Энтузиаст
Вы снова не изучив базу C++ и документацию по Qt стараетесь решить поставленную задачу с наскока. Язык программирования C++ это не тот язык, где можно использовать такой подход. Вы либо твёрдо знаете основы, либо не знаете совсем ничего.

Вам необходимо воспользоваться обменом данными между классами. Это можно сделать различными способами: геттеры-сеттеры, двойное наследование, передача указателя, система сигналов-слотов, общий класс для обмена данными, статические методы и т. д.

Примеров в интернете можно найти множество:
easy-qt.blogspot.ru/2012/10/1.html
www.cyberforum.ru/qt/thread548059.html
fkn.ktu10.com/?q=node/3021
www.prog.org.ru/topic_19557_0.html

И ещё у вас достаточно странный подход. Форма должна опрашивать логический класс, а не наоборот. То есть ваш не_GUI-класс ничего не должен содержать и дёргать Qt'шного. Вдруг его придётся выносить в отдельную библиотеку, никак не относящуюся к GUI и Qt?

Настоятельно рекомендую посмотреть примеры приложений, идущие с Qt. Там вы найдёте все ответы на свои вопросы и методы построения правильной архитектуры приложения.
Ответ написан
Csklassami
@Csklassami
@l2p В таком случае @kachsheev был прав. Вот пример:

class MyClass
{
public:
	void MethodFromClass1() {  //метод для теста
		cout << 666;
	}
};

class MyClass2 : public MyClass
{
public:
	void MethodFromClass2() {
		MethodFromClass1();  //вызов метода из производного класса
	}
};

int main()
{
	MyClass2 obj;
		obj.MethodFromClass2();
	return 0;
}

Если вы хотите сделать вызов метода и не использовать main(), то ничего не выйдет...компилятор выполняет инструкции только из главной функции.
Ответ написан
kachsheev
@kachsheev
C++ one love
Class.h:
class Class
{
public:
    void mathod();
}

include "Class.h"

Class2.h:
class Class2
{
public:
    void method2()
    {
        Class class1;
        class1.method();
    };
}


main.cpp:
#include "Class2.h"

int main()
{
    Class2 class2;
    class2.method2();
    return 0;
}


Конечно, несколько утрировано, т.к. нет конструкторов и диструкторов. Но по идее вроде должно работать.

Или вы что имели ввиду?
Ответ написан
AxisPod
@AxisPod
А не проще прочитать несколько мелких статей по основам за то время, что приходится ждать адекватный ответ на неадекватный вопрос?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы