2

ネイティブC++タイプとQtタイプの両方をサポートするコードがあります。たとえば、「同等」の「」と「」がありますstringQString

私には2つの関数があります。1つはstring'sを取り、もう1つは'sを取りQStringます。QStringバージョンはパラメータを'sに変換してから、関数のバージョンをstring呼び出し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!";

    ...
}

したがって、このコードはコンパイルされて実行されます...ただし、2番目のパラメーターを呼び出すとLoadQString()、2番目のパラメーターが返されると空QStringになります。コメント行でstring& ret = ...、参照を機能させようとした場所を確認できます。電話LoadString()して戻ってきたときの値を確認すると、toReturn「helloworld!」になります。予想通り。

LoadQString()を正しく動作させようとしているだけです。

ご協力ありがとうございます!

4

3 に答える 3

3

バージョン呼び出しの後にstd::string変換する必要がありますQStringstd::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;
}
于 2012-02-27T19:42:47.827 に答える
0

LoadStringではなくを呼び出し、呼び出した後にLoadXMLAttributeに代入retし、返されたを返す必要があります。toReturnintLoadString

于 2012-02-27T19:42:20.213 に答える
0

まず、toStdString は std::string オブジェクトを一時的に作成します。したがって、当然、そこから参照を取得することはできません。結果を値に格納するか、const 参照を介してその寿命を延ばす必要があります。

ただし、あなたがしていることについては、toReturnが厳密に出力パラメーターであり、 LoadString が実際の作業を実行すると仮定します。

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;
}

IftoReturnは厳密には出力パラメーターではなく、入力パラメーターでもあります (かなり混乱を招く設計手法であるため、これは避けることをお勧めします)。

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 に変換します。

于 2012-02-27T19:48:58.583 に答える