Geoff Chappell - Software Analyst
'symbol' : 'specifier' storage-class specifier illegal on member definition
This is a level 1 warning if the Microsoft language extensions are enabled (as by /Ze, which is the default). Otherwise, it is not a warning but an error (C2720).
The specifier is necessarily extern. The symbol is a member function whose definition outside its class has the extern storage-class specifier.
In the following declaration of func as a member function of class Test, the extern is an error (C2720) whether Microsoft’s language extensions are enabled or not:
class Test { extern void func (void); // C2720 }
Under /Za, it is also the same error to apply extern if defining func outside the class:
class Test { void func (void); }; extern void Test :: func (void) { // C2720 if /Za or C4630 if /Ze }
but if compiled with /Ze, the otherwise troublesome extern is discarded, with warning C4630.