質問
私は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を繰り返しているです。これは非常にコンパイラを混乱させる。何か他のものに変数の名前を変更してみてください。それは、その後、動作します。
所属していません StackOverflow