如何传递 const QString 引用?
How to pass const QString references?
我有几个 'tags',我想用这些标签创建一个格式化的 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,否则得到:
Error: no matching function for call to
'createFormattedPlainText(QString&, const char [3], const char [2],
const char [3])' createFormattedPlainText(l1, l2, "123", "**",
"xxx" );
??
) What am I doing wrong?
你对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"
来自 doc:
Returns a copy of this string with the lowest numbered place marker
replaced by string a, i.e., %1, %2, ..., %99.
在你的情况下 refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
,你 return 复制到无处可去。在我的例子中 refLine.append(QString("[%0] :: [%1] ++ %2").arg(v1, v2, v3));
我附加到 refLine
完全构造的字符串,该字符串由 arg()
.
处理
P.S。当然你可以做下一步(用你的旧代码):
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()
return 的副本。
我有几个 'tags',我想用这些标签创建一个格式化的 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,否则得到:
Error: no matching function for call to 'createFormattedPlainText(QString&, const char [3], const char [2], const char [3])' createFormattedPlainText(l1, l2, "123", "**", "xxx" ); ?? ) What am I doing wrong?
你对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"
来自 doc:
Returns a copy of this string with the lowest numbered place marker replaced by string a, i.e., %1, %2, ..., %99.
在你的情况下 refLine.append("[%0] :: [%1] ++ %2").arg(v1, v2, v3);
,你 return 复制到无处可去。在我的例子中 refLine.append(QString("[%0] :: [%1] ++ %2").arg(v1, v2, v3));
我附加到 refLine
完全构造的字符串,该字符串由 arg()
.
P.S。当然你可以做下一步(用你的旧代码):
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()
return 的副本。