根据http://msdn.microsoft.com/en-us/library/9ekhdcxs(v=vs.80).aspx,
如果您尝试在其前向声明仅在范围内的类型的堆栈上声明对象,也会发生 C2079。
class A; class B { A a; // C2079 }; class A {};
可能的解决方案:
class A; class C {}; class B { A * a; C c; }; class A {};
我的问题是当我遇到以下情况时如何消除此错误:
class A; // Object
class B // Container
{
public:
typedef int SomeTypedef;
private:
A a; // C2079
};
class A {
void Foo(B::SomeTypedef);
};
我不能在声明B之前声明A,因为A需要使用B的typedef,并且因为这个错误我不能在A之前声明B。
一种可能的解决方案是使用指向 A 的指针而不是堆栈变量,但我不想要指针(在这种情况下)。
另一种解决方案是不使用 typedef,或者不将其放在类 B 中。但是如果它属于 B 并且我不想污染我的项目的命名空间,因为 B::SomeTypedef 是比 SomeTypedef 更合适的名称怎么办?