7

私はC++で自分自身をリフレッシュしていて(学校以来そうしていません)、混乱させるためだけに簡単なプログラムを作成しました。私の問題は、プログラムをコンパイルすると、「エラー:'stringThing'の前に初期化子が必要です」と表示されてチョークすることです。これがこれを行う理由はありますか?私はこれが初心者の質問かもしれないことを知っているので、stackoverflowをチェックしましたが、答えを与える関連する質問は見つかりませんでした。

*私はGNUGCCコンパイラを使用しています

コード:

#include <iostream>

using namespace std;

void string stringThing (string shiftdir, string &teststring)
    {
        if (shiftdir == "right")
        {
           teststring = teststring >> " " >> "Bit Shifted right";
        }
        else
        {
           teststring = teststring << " " << "Bit Shifted left";
        }
    }
int main()
{

    string test;

    cout << stringThing("right", "I have done a ") << endl;

    return 0;
}
4

2 に答える 2

5

の戻りタイプは、両方ではなく、またはstringThingのいずれかである必要があります。文字列を使用する場合は、も含める必要があります。void string<string>

stringThing()の戻り値を出力したいのでmain

std::string stringThing (std::string shiftdir, const std::string &teststring)

ただし、関数から文字列を返す必要もあります

if (shiftdir == "right")
    return teststring + " " + "Bit Shifted right";
else
    return teststring + " " + "Bit Shifted left";

例えば。

あなたのパラメータstd::string &teststringはあなたの引数では機能しませんconst char*stringしたがって、値のみによるコピーとして宣言するか、より適切に宣言しますconst string&

于 2013-01-14T15:59:59.933 に答える
4

リターンタイプは…ファンキー

とは:

void string stringThing (string shiftdir, string &teststring)

最初のを取り除きstringます。関数は何も返しません。

だから、簡単に:

void stringThing(string shiftdir, string &teststring)

包含がありません

また、次のことも行う必要があり#include <string>ます。シナリオによっては、「幸運」になり、暗黙的にに含まれる<iostream>場合がありますが、それに依存しないでください。

于 2013-01-14T15:58:49.540 に答える