"ik" <> wrote in message
news: oups.com...
> Hello All,
> I am facing a problem as follows.
>
> I have a header file called myNameSpace.h which as the following
> contents.
>
> //Header file .. myNameSpace.h
>
> namespace myNameSpace {
> static int iMyInt = 0;
This is dubious. If you include this header in more than one source file you
will get multiple variables. If you change the value of the variable in one
file you will not see the change in another file. Is that what you want? It
seems unlikely.
> };
>
> And my source file, as follows.
>
> // Source file myNameSpace.cpp
>
> #include "myNameSpace.h"
>
> myNameSpace::iMyInt = 0;
This is wrong, you have missed out the type (int).
>
> int main(int argc, char* argv[])
> {
> return 0;
> }
>
> This gives me a compiler error.. on MingW.
>
> D:/users/others/cpp_trials/SimplePrograms/myNameSpace.cpp:5: ISO C++
> forbids declaration of `iMyInt' with no type
> D:/users/others/cpp_trials/SimplePrograms/myNameSpace.cpp:5:
> redefinition
> of `int myNameSpace::iMyInt'
> D:/users/others/cpp_trials/SimplePrograms/myNameSpace.h:5: `int
> myNameSpace::iMyInt' previously defined here
>
> at the same time ..
>
> #include "myNameSpace.h"
>
> int main(int argc, char* argv[])
> {
> myNameSpace::iMyInt = 0;
> return 0;
> }
>
> This compiles..
Because it is an assignment not a declaration.
>
> I understand it is true for any variable declaration, at the global
> namespace. Once declared any other reinitalization, is taken as a
> re-definition.
I wouldn't know about that. I try to declare and initialise my variables
once only.
> I would like to know what is the correct explanation to this ?
> Any help will be appreciated.
> Thanks in Advance
> ~Ik
Here's what you should be doing (probably)
//Header file .. myNameSpace.h
namespace myNameSpace {
extern int iMyInt;
}
// Source file myNameSpace.cpp
#include "myNameSpace.h"
namespace myNameSpace {
int iMyInt = 0;
}
It's really just the same as global variables outside of a namespace.
john
|