Tôi có một lớp cơ sở và một lớp dẫn xuất. Mỗi lớp có tệp .h và tệp .cpp.dynamic_cast không thành công
Tôi đang làm dynamic_cast của đối tượng lớp cơ sở để các lớp có nguồn gốc trong đoạn mã sau:
h file:
class Base
{
public:
Base();
virtual ~Base();
};
class Derived : public Base
{
public:
Derived(){};
void foo();
};
class Another
{
public:
Another(){};
void bar(Base* pointerToBaseObject);
};
file cpp:
Base::Base()
{
//do something....
}
Base::~Base()
{
//do something....
}
void Derived::foo()
{
Another a;
a.bar(this);
}
void Another::bar(Base* pointerToBaseObject)
{
dynamic_cast<Derived*>(pointerToBaseObject)
}
Từ một số lý do kỳ lạ , đúc không thành công (trả về NULL). Tuy nhiên, quá trình truyền thành công nếu tôi di chuyển việc triển khai hàm tạo của lớp Derived từ .h sang tệp .cpp.
Điều gì có thể gây ra?
Trình biên dịch là gcc 3.1, trên Linux-SUSE. BTW, tôi thấy hành vi này chỉ trên nền tảng này, và cùng một mã hoạt động tốt trong Visual Studio.
có lẽ đó là một lỗi với gcc 3.1? hãy thử tùy chọn "-fdump-class-hierarchy" và xem nó có tạo ra vtable cho hai lớp của bạn –