2012-02-27 59 views
2

我有支持本机C++类型以及Qt类型的代码。例如,有“等效”的stringQStringQString通过引用问题

我有2个功能,一个需要string的和一个需要QString的。 QString版本将参数转换为string's,然后调用该函数的string版本。

这是问题的一些通用代码:

int myClass::LoadQString(const QString &tagName, QString &toReturn) 
{ 
    string tag = tagName.toStdString(); 
    string ret = toReturn.toStdString(); 
    //string& ret = toReturn.toStdString(); //This gives me an error 

    return LoadString(tag, ret); 
} 

int myClass::LoadString(const string& tagName, string& toReturn) 
{ 
    toReturn = "hello world!"; 

    ... 
} 

所以,这段代码可以编译和运行...但是,当我打电话LoadQString()第二个参数是一个空QString一旦返回。您可以在我的评论行中看到我尝试使用string& ret = ...以获取参考。如果我打电话LoadString(),然后在返回时检查toReturn的值,它将是“hello world!”如预期。

只是试图让LoadQString()正常工作。

感谢您的帮助!

回答

3

您应该std::stringstd::string版本调用

int myClass::LoadQString(const QString &tagName, QString &toReturn) 
{ 
    string tag = tagName.toStdString(); 
    string ret = toReturn.toStdString(); 
    int retCode = LoadString(tag, ret); 
    toReturn = QString::fromStdString(ret); 
    return retCode; 
} 
0

你应该叫LoadString,不LoadXMLAttribute,然后分配给rettoReturn你叫后,然后返回intLoadString返回。

+0

对不起,修正了代码......我是从实际上复制粘贴的,忘了改变东西 – user869525 2012-02-27 19:47:26

+0

@ user869525你仍然需要为'toReturn'指定'ret'来向'LoadQString的调用者传播'ret '。 – 2012-02-27 19:48:34

0

首先,转换回QString,toStdString创建的std :: string对象作为暂时的。所以很自然你不能得到一个引用,你必须将结果存储在一个值中,或者通过一个const引用来延长它的生命周期。

但是,你在做什么,假设toReturn是严格意义上的输出参数和加载链执行实际工作:如果toReturn不是严格意义上的输出参数也输入一个(我建议

int myClass::LoadQString(const QString &tagName, QString &toReturn) 
{ 
    string tag = tagName.toStdString(); 
    string ret; 
    int result = LoadXMLAttribute(tag, ret); 
    toReturn = QString::fromStdString(ret); 
    return result; 
} 

你避免这个,因为它是一个相当混乱的设计实践):

int myClass::LoadQString(const QString &tagName, QString &toReturn) 
{ 
    string tag = tagName.toStdString(); 
    string ret = toReturn.toStdString(); 
    int result = LoadXMLAttribute(tag, ret); 
    toReturn = QString::fromStdString(ret); 
    return result; 
} 

很简单。从QString转换为std :: string,调用接受std :: strings的函数,存储返回值,并将输出参数(ret)转换回分配给输出参数(toReturn)的QString。

+0

这完全是一个输入参数。谢谢,别人有同样的想法,它的工作!非常感激! – user869525 2012-02-27 19:51:51