3

这一直困扰着我一段时间。我有一个命名空间,我想在该命名空间中声明 C 风格的函数。所以我做了我认为正确的事情:

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)
{
     ...
}

但是,当尝试实际调用这些函数时,我得到一个未定义的引用错误。文件链接,所以我不确定为什么引用未定义。

我还应该补充一点,如果我将函数从test命名空间中取出并将它们留在全局命名空间中,它们将毫无障碍地工作。

我想避免在标题中定义函数。这可能吗?

4

2 回答 2

11

using namespace只会导入命名空间以供使用 - 它不会让您在该命名空间中定义函数。

您仍然需要在 test 命名空间中定义函数:

namespace test {
    // your functions
};
于 2013-04-03T12:48:47.570 回答
5

像这样定义它:

std::deque<unsigned> test::CSV_TO_DEQUE(const char* data)
{
     ...
}

否则这只是全局命名空间中的一个新函数

于 2013-04-03T12:49:53.300 回答