質問

私はC ++

に次のコードをコンパイルしようとしています
string initialDecision () 
{
 char decisionReviewUpdate;

 cout << "Welcome. Type R to review, then press enter." << endl;
 cin >> decisionReviewUpdate;

 // Processing code
}

int main()
{
    string initialDecision;
    initialDecision=initialDecision();

    //ERROR OCCURS HERE

 // More processing code
 return 0;
}
それは「エラーがここで発生した」と言うところコンパイル中に

右、私は次のエラーを取得する:「エラー:? 『(STD ::文字列)()』への呼び出しなしマッチどのように私は

これを解決することができます
役に立ちましたか?

解決

あなたの文字列とあなたの関数に同じ名前を与えてはいけない、とエラーが消えます。

同じ名前のローカル変数を宣言するときに、コンパイラは、その名前の関数があることを「忘れて」います。

他のヒント

ローカル変数は、グローバル関数の名前をシャドウ。これは、ローカル変数の名前を変更するのが最善ですが、特にグローバル名にアクセスすることができますスコープ演算子もあります:

initialDecision = ::initialDecision();

これは、C ++での「名前の隠蔽」と呼ばれています。この特定の例では、名前空間スコープ内の関数と同じ名前を持つローカル変数を、宣言しています。その変数の宣言のポイント後の機能は、の隠されたのとなり、あなたが言及するたびに「initialDecision」の名前は、コンパイラは、当然、あなたが変数を参照していることを前提としています。あなたは「文字列」タイプの変数に関数呼び出し演算子を「()」適用することはできませんので、コンパイラはエラーメッセージを発行します。

あなたはスコープ解決演算子「::」を使用することができます隠された名前を参照するために、多くの場合。例えば、UncleBens応答を参照してください。

関数の名前と一致しないために、変数の名前を変更してみます。

問題は、変数と関数の両方として名initialDecisionを繰り返しているです。これは非常にコンパイラを混乱させる。何か他のものに変数の名前を変更してみてください。それは、その後、動作します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top