我正在尝试将我的应用与我创建的静态库相关联。虽然任何全局函数和类方法都没有问题,但链接到名称空间中声明的函数会产生错误“未定义引用[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()是否实际上在库中 谢谢你的帮助。
答案 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
答案 1 :(得分:-1)
你如何得到
"undefined reference to vm::my_classless_function()"
致电my_namespace_function();
?
你有没有检查过你对图书馆的期望?