gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:29:15 27 4
gpt4 key购买 nike

我正在尝试将我的应用程序与我创建的静态库相关联。尽管任何全局函数和类方法都可以毫无问题地链接,但链接到命名空间中声明的函数会产生错误“未定义对 [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”中那样声明接收“( void )”的函数。将其留空。

关于c++ - 链接到命名空间中的函数时出现 GNU 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5276200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com