[英]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.