不允许将结构实例分配给 class 实例

Assigning a structure instance to a class instance not allowed

我有这份遗产:

class SomeClass : public s_SomeStruct {}; // where s_SomeStruct is a classic C struct.

以及这些声明:

SomeClass a;
SomeClass b;
s_SomeStruct c;

我不知道为什么情况 (2) 不起作用:

a = b; // (1) works fine
a = c; // (2) DOESN't WORK! 
c = a; // (3) Oh? It works!

我能知道为什么吗?有什么简单的方法可以解决这种情况?

谢谢!

a = c;

因此,编译器将从 c 复制基础部分。但是它会为派生的特定部分设置什么 class。当编译器感到困惑时,它只会呕吐。

来自里氏代换原则:

Sub-classes 应该至少和基础 class 一样多。

解释:

发生继承时,派生类知道所有函数和变量(是的,有些是 public,有些是私有的,有些是受保护的,但它们是已知的)。

而基础 class 不知道派生 class。

例如,青蛙是一种动物,但动物不一定是青蛙。

简而言之,属性 会抛出编译错误

参考:

“派生类型必须完全可替代它们的基类型。” - http://www.oodesign.com/liskov-s-substitution-principle.html

这表示 c=a 有效。