我知道,作为类的前向声明的替代方法,您可以使用C样式标识符/声明,如下所示:
//instead of
class Foo;
void func(Foo* foo);
//do
void func(class Foo* foo);
但是在这种情况下,只有在更改了编译器(Visual Studio)中的设置后,我才遇到问题。我认为它被设置为宽松的,或者没有强制执行许多一致性标准。
namespace Foo
{
void func(class Bar* bar) {}
}
class Bar {};
int main()
{
Bar bar;
Foo::func(&bar); // argument of type "Bar *" is incompatible with parameter of type "Foo::Bar *"
// cannot convert argument 1 from 'Bar *' to 'Foo::Bar *'
}
如果Foo是一门课,那么这很好。有没有办法使用名称空间来做到这一点?