如何在头文件定义的类中,调用源文件的结构体
【求助】怎么在头文件定义的类中,调用源文件的结构体。
我现在有一个A类,有A.h和A.cpp。
在A.h中定义了A类。
在A.cpp定义了结构体B。
因为不想把结构体B暴露出来,同时在A类中又需要用结构体B(定义了一个B类型的私有成员变量)。
现在,怎么在A类中,定义结构体B。
------解决思路----------------------
A.h
声明stuct B;
然后class A{....; B* m_b;};
A.cpp
实现定义struct B{...}//struct B{...}可以放入B.h, 然后A.cpp包含B.h
然后实现A的函数,
------解决思路----------------------
你在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的指针才能来用。
------解决思路----------------------
一个意思啊
class A
{
struct B { ... };
privatle:
B b;
};
------解决思路----------------------
知道pimpl吗?这个就是这样的。
class A{
private:
struct B;
B* pmpl;
};
然后就是cpp
我现在有一个A类,有A.h和A.cpp。
在A.h中定义了A类。
在A.cpp定义了结构体B。
因为不想把结构体B暴露出来,同时在A类中又需要用结构体B(定义了一个B类型的私有成员变量)。
现在,怎么在A类中,定义结构体B。
------解决思路----------------------
A.h
声明stuct B;
然后class A{....; B* m_b;};
A.cpp
实现定义struct B{...}//struct B{...}可以放入B.h, 然后A.cpp包含B.h
然后实现A的函数,
------解决思路----------------------
你在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的指针才能来用。
------解决思路----------------------
一个意思啊
class A
{
struct B { ... };
privatle:
B b;
};
------解决思路----------------------
知道pimpl吗?这个就是这样的。
class A{
private:
struct B;
B* pmpl;
};
然后就是cpp