如何传递const QString引用



我有几个'标签',我想创建一个格式化的QString从这些标签,例如:

void createFormattedPlainText(QString & refLine, const QString & v1, const QString & v2, const QString & v3)
{
  refLine.clear();
  refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
}

所以,我想打电话给:

QString line;
createFormattedPlainText(line, "123", "**", "xxx");

但是我不能,我删除了签名中的const,否则我得到:

错误:没有匹配的函数调用'createFormattedPlainText(QString&, const char [3], const char [2],const char [3])' createformatted明文(l1, l2, "123", "**","xxx");??我做错了什么?

您使用的arg()是错误的,没有其他问题,您的函数签名是有效和正确的。

void createFormattedPlainText(QString & refLine, const QString & v1, const QString & v2, const QString & v3)
{
  refLine.clear();
  refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
}
int main(int argc, char *argv[])
{
QString line;
createFormattedPlainText(line, "123", "**", "xxx");
qDebug() << "line = " << line;
//...
输出:

line =  "[%0] :: [%1] ++ %2" 

正确版本:

void createFormattedPlainText(QString & refLine, const QString & v1, const QString & v2, const QString & v3)
{
  refLine.clear();
  refLine.append(QString("[%0] :: [%1] ++ %2").arg(v1, v2, v3));//Attention here
}
int main(int argc, char *argv[])
{
QString line;
createFormattedPlainText(line, "123", "**", "xxx");
qDebug() << "line = " << line;
//...
输出:

line =  "[123] :: [**] ++ xxx" 
从医生:

返回该字符串的副本,其中包含编号最低的位置标记替换为字符串a,即%1,%2,…, % 99。

在您的示例refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);中,您返回copy到无处。在我的例子中,refLine.append(QString("[%0] :: [%1] ++ %2").arg(v1, v2, v3));我附加到refLine完全构造的字符串,该字符串由arg()处理。

注:当然,你可以做下一步(用你的旧代码):

void createFormattedPlainText(QString & refLine, const QString & v1, const QString & v2, const QString & v3)
{
  refLine.clear();
  //arg() returns copy so just assign this copy to the refLine again
  refLine = refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
}

但是我认为这是可怕的代码,我写这个只是为了告诉你arg()返回副本。

最新更新