gpt4 book ai didi

c++ - 不能从父级调用子级中的函数

转载 作者:行者123 更新时间:2023-11-28 01:39:54 24 4
gpt4 key购买 nike

我正在 Qt creator 中使用 C++ 开发游戏。

我可以毫无问题地在 main 中调用子类的函数,但是当我尝试从父类调用子类中的函数时,程序意外关闭。

我已经在父类的.h文件中声明了所有的公共(public)属性。 T 尝试删除这些属性并将它们放在子类的 .h 文件中,然后它工作正常。但是 W 想将它们保留在父类中并从子类中访问它们。

请帮助让它工作,我尝试了几次但我无法弄清楚。

父类的.h文件:

class Game:public QGraphicsView,public home{

Q_OBJECT

public:

Game(QWidget* parent=0);

virtual ~Game(){}

void createBlockCol(double x);
void creatBlockGrid();
virtual void setbackground();

QPushButton *btn2;
QPushButton *btn3;
QPushButton *btn4;
QGraphicsScene* scene;
QGraphicsScene *scene2;
QGraphicsView* view;
QPushButton *btn;
QPushButton *btn1;
QGraphicsProxyWidget *pr;
QGraphicsProxyWidget *pr1;


QGraphicsProxyWidget *pr2;
QGraphicsProxyWidget *pr3;
QGraphicsProxyWidget *pr4;
QGraphicsPixmapItem* item1;
QGraphicsPixmapItem* item;

private slots:
void start();

这是父类的.cpp类

Game::Game(QWidget *parent): QGraphicsView(parent){
scene = new QGraphicsScene(0,0,466,600);
setScene(scene);

}

void Game::setbackground(){

scene2 = new QGraphicsScene(0,0,400,600);
QGraphicsView* view = new QGraphicsView(scene2);
item = new QGraphicsPixmapItem(QPixmap(":/Ies/uu.jpg"));
scene2->addItem(item);
view->show();
game_function *gm; //call a function in child class
gm->set_buttons();
}

子类.h文件

class game_function:public Game
{
Q_OBJECT

public:

void set_background();
void mainwindow();
void set_buttons();


private slots:
void button_help();
};

.cpp文件

void game_function::set_buttons(){



btn = new QPushButton;
QObject::connect(btn,SIGNAL(clicked()),this,SLOT(startgame()));
btn->setStyleSheet("background-color: white");
pr = this->scene2->addWidget(button);
btn->setAutoFillBackground(true);
btn->setIcon(QIcon(":/Ies/main.png"));
btn->setIconSize(QSize(131,41));
pr->setPos(130,430);

btn1 = new QPushButton;
QObject::connect(btn1,SIGNAL(clicked()),this,SLOT(stopgame()));
btn1->setStyleSheet("background-color: white");
pro = this->scene2->addWidget(button1);
btn1->setAutoFillBackground(true);
btn1->setIcon(QIcon(":/Images/exit.png"));
btn1->setIconSize(QSize(131,41));
pr->setPos(130,500);

最佳答案

is there ay way i can call this function

你可能离尝试多态调用不远了......

也许如果你

A) 添加“Game::set_buttons()”,并在类头的某处使其成为虚拟的,也许是纯虚拟的:

class Game:public QGraphicsView,public home{
// ... perhaps after

virtual ~Game(){}

virtual void setbuttons() = 0;

// ...
} // end of class Game

然后,在方法“Game::setbackground()”中你可以使用它......替换这个

// undefined behavior - gm not initialized
//game_function *gm; //call a function in child class
//gm->set_buttons();

this->set_buttons();

关于c++ - 不能从父级调用子级中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47693663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com