作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将我的应用程序与我创建的静态库相关联。尽管任何全局函数和类方法都可以毫无问题地链接,但链接到命名空间中声明的函数会产生错误“未定义对 [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() 是否真的在库中。
感谢您的帮助。
最佳答案
您需要在声明的同一命名空间中实现您的函数:
[文件“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;
}
};
[文件“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
关于c++ - 链接到命名空间中的函数时出现 GNU 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5276200/
我正在开发一个 voip 调用应用程序。我需要做的是在接到来电时将 Activity 带到前台。我在应用程序中使用 Twilio,并在收到推送消息时开始调用。 问题是我试图在接到任何电话时显示 Act
我是一名优秀的程序员,十分优秀!