找回密码
 注册
查看: 1065|回复: 3

C++问题求教高手(关于dynamic_cast)如何编译?

[复制链接]
发表于 2006-5-6 23:40:01 | 显示全部楼层 |阅读模式
[code:1]

#include <iostream>

using namespace std;


class A
{
    public:
        A();
        ~A();
        
        virtual int ca(A * b) = 0;
   
};

class B:public A
{
    public:
        B();
        virtual ~B();
        
        virtual int ca(A * b)
        {
            
        }
        
        int cb()
        {
            cout<<"b"<<endl;
        }
};

int main()
{
    A * x = new B();
    B * f = dynamic_cast<B *>(x);
    f->cb();
}

编译错误:
[root@MagicLinux lostmemory(0.1)]# g++4 11.cpp -o 11
11.cpp:40:2: 警告:文件未以空白行结束
11.cpp: In function ‘int main()’:
11.cpp:37: 错误:不能将 ‘B*’ 转换为 ‘A*’,在 initialization 中
11.cpp:39: 错误:statement 无法解析重载的函数地址
[root@MagicLinux lostmemory(0.1)]# g++4 11.cpp -o 11
11.cpp:40:2: 警告:文件未以空白行结束
11.cpp: In function ‘int main()’:
11.cpp:39: 错误:statement 无法解析重载的函数地址
[root@MagicLinux lostmemory(0.1)]# g++4 11.cpp -o 11
11.cpp:40:2: 警告:文件未以空白行结束
/tmp/ccVEAZGK.o: In function `main':
11.cpp:(.text+0x9c): undefined reference to `B::B()'
11.cpp:(.text+0xe8): undefined reference to `typeinfo for B'
collect2: ld 返回 1
[/code:1]

怎么能把它编译通过啊?[/code]
发表于 2006-5-7 09:57:22 | 显示全部楼层
The consturctor functions of class A and B are not defined. Following codes work well:

[code:1]
#include <iostream>

using namespace std;


class A
{
public:
  A(){}
  ~A(){}
                                           
  virtual int ca(A * b) = 0;
                                               
};

class B:public A
{
public:
  B(){}
  virtual ~B(){}
                                           
  virtual int ca(A * b)
  {
                                                                              
  }
                                                   
  int cb()
  {
    cout<<"b"<<endl;
  }
};

int main()
{
  A * x = new B();
  B * f = dynamic_cast<B *>(x);
  f->cb();
}
[/code:1]
回复

使用道具 举报

发表于 2006-5-7 12:27:49 | 显示全部楼层
楼主没有给出构造函数的实现。 2楼给了个空实现。

对于 dynamic_cast 的情况, 因为是动态转换, 在很多情况下需要判断是否转换成功。
就你的例子而言, 要判断一下是否 f 为 空指针。不过你这个例子用不着。
回复

使用道具 举报

 楼主| 发表于 2006-5-7 21:04:44 | 显示全部楼层
谢谢了。
     我明白了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-7 01:13 , Processed in 0.028947 second(s), 16 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表