c++ - 转换为使用 typedef 创建的结构类型

标签 c++ casting

我的 C++ 代码中存在结构转换问题。我使用 C 风格的转换。但是,如果我尝试使用替代名称(使用 typedef 创建)进行转换,则会出现错误。请看我的代码。

class T
{
public:
    typedef struct kIdS* kIdN;
    typedef struct kIdS {
        int* a;
        double* b;
    }  kIdR;

    typedef struct tIdS {
        int* a;
        double* b;
        float* c;
    }  tIdR;

    int a;
    double b;
    float c;

    void F()
    {
        a = 0; 
        b = 0; 
        c = 0;
        struct kIdS A = {&a, &b};
        struct tIdS B = {&a, &b, &c};
        struct kIdS* knv[] = {&A, (struct kIdS*)&B};
        struct kIdS* knv1[] = {&A, (kIdN)&B}; //error
    }
};

错误是:

error C2440: 'initializing' : cannot convert from 'T::kIdN' to 'T::kIdS *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, 
    C-style cast or function-style cast

为什么我不能使用替代名称?我如何使用 typedef 创建的替代名称来解决这个问题?

最佳答案

为什么不使用继承?

struct tIdS : public kIdS { ... }

关于c++ - 转换为使用 typedef 创建的结构类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13107313/

相关文章:

c++ - 在 RedHat 7.2 中获取构建日期和时间

c# - 来自基类的用户定义转换运算符

java - 如何使用相同的父类(super class)方法初始化不同的子类类型?

C# 将泛型参数转换为接口(interface)

C# - 有什么方法可以转换泛型集合吗?

c++ - 我们什么时候应该使用方法重载与具有不同命名的方法

c++ - 为什么使用给定一个线程的 OpenMP schedule(dynamic) 并行化循环中的所有迭代? (MSVS 2010)

c++ - C++ 抽象类的问题(我可以在 Java 中完成,但不能在 C++ 中完成!)

c# - 在 C# 中从两个整数创建百分比值的最佳方法是什么?

c++ - 带空小部件的 Qt 拆分器