2

匿名インスタンスの作成で以前に宣言された変数を使用すると、g++ で再宣言エラーが発生します。

「weird.cpp」ソース ファイルに次のコードがあります。

#include <iostream>

int main()
{
  int i = 0;
  int j = int ( i );
  int ( i );
}

私が得ているエラーは、

weird.cpp: In function ‘int main()’:
weird.cpp:7: error: redeclaration of ‘int i’
weird.cpp:5: error: ‘int i’ previously declared here

私は、それぞれバージョン 4.2 と 4.7 の mac と linux でこれを試しました。int の代わりに他の型も試しました。結果は同じエラーです。誰でもこの問題を理解するのを手伝ってもらえますか? ありがとう。

4

2 に答える 2

2

まず、ここで使用している括弧は何もしません。

int i = 0;
int j = int(i); // This is casting i to an int. It's already an int.
int j = i; // This does the same as the last line.
int (i); // This is redeclaring an int named i, which had already been done.
int i; // This is the same as the last line.

コンストラクターでを受け入れるオブジェクトについてあなたが言っていることはint意味がありません。

struct A { A(int) {} };
int i;
A obj(i); // A instance named obj which takes integer i as constructor argument.

ここで何を達成しようとしているのか、よくわかりません。おそらくこれですか?

int i = 0;
int j = i;
{
    int i; // In another scope, shadowing the first i for scope duration.
}
于 2013-09-26T04:43:35.920 に答える