GCC 編譯報錯:
Hello.h:17: error: extra qualification 'Hello::' on member 'hello'
class Hello {
// ...
void Hello::hello(); // 錯誤:類內聲明不得帶類名限定
// ...
};
在類定義內部聲明成員函數時,已隱式處於該類作用域,禁止使用 ClassName:: 限定符。這通常源於將類外定義語法(void Hello::hello() { ... })誤貼到類內聲明處。
class Hello {
// ...
void hello(); // 正確:僅函數名
// ...
};
// 類外定義時才加限定
void Hello::hello() {
// 實現
}
C++ 標準 (ISO/IEC 14882) 明確規定:類成員聲明中不得出現 nested-name-specifier(即 ClassName::)。MSVC 可能僅給出警告,GCC/Clang 則報硬錯。