我有一个人为的例子。我认为关键点是非法转换为基类。我不应该有一个MyBase数组。
此示例在我的计算机上编译VS2013:
#include <vector>
#include <iostream>
struct MyBase {
virtual size_t Count() = 0;
};
struct MyContainer : MyBase {
size_t Count() override;
};
size_t MyContainer::Count() {
return 4;
}
int main() {
MyContainer countable;
MyBase x[] = { countable };
std::cout << x[0].Count() << std::endl;
return 0;
}
这是否会在其他编译器上出现相同的错误?
为什么我收到链接器错误而不是编译器警告? (我确实收到了Intellisense警告)
问题不在于此处发生了什么或如何解决它。我知道。我想知道为什么它是链接器错误而不是编译器错误,以及这是否仅限于我的编译器。
为了说清楚,我知道这是一个&#34;修复&#34;:
int main() {
MyContainer countable;
MyBase * x[] = { &countable };
std::cout << x[0]->Count() << std::endl;
return 0;
}
但修复不是问题所在。我不明白的原因是错误不是由编译器诊断出来的,而是由链接器诊断出来的。