Có vẻ như vấn đề của tôi là lỗi trong MSVC. Tôi đang sử dụng Visual Studio 2008 với Service Pack 1 và mã của tôi hoạt động với GCC (như được kiểm tra trên codepad.org).Lỗi thừa kế ảo trong MSVC
Bất kỳ thông tin chính thức nào về lỗi này? Bất kỳ ý tưởng làm thế nào để làm việc xung quanh nó? Lỗi có được sửa trong VS2010 không? Tất cả thông tin chi tiết sẽ được đánh giá cao.
Mã:
struct Base {
Base(int i = 0) : i(i) {}
virtual ~Base() {}
virtual Base *clone() const = 0;
protected:
int i;
};
struct A : virtual public Base {
A() {}
virtual A *clone() const = 0;
};
struct B : public A {
B() {}
B *clone() const { return new B(*this); }
/// MSVC debugger shows that 'b' is for some reason missing the Base
/// portion of it's object ("Error: expression cannot be evaluated")
/// and trying to access 'b.i' causes an unhandled exception.
///
/// Note: This only seems to occur with MSVC
B(const B &b) : Base(b.i), A() {}
};
void foo(const A &elem) {
A *a = elem.clone();
if (a) delete a;
}
int main() {
A *a = new B;
foo(*a);
delete a;
}
Điều này dường như là một lỗi. – GManNickG
Vẫn làm điều đó trong Visual Studio 2010. – Corey
Tôi lưu ý rằng codepad sử dụng g ++ 4.1.2, vì vậy tôi đã thử với Borland C++ 5.82 và nó hoạt động tốt. – Corey