C++通过多态和指针自定义异构容器

标签 c++ inheritance casting

我正在围绕 sqlite3 编写一个非常简单和小的包装器,并使用 sqlite3_get_table() 获取结果作为 char** .我使用一个基数据类来将字段存储在一个统一的容器中,即记录在这里,然后使用派生类型专门获取每个数据类型。

这是我的基类:

class data
{
    private:
        uint sz;
        virtual void abstract() = 0;

    public:
        inline data(char* pd);
        inline data();
        uint size() {return sz;}
};

这是示例派生类:

class str : public data
{
    private:
        string* pdata;
        virtual void abstract() {}

    public:
        inline str(char* pd);
        inline operator string();
        inline operator const char*();
};

和记录类:

class record
{
    private:
        ushort cols;
        data** entries;
    public:
        record(char** ppdata, uint col_count);
        inline data* operator [](ushort field);
        inline uint num_fields() {return cols;}
};

recordoperator[] ( inline data* operator [](ushort field); ) 允许我访问基地 data这样上课:

db::str* mys = dynamic_cast<db::str*>((*record)[3]);

并编译:g++ -o main -lsqlite3 main.cpp在 Arch Linux 下,编译没有问题。但是当我运行它时,我得到 Segmentation Fault .

注释掉 dynamic_cast 行让我很高兴,但我个人认为我在某种程度上做错了,而不是认为 data 的定义或使用有问题类。

我也感谢任何对我的代码的激进冒犯,因为我知道我是新手。非常感谢。

最佳答案

当您使用dynamic_cast 时,您需要检查结果是否为NULL。当对象实际上不是您尝试转换为的类型的实例时,就会发生这种情况。

关于C++通过多态和指针自定义异构容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9928175/

相关文章:

c++ - 在类的私有(private)部分声明数组

c++ - 此声明中使用了哪种类型的语法?

c++ - 递归求平方根和

c++ - 在 C++ 中有效地使用继承

C 中的冲突类型和转换

C# 运行时错误 : InvalidCastException with Generic Class Instance

c++ - 从另一个应用程序窗口中的文本字段读取

Java无法重写构造函数中使用的方法: The method setupAnimationFrames() of type Slime must override or implement a supertype method

Java父类(super class)方法: keyword "this" vs "super"

c - 如何将整数转换为 void 指针?