[Significantly edited] First: It's generally a bad idea to include a `.cpp` file in another file - it leads to problems like this :-) The normal way is to create separate compilation units, and add a header file for the included file. Secondly: C++ has some confusing terminology here - I didn't know about it until pointed out in comments. a) `static functions` - inherited from C, and what you are talking about here. Outside any class. A static **function** means that it isn't visible outside the current compilation unit - so in your case a.obj has a copy and your other code has an independent copy. (Bloating the final executable with multiple copies of the code). b) [`static member function`][1] - what OO terms a static **method**. Lives inside a class. You call this with the class rather than through an object instance. These two different static function definitions are completed different. Be careful - here be dragons. [1]: http://www.research.att.com/~bs/glossary.html#Gstatic-member-function