2

Visual Studio (2010) でコードをコンパイルしようとしたときに奇妙な問題が発生しました。以下は、分離された (単純化された) 例です。

class A
{
public:
  enum {
    VALUE   = 0
  };
};

namespace ns
{

class A;

class B
{
public:
  B(int val = ::A::VALUE) // this line
  {}
};

class A : public ::A
{
public:
};

}

これにより、次のエラーが発生しますerror C2027: use of undefined type 'ns::A'。VSのバグですか、それとも何か間違っていますか?

更新:これは Visual Studio 固有のバグのようです。Microsoft Connect で提案されている回避策を次に示します。

class B
{
public:
  typedef ::A A1;
  B(int val = A1::VALUE)
  {}
};
4

1 に答える 1

1

これは VC10 のバグです。クラス::A名は完全修飾Aされており、グローバル名前空間内の の定義がコンパイラに表示されます。その上、GCC 4.7.2 はこれを問題なくコンパイルします。

于 2013-05-06T19:16:06.170 に答える