链接到命名空间中的函数时出现GNU链接器错误

时间:2011-03-11 17:25:29

标签: c++ linker gnu

我正在尝试将我的应用与我创建的静态库相关联。虽然任何全局函数和类方法都没有问题,但链接到名称空间中声明的函数会产生错误“未定义引用[namespace] :: function”。这是一个例子:

包含文件包含:

void global_function (void);

namespace vm  
{  
void my_namespace_function (void);  
class some_class  
 {  
 static void my_class_function (void);  
 }  
};  

cpp文件包含:

using namespace vm;

int main ()  
{  
global_function();      // this is fine  
some_class::my_class_function();      // this is fine  
my_namespace_function();   // "undefined reference to vm::my_classless_function()"  
return 0;  
}  

是的,我确实检查了vm :: my_namespace_function()是否实际上在库中 谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

您需要在声明的相同名称空间中实现您的函数:

[file“namespace_func.cpp”]

#include    "namespace_func.h"
#include    <iostream>

void global_function( )
{
    std::cout << "global_function" << std::endl;
}

namespace vm
{
    void my_namespace_function( )
    {
        std::cout << "my_namespace_function" << std::endl;
    }

    void some_class::my_class_function( )
    {
        std::cout << "some_class::my_class_function" << std::endl;
    }
};

[file“namespace_func.h”]

#ifndef _NAMESPACE_FUNC_H
    #define _NAMESPACE_FUNC_H

void global_function( );

namespace vm
{
    void my_namespace_function( );
    class some_class
    {
    public:
        static void my_class_function( );
    };
};

#endif  // _NAMESPACE_FUNC_H

然后你可以链接到你的“namespace_main.cpp”:

#include    "namespace_func.h"

using namespace vm;

int main ( )
{
    global_function( );      // this is fine
    some_class::my_class_function( );      // this is fine
    my_namespace_function( );   // Fine. NO "undefined reference to vm::my_classless_function()"

    return 0;
}

命令行:

g++ -Wall namespace_main.cpp namespace_func.cpp -o namespace

输出结果为:

$ ./namespace 
global_function
some_class::my_class_function
my_namespace_function
  • 注意:您不需要声明您的函数接收“(void)”,如“C”中所示。请把它留空。

答案 1 :(得分:-1)

你如何得到

 "undefined reference to vm::my_classless_function()"

致电my_namespace_function();

你有没有检查过你对图书馆的期望?