关于网友提出的“ 怎么在头文件定义的类中,调用源文件的结构体。”问题疑问,本网通过在网上对“ 怎么在头文件定义的类中,调用源文件的结构体。”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 怎么在头文件定义的类中,调用源文件的结构体。
描述: 我现在有一个A类,有A.h和A.cpp。
在A.h中定义了A类。
在A.cpp定义了结构体B。
因为不想把结构体B暴露出来,同时在A类中又需要用结构体B(定义了一个B类型的私有成员变量)。
现在,怎么在A类中,定义结构体B。
解决方案1:
一个意思啊
class A
{
struct B { ... };
privatle:
B b;
};
解决方案2: 你在A.cpp中定义结构体B,那你在A.h中就只能用B的指针(B *m_b),而且也得先声明B,如8楼所说,不能这么用B m_b,因为在头文件中没有定义B,所以它的内存大小没法计算,从而导致编译失败。如果你连在A.h中都不想声明B的话,那就只能用void *m_b了,在A的构造函数中m_b = new B,但在A.cpp中用到m_b的地方都强制转换成B的指针才能来用。
解决方案3:再阐述一下:
现在,我是在A.h中定义类A和结构体B。使用神马的都没问题。
拔特,我想在A.cpp里定义结构体,这时A类定义B类型的私有成员变量就会出现问题了。现求教该问题怎么解。
A.h
声明stuct B;
然后class A{....; B* m_b;};
A.cpp
实现定义struct B{...}//struct B{...}可以放入B.h, 然后A.cpp包含B.h
然后实现A的函数,
解决方案4: 知道pimpl吗?这个就是这样的。
class A{
private:
struct B;
B* pmpl;
};
然后就是cpp
以上介绍了“ 怎么在头文件定义的类中,调用源文件的结构体。”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3626933.html