Michael-Buens-MacBook:CppProj Michael$ gcc b.cpp
Undefined symbols for architecture x86_64:
"operator new(unsigned long)", referenced from:
_main in ccbv8mjf.o
Alpha::doStuff(char) in ccbv8mjf.o
Beta::doStuff(char) in ccbv8mjf.o
"vtable for __cxxabiv1::__class_type_info", referenced from:
typeinfo for Alphain ccbv8mjf.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for __cxxabiv1::__si_class_type_info", referenced from:
typeinfo for Betain ccbv8mjf.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
You are holding it wrong, use g++ :-)
Michael-Buens-MacBook:CppProj Michael$ g++ b.cpp
b.cpp (Liskov principle):
#include <cstdio>
class Alpha
{
public: virtual Alpha* doStuff(char c)
{
printf("From Alpha\n");
return new Alpha();
}
};
class Beta : public Alpha
{
public: virtual Beta* doStuff(char c)
{
printf("From Beta\n");
return new Beta();
}
};
int main()
{
Alpha* a = new Beta();
Alpha* x = a->doStuff('x');
Beta* b = new Beta();
Beta* y = b->doStuff('x'); // no need to cast to Beta
return 0;
}
No comments:
Post a Comment