R
Rubén Campos
Organizing classes, types, structures, enums and whatever other entities
into nested namespaces requires to include into every header and
implementation file the complete path of namespaces. Let me show an example:
classes.hpp classes.cpp util.hpp util.cpp main.cpp
// classes.hpp
namespace Classes
{
class MyBaseClass
{
public:
virtual void Print ( ) = 0;
};
class MyDerivedClass
{
public:
virtual void Print ( );
};
}
// classes.cpp
#include "classes.h"
#include <iostream>
using std::cout;
using std::endl;
namespace Classes
{
void MyDerivedClass:rint ( ) { cout << "MyDerivedClass:rint()" <<
endl; }
}
// util.hpp
namespace Util
{
#include "classes.h"
using Classes::MyBaseClass;
using Classes::MyDerivedClass;
class MyUtilClass : public MyBaseClass
{
public:
void Print ( );
};
}
// util.cpp
#include "util.h"
#include <iostream>
using std::cout;
using std::endl;
namespace Util
{
void MyUtilClass:rint () { cout << "MyUtilClass:rint()" << endl; }
}
// main.cpp
#include "util.h"
int main (int argn, char ** argv)
{
Util::MyDerivedClass object;
object.Print();
return 0;
}
Linker returns an unresolved external: "virtual void
Util::Classes::MyDerivedClass:rint(void)". The reason is that Util
namespace includes MyDerivedClass declaration, but not its definition. ¿Is
there any way to include only the last namespace, while keeping namespace
nested? Thank you very much in advance.
into nested namespaces requires to include into every header and
implementation file the complete path of namespaces. Let me show an example:
classes.hpp classes.cpp util.hpp util.cpp main.cpp
// classes.hpp
namespace Classes
{
class MyBaseClass
{
public:
virtual void Print ( ) = 0;
};
class MyDerivedClass
{
public:
virtual void Print ( );
};
}
// classes.cpp
#include "classes.h"
#include <iostream>
using std::cout;
using std::endl;
namespace Classes
{
void MyDerivedClass:rint ( ) { cout << "MyDerivedClass:rint()" <<
endl; }
}
// util.hpp
namespace Util
{
#include "classes.h"
using Classes::MyBaseClass;
using Classes::MyDerivedClass;
class MyUtilClass : public MyBaseClass
{
public:
void Print ( );
};
}
// util.cpp
#include "util.h"
#include <iostream>
using std::cout;
using std::endl;
namespace Util
{
void MyUtilClass:rint () { cout << "MyUtilClass:rint()" << endl; }
}
// main.cpp
#include "util.h"
int main (int argn, char ** argv)
{
Util::MyDerivedClass object;
object.Print();
return 0;
}
Linker returns an unresolved external: "virtual void
Util::Classes::MyDerivedClass:rint(void)". The reason is that Util
namespace includes MyDerivedClass declaration, but not its definition. ¿Is
there any way to include only the last namespace, while keeping namespace
nested? Thank you very much in advance.