问题描述
这困扰了我一段时间.我有一个名称空间,在该名称空间中我想声明C样式的函数.所以我做了我认为正确的事情:
This has been bothering me for awhile. I have a namespace, and in that namespace I want to declare C-style functions. So I did what I thought was right:
namespace test
{
std::deque<unsigned> CSV_TO_DEQUE(const char* data);
std::deque<unsigned> ZLIB64_TO_DEQUE(const char* data, int width, int height);
std::string BASE64_DECODE(std::string const& encoded_string);
}
然后输入实现文件:
#include "theheaderfile.hpp"
using namespace test;
std::deque<unsigned> CSV_TO_DEQUE(const char* data)
{
...
}
std::deque<unsigned> ZLIB64_TO_DEQUE(const char* data, int width, int height)
{
...
}
std::string BASE64_DECODE(std::string const& encoded_string)
{
...
}
但是,当尝试实际调用函数时,出现未定义的引用错误.该文件链接,所以我不确定为什么未定义引用.
However, when trying to actually call the functions, I get an undefined reference error. The file links, so I'm not sure why the references are undefined.
我还应该补充一点,如果我从 test
命名空间中取出这些函数并将它们保留在全局命名空间中,那么它们将毫无障碍地工作.
I should also add that if I take the functions out of the test
namespace and leave them in the global namespace, they work without a hitch.
我想避免在标头中定义函数.这可能吗?
I want to avoid defining the functions within the header. Is this possible?
推荐答案
使用名称空间
将仅导入要使用的名称空间-不允许您在该名称空间中定义函数.
using namespace
will only import the namespace for use - it won't let you define the functions in that namespace.
您仍然需要在测试名称空间中定义函数:
You still need to define the functions inside the test namespace:
namespace test {
// your functions
};
这篇关于C ++对命名空间中函数的未定义引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!