0

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ですか?

4

3 に答える 3

2

なぜ継承を使わないのですか?

struct tIdS : public kIdS { ... }
于 2012-10-28T08:18:56.163 に答える
1

過剰な typedef を取り除きます。

struct kIdS {
    int* a;
    double* b;
};

typedef kIdS* kIdN;
typedef kIdS kIdR;

.....

kIdS* knv[] = {&A, (kIdS*)&B};
kIdS* knv1[] = {&A, (kIdN)&B};
于 2012-10-28T08:20:50.643 に答える
1

エラーの理由は、最初typedef struct kIdS* kIdNに という名前のクラスに構造体がないkIdSため、C++ コンパイラは、グローバルについて話しているstruct kIdSと見なし、typedefそのグローバル構造体kIdNとインラインstruct kIdS* knv1[] = {&A, (kIdN)&B};エラーが明らかであることです。struct kIdS*代わりにグローバルを使用することはできませんT::kIdS*、しかし、私はあなたから質問があります。なぜあなたstruct Xは単に言うことができるのに使うのですXか??

于 2012-10-28T08:28:55.540 に答える