2010-06-28 80 views
0

比方说,我有两个类:C++每个类依赖于第二个

class One { 
    Two *somevar = new Two; 
    // (...) 
}; 

class Two { 
    One *somevar = new One; 
    // (...) 
} 

而这是不可能的编译类似的东西。如何处理它?

+2

@bta有正确的答案 - 所有你需要的是向前声明。然而,这种“相互拥抱”对我来说总是一种代码味道。我并不是说这是正确的,但我所说的是,以我个人的经验来看,每当遇到这种情况时,就意味着我没有仔细考虑过我的班级结构。通过重组班级,问题通常会消失。你有没有考虑过你所拥有的不是一个编码问题,而是一个设计问题? – Mawg 2010-06-29 00:24:17

回答

9

因为所有你正在筑巢是一个指针,尝试:

class Two; 

class One { 
    Two *somevar = new Two; 
    // (...) 
}; 

class Two { 
    One *somevar = new One; 
    // (...) 
} 

通过前瞻性声明类Two,你给编译器足够的信息,以便能够建立内部One类的指针。如果你试图自己嵌套类而不是指针,那么就没有办法解决这个问题。

+1

+1。同样在这种类型的伪代码中,someVar的初始化需要在包含适当头文件的cpp文件中出现,以便完整的类定义可用(新运算符需要)。 – stinky472 2010-06-28 22:55:37

+0

@ stinky472-一个很好的观点,谢谢 – bta 2010-06-28 23:12:28

+0

@ stinky472,@bta,可以只做这个头文件,但是你必须在构造函数中完成初始化,在声明的外部定义。构造函数(确保标记为内联)对于'One'必须在定义'Two'后出现。 – 2010-06-29 00:53:21

0

我想我找到了解决办法:

// class Type instead of Type 
// so: 
class Two *somevar = new class Two;