一个虚函数的问题。请各位大虾指教!

发布于 2022-10-01 11:01:44 字数 1369 浏览 28 评论 0

我在Redhat下写一个小程序,想试虚函数,但总是不能编译通过,程序如下:

class CShape
{
   virtual void Draw();  
};

void CShape:raw()
{
  printf("CShape:raw.\n";
}

class CCircle : public CShape
{
   virtual void Draw();
};

void CCircle:raw()
{
  printf("CCircle:raw.\n";
}

void DoDraaw(CShape& s)
{
  s.Draw();
}

main()
{
  CCircle c;
  DoDraw(c);
}

这是怎么回事啊?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

千寻… 2022-10-08 11:01:44

你怎么编译的?
这个是完整文件么?
出错的信息是什么?

权谋诡计 2022-10-08 11:01:44
  1. /*vitual.cxx*/
  2. #include <cstdio>;
  3. class CShape
  4. {
  5. public:
  6.     virtual void Draw();
  7. };
  8. void CShape::Draw()
  9. {
  10.     printf("CShape::Draw.\n");
  11. }
  12. class CCircle : public CShape
  13. {
  14. public:
  15.     virtual void Draw();
  16. };
  17. void CCircle::Draw()
  18. {
  19.     printf("CCircle::Draw.\n");
  20. }
  21. void DoDraw(CShape& s)
  22. {
  23.     s.Draw();
  24. }
  25. main()
  26. {
  27.     CCircle c;
  28.     DoDraw(c);
  29. }

复制代码
#g++ vitual.cxx
#./a.out

东京女 2022-10-08 11:01:44

DoDraw(CShape& s)的定义中,你不要用引用,应该使用指针。
如下:
DoDraw(CShape* pShape)
{
pShape->;Draw();
}
main()
{
    CCircle c;
    DoDraw(&c);
}

然后用g++编译即可。

不过挺奇怪的,我的机器两个都能编译并运行成功,怪了!
编译器版本:gcc 2.2.4

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文