我整天都在与这个作斗争,我尝试以许多不同的方式传递一个 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);
}
它在 bmdbTest->ExecuteQuery 调用上 SEGFAULTs。我什至尝试了一个简单的 int& 作为参数但没有成功。但是,我可以毫无问题地将参数作为 const QString& 传递。我只是不能那样修改参数的值。
编辑:我刚刚想通了。感谢“paxdiablo”建议我检查我的变量是否存在空指针或无效指针。昨晚我真的很累,我不敢相信我错过了这个。
我刚刚发现了问题,我觉得自己像个白痴。您提到 bmdbTest 为空或无效。bmdbTest 的值很好,因为我所有的其他函数都可以正常工作,但是当我调用 ExecuteQuery() 时,我从我的 GUI 窗口中的 QLineEdit 中的值传递查询字符串,就像这样。
bmdbTest->ExecuteQuery(leQuery->text(), resultString);
leQuery->Text() 实际上是问题所在,因为我必须像这样访问 leQuery。
bmdbTest->ExecuteQuery(ui_MySQLProj1.leQuery->text(), resultString);