c ++ и внедренное базовое имя

Следующий код не компилируется в gcc:

namespace One{
   class A{
   };
};

namespace Two{
   class A{
      public:
         void what(){
            cout << "Two::A says what!" << endl;
         }
   };

   class B : public One::A{
      public:
         B(){
            A xx;
            xx.what();
         }
   };

};

И он дает:

gccbug.cpp: In constructor ‘Two::B::B()’:
gccbug.cpp:23: error: ‘class One::A’ has no member named ‘what’

Теперь мне сказали, что это правильное поведение (из-за введенного базового имени One :: A, создающего A обратитесь к One :: A). Однако этот код компилируется на C # (ну, после некоторых изменений), так что, похоже, он специфичен для C ++.

Мне интересно ... почему? Есть ли какая-то конкретная цель для вставки базового имени «One :: A» как «A»?

6
задан kamziro 26 February 2012 в 11:34
поделиться