3

「左」と「右」があいまいであるというコンパイルエラーが発生します。

間違った場所で左、右を宣言しましたか?

  • メイン内で宣言しても役に立ちません
  • 関数定義をメインの上に移動しても役に立ちません

これをどのように修正しますか?

最小テストケース:

#include <iostream>
using namespace std;
int left = 0, right = 0;
int main()
{
    cout << left;
    cout << right;
}

あげてるよ:

prog.cpp: In function ‘int main()’:
prog.cpp:6:13: error: reference to ‘left’ is ambiguous
prog.cpp:3:5: error: candidates are: int left
In file included from /usr/include/c++/4.7/ios:43:0,
                 from /usr/include/c++/4.7/ostream:40,
                 from /usr/include/c++/4.7/iostream:40,
                 from prog.cpp:1:
/usr/include/c++/4.7/bits/ios_base.h:918:3: error:
             std::ios_base& std::left(std::ios_base&)
prog.cpp:7:13: error: reference to ‘right’ is ambiguous
prog.cpp:3:15: error: candidates are: int right
In file included from /usr/include/c++/4.7/ios:43:0,
                 from /usr/include/c++/4.7/ostream:40,
                 from /usr/include/c++/4.7/iostream:40,
                 from prog.cpp:1:
/usr/include/c++/4.7/bits/ios_base.h:926:3: error:
             std::ios_base& std::right(std::ios_base&)
4

1 に答える 1

6

エラー メッセージを確認します。

raw.cpp:105: error: reference to ‘right’ is ambiguous
raw.cpp:5: error: candidates are: int right
/usr/include/c++/4.2.1/bits/ios_base.h:917: error:
   std::ios_base& std::right(std::ios_base&)

読むのは怖いですが、基本的には次のように書かれています。

raw.cpp:105: error: There's more than one ‘right’ here
One of them is yours: raw.cpp:5  int right
Another one isn't: <bits/ios_base.h:917>: some crap in namespace ‘std’

したがってleft、 とrightは で既に定義されておりnamespace std、 ですべてをインポートしていますusing namespace std。それがあなたが曖昧さを持っている理由です。これを修正するための最も簡単な変更は、削除using namespace std;して追加することですusing std::cin; using std::cout;が、これは私の好みではグローバル変数が多すぎるように見えます。

ところで、コードを質問に組み込む必要があります。質問はそのペーストよりも長くここにある可能性があり、誰も質問全体を見ることができない場合、私の答えは意味がありません.

于 2013-03-20T06:26:55.887 に答える