结构中的类
Class within structure
本文关键字:结构 更新时间:2023-10-16
我想在结构中定义类的对象并访问该类的函数成员。有可能做到这一点吗?
使用以下代码,我在ps_test->AttachToInput(2145);
处遇到分段错误。我无法弄清楚原因,一切对我来说都是正确的:
class test
{
public:
test();
virtual ~test();
int init_app(int argc, char* argv[]);
virtual void AttachToInput(int TypeNumber, int DeviceNo=0);
}
struct capture
{
test h_app;
gint port;
};
main()
{
struct capture h_cap;
test *ps_test = &h_cap.h_app;
ps_test->AttachToInput(2145);
}
首先,C++中class
和struct
之间的唯一区别是,默认情况下private
类的成员,默认情况下public
结构的成员。编译器生成的 ctor 和 dtor 在这两种情况下都是可见的 - 除非程序员另有说明(例如,他们将默认 ctor 移动到private
部分中)。否则,如果没有显式的公共声明,就不可能构造和销毁标记为 class
的用户定义类型的实例 - 从而违背编译器生成函数的真正目的。
所以基本上,你在示例中所做的只是两个用户定义类型的组合,这是完全合法的。创建 capture
的实例时,也会创建 test
的实例。
您不能做的是从test
和派生类型的test
之外公开访问AttachToInput()
。您需要声明函数public
才能编译此行:
h_cap.h_app.AttachToInput(); // error: member function of `test` is protected
在另一个不相关的笔记上(但我遇到了它,所以我提到了它),你的class test
有一个指向char
的原始指针。如果保证所指向的实体的生存期超过持有指针的对象的生存期,则可以保留原始指针。否则,对象本身很可能负责所述实体的破坏。你需要确定谁拥有什么,谁负责东西的分配和分配。
编辑:应该指出的是,艾伦斯托克斯在我写这个答案时在评论部分提出了同样的建议。 :)
EDIT2:轻微的疏忽,根据派生类的声明方式,也假定基类具有隐式默认访问权限。请参阅C++中的结构体和类之间有什么区别?。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 在 c++ 中拥有一组结构的正确方法是什么?
- vscode g++链路故障:体系结构x86_64的未定义符号
- C++概念:如何使用'concept'检查模板化结构的属性?