以下方法是否正确?好吧,我得到一个编译错误。
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;
}
我收到以下错误
g ++ main.cpp a.o
/tmp/ccOOf5s7.o:在函数main':
main.cpp:(.text+0x11): undefined reference to
myname :: a :: classa_f()'中
collect2:ld返回1退出状态
我的问题是,是否有可能只包含命名空间下的包含而不是实际的实现,因为我可以看到编译器正在搜索命名空间以找到函数的定义。实际上并不存在。
答案 0 :(得分:2)
namespace myname {
#include "a.hpp"
}
声明一个类方法myname::a::classa_f
,它显然不存在于您的程序中。它无效。
答案 1 :(得分:0)
在实施中,您必须
namespace myname
{
void a::classa_f()
{
std::cout<< "a::classa_f\n";
}
}
并且请从hpp文件中删除#include <iostream>
,它也会被导入到命名空间中。