GNiewerth
May 8th, 2008, 05:45 AM
Hi everyone,
Iīve got some namespace problems I donīt really understand. Iīve got a header and an implementation file where three functions reside.
test.h
#ifndef TestH
#define TestH
namespace A {
namespace B {
namespace C {
int get_x();
int get_y();
int get_z();
};
};
};
#endif
test.cpp, working version
#include "test.h"
int A::B::C::get_x()
{
return 0;
}
int A::B::C::get_y()
{
return get_x() +1;
}
int A::B::C::get_z()
{
return get_y() +2;
}
test.cpp version 2, not working.
#include "test.h"
using namespace A::B::C;
int get_x()
{
return 0;
}
int get_y()
{
return get_x() +1;
}
int get_z()
{
return get_y() +2;
}
Hereīs the calling code
#include "test.h"
int main()
{
int x = A::B::C::get_x();
int y = A::B::C::get_y();
int z = A::B::C::get_y();
}
My compiler (Borland C++ Builder 6) yields two error messages:
(1) ambiguity between A::B::C::get_x() and get_x()
(2) ambiguity between A::B::C::get_y() and get_y()
Now I have a couple of questions:
1) There are no functions get_x() and get_y() in the global namespace, so why is there an ambiguity?
2) Do I have to fully qualify the function name in my implementation file or does something exists that saves me from the extra typing?
Iīve got some namespace problems I donīt really understand. Iīve got a header and an implementation file where three functions reside.
test.h
#ifndef TestH
#define TestH
namespace A {
namespace B {
namespace C {
int get_x();
int get_y();
int get_z();
};
};
};
#endif
test.cpp, working version
#include "test.h"
int A::B::C::get_x()
{
return 0;
}
int A::B::C::get_y()
{
return get_x() +1;
}
int A::B::C::get_z()
{
return get_y() +2;
}
test.cpp version 2, not working.
#include "test.h"
using namespace A::B::C;
int get_x()
{
return 0;
}
int get_y()
{
return get_x() +1;
}
int get_z()
{
return get_y() +2;
}
Hereīs the calling code
#include "test.h"
int main()
{
int x = A::B::C::get_x();
int y = A::B::C::get_y();
int z = A::B::C::get_y();
}
My compiler (Borland C++ Builder 6) yields two error messages:
(1) ambiguity between A::B::C::get_x() and get_x()
(2) ambiguity between A::B::C::get_y() and get_y()
Now I have a couple of questions:
1) There are no functions get_x() and get_y() in the global namespace, so why is there an ambiguity?
2) Do I have to fully qualify the function name in my implementation file or does something exists that saves me from the extra typing?