在该命名空间中的另一个函数内转发声明该命名空间中的函数

2024-01-16

我有两个源文件,a.cpp and b.cpp. In a.cpp,我有一个函数,foo:

namespace ns { void foo() { std::cout << "foo!"; } }

In b.cpp,我在命名空间中有另一个函数ns我想在其中制作原型并调用foo:

namespace ns
{

void bar()
{
    void foo();
    foo();       
}

}

虽然上面的内容在语法上是有效的,但它会导致编译器认为foo位于全局命名空间中(或者至少这是我从执行此操作时收到的链接器错误中推断出的)。我解决这个问题的前两个想法是void ns::foo(); and namespace ns { void foo(); },但两者都无效。是否可以在内部正确构建此函数的原型bar?

请注意,我知道我可以简单地将其移动到文件范围或头文件中,对此有很多问题,但我想在另一个函数中专门对其进行原型设计。我的编译器是最新更新的 MSVC 14.0。

EDIT:根据我所做的一些测试以及我们在评论中的讨论,我相信这是一个 MSVC 错误。比较:

namespace ns
{

void bar()
{
    void foo();   // link error, MSVC assumes global namespace
    foo();
}

void foo() { }

} // namespace ns

如前所述,这会失败。但是,将原型移出函数可以使 MSVC 正确地将原型函数放置在封闭的命名空间中:

namespace ns
{

void foo();   // all fine
void bar()
{
    foo();
}

void foo() { }

} // namespace ns

标准对这一点说得很清楚:

3.3.2/11:(..) 块作用域中的函数声明和块作用域中带有 extern 说明符的变量声明refer to声明是封闭命名空间的成员 (...)

最后:

void bar()
{
    void foo();   // should refer to ns::foo() according to 3.3.2/11
    foo();
}

并且链接应该引用具有相同签名的单独编译的函数:

1.3.17签名: <function>名称、参数类型列表和封闭的命名空间(如果有)[注意:签名用作 名称修改和链接。-尾注]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在该命名空间中的另一个函数内转发声明该命名空间中的函数 的相关文章

  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 在 OpenCL 中将函数作为参数传递

    是否可以在 OpenCL 1 2 中将函数指针传递给内核 我知道可以用C实现 但不知道如何在OpenCL的C中实现 编辑 我想做这篇文章中描述的同样的事情 在 C 中如何将函数作为参数传递 https stackoverflow com q
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • std::map 和二叉搜索树

    我读过 std map 是使用二叉搜索树数据结构实现的 BST 是一种顺序数据结构 类似于数组中的元素 它将元素存储在 BST 节点中并按其顺序维护元素 例如如果元素小于节点 则将其存储在节点的左侧 如果元素大于节点 则将其存储在节点的右侧
  • 调试内存不足异常

    在修复我制作的小型 ASP NET C Web 应用程序的错误时 我遇到了 OutOfMemoryException 没有关于在哪里查看的提示 因为这是一个编译时错误 如何诊断此异常 我假设这正是内存分析发挥作用的地方 有小费吗 Thank
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 获取从属性构造函数内部应用到哪个属性的成员?

    我有一个自定义属性 在自定义属性的构造函数内 我想将属性的属性值设置为属性所应用到的属性的类型 是否有某种方式可以访问该属性所应用到的成员从我的属性类内部 可以从 NET 4 5 using CallerMemberName Somethi
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • std::bind 重载解析

    下面的代码工作正常 include
  • 如何检测 C# 中该字典键是否存在?

    我正在使用 Exchange Web 服务托管 API 和联系人数据 我有以下代码 即功能性的 但并不理想 foreach Contact c in contactList string openItemUrl https service
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 从类模板参数为 asm 生成唯一的字符串文字

    我有一个非常特殊的情况 我需要为类模板中声明的变量生成唯一的汇编程序名称 我需要该名称对于类模板的每个实例都是唯一的 并且我需要将其传递给asm关键字 see here https gcc gnu org onlinedocs gcc 12
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS
  • 如何使用 std::array 模拟 C 数组初始化“int arr[] = { e1, e2, e3, ... }”行为?

    注意 这个问题是关于不必指定元素数量并且仍然允许直接初始化嵌套类型 这个问题 https stackoverflow com questions 6111565 now that we have stdarray what uses are
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将

