c++ - 在 C++ 中实现没有类的命名空间

标签 c++ namespaces

应该是一个简单的问题,但我现在正在努力将一些辅助函数包装在命名空间中一个小时。
由于我需要不需要在类中的辅助函数,我建议将它们包装到命名空间中,而不是将它们全部设为静态。另见此处:http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines

问题是,无论我做什么,都会遇到不同的错误。那么在不创建类的情况下使用自己的命名空间编写函数的正确方法是什么?让我们以下面的例子为例。我已经尝试过它的不同变体。

我的头文件:

#ifndef BINARYCONVERTER_HPP
#define BINARYCONVERTER_HPP

#include <iostream>

namespace binary_converter {
    int myFunction(void);
}

#endif

还有我的源文件:
#include "binary_converter.hpp"

int myFunction(void) {
    return true;
}

谢谢!

最佳答案

正如C++中所说的docs :

Symbols declared inside a namespace block are placed in a named scope that prevents them from being mistaken for identically-named symbols in other scopes.



记住这个功能 myFunction来自您的头文件和功能 myFunction来自您的源文件不属于同一命名空间。来自头文件的函数是 binary_converter 的一部分命名空间而源文件中的函数是全局命名空间的一部分。

因此,您需要包装您的功能

int myFunction() {
    return 0;
}

从源文件变成binary_converter命名空间是这样的:

namespace binary_converter {
    int myFunction() {
        return 0;
    }
}

或使用作用域运算符来注意 myFunction属于binary_converter命名空间是这样的:

int binary_converter::myFunction() {
    return 0;
}

关于c++ - 在 C++ 中实现没有类的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60193217/

相关文章:

c++ - 在 UNICODE 应用程序的 catch block 内将 char * 转换为 CString

c++ - 将 int 转换为 char 数组的最佳方法

c++ - || 的逻辑错误运算符(operator)?

Java 应用程序和 C++ 应用程序集成/通信

c# - EF4 Poco 问题映射类型相同的名称相同的程序集不同的命名空间

PHP 问题 - Codeigniter

c++ - 命名空间包含会增加exe的大小吗

c++ - 如何将音频添加到使用 SinkWriter 创建的 mp4 文件?

vb.net - 使用 vb.net,如何使用没有命名空间的类?

c# - 如何在 C# 中定义 "anonymous namespace"?