Re: Should .H files contain all/none method implementations -- but not some?
On Apr 23, 11:33 pm, Saqib Ali <saqib.ali...@gmail.com> wrote:
This is a really simple/newbie type question.
There is no problem with it. We are here to help.
I am having a problem linking together various C++ object files
because of a multiply defined symbol. The symbol myFunc is a function
that is implemented in only one place (a header file a.H), but that
header file is then included in other .C files. When those .C files
are compiled and linked together, I get an error.
Simply use a #ifndef safeguard. For example:
//file a.H
#ifndef MY_FILE_A_H
#define MY_FILE_A_H
class a
{
public:
a();
~a();
void myFunc();
};
void a::myFunc()
{
}
#endif
Now you can include a.H wherever you wish.
Those preprocessor directives are simple to understand. If the macro
MY_FILE_A_H is defined, nothing in the file will be inculded,
otherwise the macro is then defined and the file is included.
This is far from perfect, but is the solution applied by every C/C++
programmer. I wonder why didn't c++0x addressed this issue.
Is my "all or nothing" theory about implementing class methods in a
header file valid?
Nope. It would make compilation a nightmare for larger projects, since
everything would be recompiled every time a single bit of the code
were modified. Compiling/linking in a single step is not an option for
big projects. And what about precompiled libraries?
Hope that helps,
Elias Salom?o Helou Neto
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]