2010-12-08 6 views
1

Я уверен, что это ошибка в VS 2010, но это всегда хорошая идея, чтобы проверить на SOИмя поиска ошибка в VS2010

struct A{ 
    static int s; 
}; 

struct B{ 
    static int s; 
}; 

struct C : A, B{ 
    void fn(short s){ // Ambiguous access of 's' here!!! 
     s = 2;    
    } 
}; 

int A::s; 
int B::s; 

int main(){ 
    C c; 
} 

VS gives- «ошибка C2385: неоднозначный доступ„с“ ».

g ++ and Comeau компилировать в порядке.

Я что-то упустил?

+1

MSVC++ 2008 (Professional Edition) и 2010 компилируются тоже. Проверено на MSVC++ 2010 Ultimate – 2010-12-08 05:14:34

+0

@Prasoon Saurav: Мой VS2010 (Express Edition :) дает ошибку. – Chubsdad 2010-12-08 05:17:13

ответ

2

Visual C++ обеспокоен проблемой алмаза - член экземпляра, названный «s», неоднозначен из-за алмазного наследования. Но здесь он должен быть затенен локальным параметром с именем «s», поэтому в этом коде нет ничего противозаконного. Он должен компилироваться чисто, если у вас нет чего-то странного в вашей среде, чтобы заставить Visual C++ жаловаться на имена теневых переменных.