随机推荐

  • 在 Karma 流程中提交表单 => 您的一些测试进行了整页重新加载

    在一个角度指令中 我有以下代码 name formName bind submit function validate 在 Karma 测试的 beforeEach 子句中 我有以下代码 bootstrapInput compile
  • 在 rdlc 报告中创建没有数据集的表。

    我正在VS2010中开发rdlc报告 我需要在报告中添加一个表格 但是这个表格有固定的文本 不需要数据源 但报告给出了错误 因为该表与数据源无关 所以我的问题是如何在不需要数据源的 rdlc 中创建表 Thanks 根据定义 表需要关联的数
  • Oracle 触发器错误 ORA-04091

    执行触发器时出现错误 ORA 04091 表 DBPROJEKT AKTIENDEPOT AKTIE 正在发生变化 触发器 函数可能看不到它 CREATE OR REPLACE TRIGGER Aktien Bilanz Berechnun
  • Flask 应用程序崩溃(很可能是由于循环导入)

    我在这里遵循了本教程 https youtu be mISFEwojJmE t 367 https youtu be mISFEwojJmE 这是一个非常简单的 Flask 应用程序 用于为站点创建用户登录和注册页面 到目前为止 本教程中的
  • 如何在wxpython框架中拖动图像

    在 wx 窗口中拖动图像 或文本 的最简单方法是什么 我需要一些步骤或一个小例子来说明如何做到这一点 提前感谢 看一下 wxPython 演示中的 PseudoDC 示例 该示例在窗口中显示一些随机形状 您可以抓取并移动它们 您应该能够应用
  • 如何在 Nightwatch 中运行单个测试

    我怎样才能只跑Test 3从以下测试中 module exports Test 1 function Test 2 function Test 3 function 一个新参数 测试用例已添加以运行指定的测试用例 nightwatch js
  • 具有记忆功能的斐波那契数在 Python 中运行缓慢?

    def fib n if n 1 return 0 if n 2 return 1 return fib n 2 fib n 1 def memo f cache def memoized n if n not in cache cache
  • Python中的递归(阶乘函数)

    我希望这不是一个太愚蠢的问题 但是为什么这段 Python 代码中的 return 1 语句会返回数字的阶乘 return True 也会发生这种情况 我理解它相当于 return 1 def factorial n if n 0 retu
  • VBA - 运行时错误 1004“应用程序定义或对象定义错误”

    我有一个 Excel 文档 它在第一次运行时将模板工作表复制到新工作表中 遵循此模板的任何其他工作表都会附加到新创建的工作表中 我在这部分代码的标题中收到错误 If Worksheets User Configuration Cells 9
  • 在外键中使用Django的bulk_create对象?

    我正在阅读 Djangobulk create 及其一些 缺陷 This has a number of caveats though 1 The model s save method will not be called and the
  • 如何保持页面上的对象随页面顶部滚动

    我在遵循 stackOverflow 问答时遇到问题 滚动时将对象固定到浏览器窗口顶部 https stackoverflow com questions 6980821 fix object to top of browser windo
  • CPU 因 attributeOfItemAtPath:error: 而引发

    我在用 NSFileManager attributesOfItemAtPath error 获取文件属性的函数 但有时我的应用程序 cpu 会达到 100 我正在使用此函数处理 100k 大约 个文件 我的申请样本 2128 NSFile
  • ORMLite Android 中的一对多关系

    如何在 ORMLite Android 中实现一对多关系 请找到示例 public class A private String name DatabaseField foreign true foreignAutoRefresh true
  • 将“page-break-before”应用于表行 (tr)

    根据 W3 org 的说法 这种风格page break after适用于块级元素 http www w3 org TR 2004 CR CSS21 20040225 page html page break props http www
  • 检测到 DisconnectedContext

    我需要帮助消除此错误 为此 RuntimeCallableWrapper 转换到 COM 上下文 0x465608 失败并出现以下错误 系统调用失败 例外情况来自 HRESULT 0x80010100 RPC E SYS CALL FAIL
  • ight_layout() 不考虑图副标题

    如果我向 matplotlib 图添加副标题 它就会被子图的标题覆盖 有人知道如何轻松解决这个问题吗 我尝试过tight layout 功能 但这只会让事情变得更糟 Example import numpy as np import mat
  • docker 卷类型之间的区别 - 绑定与卷

    TLDR In docker compose 有什么区别 volumes type volume source mydata target data and volumes type bind source mydata target da
  • Java锁概念内部是如何工作的?

    类的每个实例Object 及其子类 拥有一个在进入某个对象时获得的锁synchronized方法并在退出时自动释放 这是否意味着我们创建的任何对象实例在内部默认都有一个 锁 作为字段实现 我对这个 锁 概念感到困惑 我想知道它内部实际上做了
  • 两个列表之间的差异

    我有两个填充了 CustomsObjects 的通用列表 我需要在第三个列表中检索这两个列表之间的差异 第一个列表中的项目 第二个列表中的项目 我在想使用 Except 是个好主意 但我不知道如何使用它 帮助 Using Except这正是
  • 在该命名空间中的另一个函数内转发声明该命名空间中的函数

    我有两个源文件 a cpp and b cpp In a cpp 我有一个函数 foo namespace ns void foo std cout lt lt foo In b cpp 我在命名空间中有另一个函数ns我想在其中制作原型并调