请考虑以下场景:
"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"进行任何更改的情况下修复此问题?
1条答案
按热度按时间n8ghc7c11#
如何在不对“A.cpp”进行任何更改的情况下修复此问题?
您需要在 global namespace 中而不是在命名空间
N
内部正向声明fun
。这可以通过将声明void fun();
移到N
外部来完成,如下所示:Working demo