我的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
创建的替代名称解决此问题?
答案 0 :(得分:2)
为什么不使用继承?
struct tIdS : public kIdS { ... }
答案 1 :(得分:1)
我会摆脱过多的typedef。
struct kIdS {
int* a;
double* b;
};
typedef kIdS* kIdN;
typedef kIdS kIdR;
.....
kIdS* knv[] = {&A, (kIdS*)&B};
kIdS* knv1[] = {&A, (kIdN)&B};
答案 2 :(得分:1)
您的错误的原因在于typedef struct kIdS* kIdN
您的类中没有名为kIdS
的结构,因此C ++编译器认为您正在讨论全局struct kIdS
然后{ {1}} typedef
和kIdN
错误的全局结构显而易见,全局struct kIdS* knv1[] = {&A, (kIdN)&B};
不能代替struct kIdS*
,但我有一个问题来自你,为什么你使用T::kIdS*
,而你可以简单地说struct X
??