Правилен ли следующий подход? Ну, я получаю ошибку компиляции.включает внутри пространства имен
a.hpp является
#include <iostream>
class a
{
public:
void classa_f();
};
a.cpp является
#include "a.hpp"
void a::classa_f()
{
std::cout<< "a::classa_f\n";
}
main.cpp
#include <iostream>
namespace myname {
#include "a.hpp"
}
int main()
{
myname::a obj;
obj.classa_f();
return 0;
}
Я получаю следующую ошибку
г ++ main.cpp ао /tmp/ccOO f5s7.o: В функции main': main.cpp:(.text+0x11): undefined reference to
MyName :: A :: classa_f()» collect2: л.д. возвращается 1 выход статус
Ну мой вопрос, можно ли иметь только включает в пространстве имен, но не фактическая реализация , потому что я вижу, что компилятор ищет пространство имен для определения функции. На самом деле это не так.
Почему вы включаете его в пространство имен? – GManNickG
Решения, предлагаемые в ответах, конечно, правильны, но если вы хотите придерживаться своего подхода, тогда вы должны определить 'a :: classa_f()', присвоив ему имя пространства имен, то есть 'void myname :: a :: classa_f() {/ ...} ' –