У меня есть заголовочный файл С++, содержащий класс. Я хочу использовать этот класс в нескольких проектах, но я не хочу создавать для него отдельную библиотеку, поэтому я помещаю в заголовочный файл оба метода деклараций и определений:
// 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
Если внутри одного и того же проекта я включаю этот заголовок из более чем одного файла cpp, я получаю сообщение об ошибке "multiple definition of test_ns::TestClass::testMethod()
", а если я поместил определение метода внутри тела класса, это не произойдет:
// example.h
#ifndef EXAMPLE_H_
#define EXAMPLE_H_
namespace test_ns{
class TestClass{
public:
void testMethod(){
// some code here...
}
};
} // end namespace test_ns
#endif
Так как класс определен внутри пространства имен, не должны ли эти две формы быть эквивалентными? Почему в первом случае метод считается дважды определенным?