Tengo un archivo de encabezado C++ que contiene una clase. Quiero usar esta clase en varios proyectos, bu no quiero crear una biblioteca independiente para él, así que estoy poniendo ambas declaraciones métodos y definiciones en el archivo de cabecera:error de definición múltiple incluyendo archivo de encabezado C++ con código en línea de varias fuentes
// example.h
#ifndef EXAMPLE_H_
#define EXAMPLE_H_
namespace test_ns{
class TestClass{
public:
void testMethod();
};
void TestClass::testMethod(){
// some code here...
}
} // end namespace test_ns
#endif
Si dentro de la mismo proyecto incluyo esta cabecera de más de un archivo CPP, me sale un error que dice "multiple definition of test_ns::TestClass::testMethod()
", mientras que si pongo la definición del método dentro del cuerpo de la clase esto no sucede:
// example.h
#ifndef EXAMPLE_H_
#define EXAMPLE_H_
namespace test_ns{
class TestClass{
public:
void testMethod(){
// some code here...
}
};
} // end namespace test_ns
#endif
Dado que se define la clase dentro de un espacio de nombres, ¿no deberían las dos formas ser equivalentes? ¿Por qué se considera que el método se definió dos veces en el primer caso?
Gracias por señalar esto ... Había olvidado los guardias de inclusión en el ejemplo (pero no en el código real). –