【发布时间】:2013-05-08 00:50:14
【问题描述】:
我整天都在与这个作斗争,我尝试以许多不同的方式传递一个 QString、一个 std::string 和一个 char*,但如果我传递它以便我可以修改参数的库函数中的值,然后是 SEGFAULTs。如果我将库函数逐行复制到主应用程序中,我可以整天将引用作为参数传递并在函数内更改它们的值。
这是我在库中的函数的精简版。 我已经从字面上删除了除此行之外的所有代码。
MySQLLib::ExecuteQuery(const QString& query, QString& results)
{
results = "Changed the value of this parameter.";
}
这是来自主应用程序的调用代码。 bmdbTest 是上述 MySQLLib 类的一个实例... 我的库和应用程序中的所有其他代码都有效。它只是不允许我将对任何东西的引用传递给我的图书馆。
MySQLProj::pbExecuteQuery_Click()
{
QString x = "Hello.";
bmdbTest->ExecuteQuery("SELECT ttid from test_table", x);
ui_MySQLProj1.textEdit->setText(x);
}
它 SEGFAULTs 在 bmdbTest->ExecuteQuery 调用上。 我什至尝试了一个简单的 int& 作为参数但没有成功。 但是,我可以毫无问题地将参数作为 const QString& 传递。我就是不能那样修改参数的值。
编辑:我刚刚想通了。感谢“paxdiablo”建议我检查我的变量是否存在空指针或无效指针。昨晚我真的很累,我不敢相信我错过了这个。
我刚刚发现了问题,我觉得自己像个白痴。您提到 bmdbTest 为空或无效。 bmdbTest 的值很好,因为我的所有其他函数都可以正常工作,但是当我调用 ExecuteQuery() 时,我从我的 GUI 窗口中的 QLineEdit 中的值传递查询字符串,就像这样。
bmdbTest->ExecuteQuery(leQuery->text(), resultString);
leQuery->Text() 实际上是问题所在,因为我必须像这样访问 leQuery。
bmdbTest->ExecuteQuery(ui_MySQLProj1.leQuery->text(), resultString);
【问题讨论】:
标签: qt parameters reference shared-libraries