class B: public A
{
public:
virtual const int& myMethod() const;
virtual int& myMethod();
};
Удалите A::
в определении B, и оно хорошо работает:)
РЕДАКТИРОВАТЬ: пропустил что-то в вопросе ...
::
используется для обозначения области. Вы используете его либо с пространствами имен, либо с классами, чтобы явно указать, где искать символ впоследствии.
Используется вместе с методами, это означает, что вы хотите точно определить, какие вызовы методов, например:
struct A { int getInt(); }
struct B: public A { int getInt(); }
B b;
b.A::getInt(); // calls A::getInt, not B::getInt
Это совершенно не в порядке для объявления метода, метод объявляется в области видимости и, естественно, принадлежит этой области:
namespace foo
{
int bar(); // full name is foo::bar
}
struct Foo
{
static int bar(); // full name is Foo::bar
};
Однако это полезно при обращении к режиму:
using foo::bar;
int a = bar(); // calls foo::bar because we asked the compiler
// to import it in the current scope
Или, как мы уже видели, для прямого вызова метода:
int B::getInt() // definition outside the class
// we need to specify what we define
{
return this->A::getInt() + 1; // call A::getInt, without precising it
// we would have a stack overflow
}
Надеюсь, это поможет.