|
先看下这段代码
- 1 #include <iostream>
- 2
- 3 using namespace std;
- 4
- 5 class cBase1
- 6 {
- 7 public:
- 8 virtual void work();
- 9 cBase1() : a(0) {};
- 10 cBase1(int x) : a(x) {};
- 11 protected:
- 12 int a;
- 13 };
- 14
- 15 class cExt : public cBase1
- 16 {
- 17 public:
- 18 virtual void work();
- [color="Red"] 19 // cExt() : a(0){ };[/color]
- 20 };
- 21
- 22 void cBase1::work()
- 23 {
- 24 cout << a << ": hello, word" << endl;
- 25 }
- 26
- 27
- 28 int main()
- 29 {
- 30 cBase1 *p;
- 31 p = new cExt;
- 32
- 33 p->work();
- 34
- 35 delete p;
- 36
- 37 for ( int i = 1; i < 10; i++)
- 38 {
- 39 //if (i % 2 > 0)
- 40 p = new cBase1(i);
- 41 //else
- 42 // p = new cExt(i);
- 43 p->work();
- 44 delete p;
- 45 }
- 46 }
复制代码
编译时报错如下
- mikkoyue [ ~/c++/test ]$ g++ vtable.cpp -o vtable
- /tmp/cc6m3Le0.o: In function `cExt::cExt()':
- vtable.cpp:(.text._ZN4cExtC1Ev[cExt::cExt()]+0x12): undefined reference to `vtable for cExt'
- collect2: ld 返回 1
复制代码
如果把19行注释去掉,让其执行,报错如下
- mikkoyue [ ~/c++/test ]$ g++ vtable.cpp -o vtable
- vtable.cpp: In constructor ‘cExt::cExt()’:
- vtable.cpp:19: 错误:类‘cExt’没有名为‘a’的字段
- mikkoyue [ ~/c++/test ]$
复制代码
把19行修改为“ cExt() {}”,又回到最初的错误 |
|