Parece que mi problema es un error en MSVC. Estoy usando Visual Studio 2008 con Service Pack 1, y mi código funciona con GCC (como se probó en codepad.org).Error de herencia virtual en MSVC
¿Alguna información oficial sobre este error? ¿Alguna idea de cómo solucionarlo? ¿El error está solucionado en VS2010? Todas las ideas serán muy apreciadas.
El código:
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;
}
Esto parece ser un error. – GManNickG
Todavía lo hace en Visual Studio 2010. – Corey
Noté que el teclado usa g ++ 4.1.2, así que lo intenté con Borland C++ 5.82 y funciona bien. – Corey