2013-08-02 54 views
0

任何人都可以告诉我为什么我在printn函数中出现分段错误?qt中的分段错误

“grad.h”

namespace Ui { 
class grad; 
} 

class grad : public QMainWindow 
{ 
    Q_OBJECT 

    public: 
    explicit grad(QWidget *parent = 0); 
    ~grad(); 

private: 
Ui::grad *ui; 
}; 

“course.cpp”

void course::printr(vector<course> c){ 
    QString string; 
    for(int i = 0; i < (int)c.size();i++){ 
     string = QString::fromStdString(c[i].getTitle()); 
     Ui::grad->textEdit->append(string); 
    } 
} 

调试器显示正确的输出,直到的为当它到达UI循环的第一次迭代::毕业生部分。那么我会遇到分段错误。让我知道是否需要发布更多的代码谢谢。

+1

您是否设置了用户界面?尝试ui-> setupUi(this);例如在构造函数中。 – otisonoza

+0

这怎么能编译? Ui :: grad是一个类型,而不是一个实例。 –

回答

1

我不确定textEdit是否为Class QTextEdit。如果是这样,你只是要追加文本尝试

textEdit->setText(textEdit->plainText().append(string)); 
+0

我改变 'UI :: grad-> textEdit->追加(串);' 到 'UI ::毕业生()textEdit->追加( “字符串1”);' ,现在它会通过编译但在运行程序时出现分段错误 –

1

Ui::grad->textEdit->append(string);
错误是在这里,但它不应该编译。
Ui::grad是类的名称,不能使用运算符->。你只需要一些grad类的实例(不是Ui::grad,只是你的名字空间的grad)来做你想做的事。

另外它通常不是一个好主意,以与对象相同的方式命名类,我想你需要使用一些命名约定来使这种错误更容易找到。

1

换行;

Ui::grad->textEdit->append(string); 

ui->textEdit->append(string); 

,让我知道IFI它工作与否。

+0

它不起作用,'course'类没有成员'ui',因为我可以预测 – SpongeBobFan

+0

是的,我没有意识到这一点。他应该使用信号和插槽来访问主窗口成员。 –

+0

SpongeBobFan是对的。 “课程”没有会员ui。该应用程序有course.h,course.cpp,grad.h和grad.cpp。 grad类是由qt生成的。我用C++自己编写了课程,现在我试图将两者结合在一起。我不想将文本输出到控制台,而是希望它输出到一个文本编辑器。 –