繁体   English   中英

命名空间中的前向声明

[英]Forward declaration in namespace

考虑以下场景:

“A.cpp”:

void fun() { std::cout << "fun() global\n"; }

“B.cpp”:

namespace N
{
    void f()
    {
        std::cout << "f() in N\n";
        
        void fun(); // forward declaration
        fun();
    }
}

N::f(); 从其他文件(例如“C.cpp”)调用时,编译器会为fun()抛出“未定义符号”错误。

如何在不对“A.cpp”做任何更改的情况下解决这个问题?

如何在不对“A.cpp”做任何更改的情况下解决这个问题?

您需要在全局命名空间中而不是在命名空间N中转发声明fun 这可以通过移动声明void fun();来完成。 N之外,如下所示:

B.cpp

void fun(); //this is a forward declaration in global namespace 
namespace N
{
    void f()
    {
        std::cout << "f() in N\n";
        
        //no declaration needed here
        fun();
    }
}

工作演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM