包含在命名空间内

时间:2010-09-18 20:50:04

标签: c++ namespaces

以下方法是否正确?好吧,我得到一个编译错误。

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退出状态

我的问题是,是否有可能只包含命名空间下的包含而不是实际的实现,因为我可以看到编译器正在搜索命名空间以找到函数的定义。实际上并不存在。

2 个答案:

答案 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>,它也会被导入到命名空间中。