Использование компилятора VC71 и получение ошибок компилятора, которых я не понимаю. Вот пример
class A
{
public:
virtual int& myMethod() = 0;
virtual const int& myMethod()const = 0;
};
class B: public A
{
public:
// generates: error C3241: 'const int &B::myMethod(void)' : this method was not introduced by 'A'
virtual int& A::myMethod();
// error C2555: 'B::myMethod': overriding virtual function return type differs and is not covariant from 'A::myMethod'
virtual const int& A::myMethod() const;
};
когда я переключаю порядок определения обоих методов в B, я вижу другую ошибку компилятора:
class B: public A
{
public:
// error C3241: 'const int &B::myMethod(void)' : this method was not introduced by 'A'
virtual const int& A::myMethod() const;
// error C2556: 'int &B::myMethod(void)' : overloaded function differs only by return type from 'const int &B::myMethod(void)'
// error C2373: 'B::myMethod' : redefinition; different type modifiers
virtual int& A::myMethod();
// error C2555: 'B::myMethod': overriding virtual function return type differs and is not covariant from 'A::myMethod'
};
однако, если я опущу материал A::
, я не получу ошибок компилятора:
class B: public A
{
public:
virtual int& myMethod();
virtual const int& myMethod() const;
};
Итак, что именно означает A::
перед именами моих методов и почему я вижу эти разнообразные ошибки компилятора? Любое объяснение приветствуется!
A::
материалом вB
. - person Stefan Hubert   schedule 07.04.2010