My question about the Scope Resolution Operator (::) is why do we use it in a CPP file to define the methods of a class? I'm more so asking about the SRO itself, rather than the relationship between CPP and Header files.
When you define a class:
struct foo {
void bar() {}
};
Then the full name of bar
is ::foo::bar
. The leading ::
to refer to the global namespace can often be omitted. There is no bar
in the global namespace, hence bar
alone (or ::bar
) does not name an entity and when you define the method out of line you need to tell what bar
you mean:
struct foo {
void bar();
};
struct baz {
void bar();
};
void bar() {} // this defines a completely unrelated free function called bar
void foo::bar() {} // defines foo::bar
void baz::bar() {} // defines baz::bar
You need the scope resolution operator to state which method you want to define.
For more details I refer you to https://en.cppreference.com/w/cpp/language/lookup