【发布时间】:2020-04-12 00:46:59
【问题描述】:
我在运行 Qt-C++ 程序时遇到分段错误:
dlg.h:
#include<QGridLayout>
#include<QPushButton>
#include<QDialog>
class dlg : public QDialog{
private:
QPushButton *btn1,*btn2,*btn3,*btn4,*btn5,*btn6,*btn7,*btn8,*btn9,*btn10,*btn11,*btn12;
QGridLayout *gridlayout;
public:
dlg();
};
dlg.cpp:
#include "dlg.h"
dlg::dlg(){
btn1 = new QPushButton("btn1");
btn1 = new QPushButton("btn2");
btn1 = new QPushButton("btn3");
btn1 = new QPushButton("btn4");
btn1 = new QPushButton("btn5");
btn1 = new QPushButton("btn6");
btn1 = new QPushButton("btn7");
btn1 = new QPushButton("btn8");
btn1 = new QPushButton("btn9");
btn1 = new QPushButton("btn10");
btn1 = new QPushButton("btn11");
btn1 = new QPushButton("btn12");
gridlayout = new QGridLayout(this);
gridlayout->addWidget(btn1,0,0);
gridlayout->addWidget(btn2,0,1);
gridlayout->addWidget(btn3,0,2);
gridlayout->addWidget(btn4,0,3);
gridlayout->addWidget(btn5,1,0);
gridlayout->addWidget(btn6,1,1);
gridlayout->addWidget(btn7,1,2);
gridlayout->addWidget(btn8,1,3);
gridlayout->addWidget(btn9,2,0);
gridlayout->addWidget(btn10,2,1);
gridlayout->addWidget(btn11,2,2);
gridlayout->addWidget(btn12,2,3);
setLayout(gridlayout);
setWindowTitle("* QGridLayout *");
}
main.cpp:
#include<iostream>
#include<QApplication>
#include "dlg.h"
using namespace std;
int main(int argc,char** argv){
QApplication app(argc,argv);
dlg obj;
obj.show();
return app.exec();
}
我将所有文件保存在名为gridlayout 的目录中,并在终端中运行这些命令:
cd /hom/gridlayout/
qmake -project
qmake gridlayout.pro
make
我收到此错误:
分段错误(核心转储)
有没有人能解决这个问题。我指的是 Jeganathan Swaminathan this 的《掌握 C++ 编程》一书,用于 Qt 命令行 C++ 编码。
这段代码有什么问题?
【问题讨论】:
-
btn1 = ...; btn1 = ...; btn1 = ...;等复制粘贴错误? -
@Someprogrammerdude 谢谢.. 看着屏幕有点沮丧,这就是为什么没有看到。非常感谢... :)
-
@Omkar 使用member inizialize list 而不是在构造函数体内分配变量,它会帮助您避免此类错误,而不是提高效率。