为什么转换为纯虚基类的错误不会出现在编译阶段?

时间:2017-05-17 11:08:56

标签: c++

我有一个人为的例子。我认为关键点是非法转换为基类。我不应该有一个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;
}

但修复不是问题所在。我不明白的原因是错误不是由编译器诊断出来的,而是由链接器诊断出来的。

0 个答案:

没有答案