C++11命名空间内函数互相依赖的编译问题解决方法咨询
解决C++命名空间内函数互相调用的问题
你的代码编译会报错,原因是foo()定义时调用bar(),但此时bar()还未被编译器识别。不需要将函数移出命名空间,只需要在命名空间内先声明两个函数,再实现具体逻辑即可,示例代码如下:
namespace Example { // 先声明两个函数 void foo(); void bar(); // 再实现函数逻辑 void foo() { bar(); } void bar() { foo(); } }
原理很简单:函数声明只需要告诉编译器函数的名称、返回值类型和参数列表(这里两个函数都无参数),让编译器知道该函数的存在;后续再提供函数的具体实现,就能解决互相调用时的未识别问题。
注意:这段代码运行时会触发无限递归调用,导致栈溢出,这是逻辑问题而非语法问题,实际项目中需要在函数内添加终止递归的条件。
内容的提问来源于stack exchange,提问作者codingtuba
相关产品推荐
相关产品推荐

