小白初次接触C++虚函数,出现这种报错如何处理

作者:超级管理员 更新时间:2017-09-13 12:56:39 来源:未知 点击:15642
#includeusing namespace std;class shape{public:virtual int area();shape(){cout<<"调用shape构造
#include<iostream>
using namespace std;

class shape
{
public:
virtual int area();

shape()
{
cout<<"调用shape构造函数"<<endl;
}

~shape()
{
cout<<"调用shape析构函数"<<endl;
}
};



class rectangle:
public shape
{
private:
int x;
int y;
public:
void in()
{
cout<<"请输入矩形长宽"<<endl;
cin>>x>>y; 
}
virtual int area();
rectangle()
{
cout<<"调用rectangle构造函数"<<endl;
}
~rectangle()
{
cout<<"调用rectangle析构函数"<<endl;
}
};

class circle:
public shape
{
private:
float r;
public:
void in()
{
cout<<"请输入圆形的半径"<<endl;
cin>>r;
}
virtual int area();
circle()
{
cout<<"调用circle构造函数"<<endl;
}
~circle()
{
cout<<"调用circle析构函数"<<endl;
}
};

class square:
public rectangle
{
private:
int a;
public:
void in()
{
cout<<"请输入方形的边长"<<endl;
cin>>a; 
}
virtual int area();
square()
{
cout<<"调用square构造函数"<<endl;
}
~square()
{
cout<<"调用square析构函数"<<endl;
}
};

int main(void)
{
circle c;
rectangle r;
square s;
c.in();
r.in();
s.in();
cout<<"圆形面积"<<c.area()<<endl;
cout<<"矩形面积"<<r.area()<<endl;
cout<<"方形面积"<<s.area()<<endl;


int rectangle::area()
{
return x*y;
}

int circle::area()
{
return 3.14*r*r;
}

int square::area()

{
return a*a;
}



报错:

                C:\Users\Administrator\AppData\Local\Temp\ccbBEIhD.o In function `shape::shape()':
10 C:\Users\Administrator\Desktop\未命名2.cpp                         undefined reference to `vtable for shape'
                C:\Users\Administrator\AppData\Local\Temp\ccbBEIhD.o In function `shape::~shape()':
15 C:\Users\Administrator\Desktop\未命名2.cpp                         undefined reference to `vtable for shape'
                C:\Users\Administrator\Desktop\collect2.exe                         [Error] ld returned 1 exit status

sos!
有没有老程序员带带我啊。。

virtual int area() = 0;
如果你不是纯虚函数,就实现它,否则就加 = 0;

此外,基类的析构函数要加virtual关键字,否则子类析构的时候,将不不会调用基类的析构函数,容易内存泄漏。

class square:
    public rectangle
{

你这个为什么从rectangle继承   rectangle又是从shape继承的 你改成从shape继承 不然会产生二义性 就会报错了

《C++编程思想》

引用 2 楼 l357630798的回复:
virtual int area() = 0;
如果你不是纯虚函数,就实现它,否则就加 = 0;

此外,基类的析构函数要加virtual关键字,否则子类析构的时候,将不不会调用基类的析构函数,容易内存泄漏。

在虚函数后面加一个花括号就解决了
谢谢!

引用 3 楼 usecf的回复:
class square:
    public rectangle
{

你这个为什么从rectangle继承   rectangle又是从shape继承的 你改成从shape继承 不然会产生二义性 就会报错了

这个是作业明确要求。。
我没办法改的

引用 4 楼 赵4老师的回复:
《C++编程思想》

会找机会看看这本书
谢谢!

推荐阅读

热门内容

神马鬼,一道算是物理题的编程题

原题如下:代码如下:#include

请问一下遍历图像的时候 这种ALU写法为

就是遍历图像的时候, 一次处理2个像素或...

if else 两个语句为什么同时执行了

我的程序里有一个if判断,在dubug下...

求助一个计算问题?

#include in...

请解惑,关于QT用C++写串口通信时的一

我把代码贴出来吧,请帮我看看是哪里出了问...

已添加头文件,但报错找不到标识符

引用错误1error C3861: “r...

错误2365,怎么解决啊,求助

如图这么多短变量名放一块儿,很容易重名的...

感觉现代c++不如d语言

功能都是那些功能,现代c++的实现语法太...

逐行读取文件+并发处理,和先读入整个文件

文本的每一行都是一条记录,程序要求对每条...

C语言新手求助,输出的数字非常大

本帖最后由z4164362于2017-0...

最新内容

小白初次接触C++虚函数,出现这种报错如何处理

#includeusing namespace std;cl...

老是显示错,帮忙看看那里错了

 #include    using namespace s...

功能测试大揭秘(2)—— Appium基础篇

  上文回顾  上一篇为大家介绍了如何通过appium桌面客户端的方式来快速搭建...

iOS单元测试之XCTest详解

  前言:测试是一个好的App不可缺少的部分。每一个App都是由一个个小的功能组...

Android开源数据库 GreenDao实践

  GreenDao是一款对象关系映射(ORM)的开源数据库框架,通过将Java...

深入理解计算机系统(1.1)——Hello World 是如何运行的

  1、计算机系统  我们知道计算机系统是由硬件和软件组成的。它们共同工作来运行...

基于.NET CORE微服务框架 -谈谈surging API网关

  1、前言  对于最近surging更新的API网关大家也有所关注,也收到了不...

Google:防钓鱼工具让全球30亿台设备更安全

  Google宣布防钓鱼工具已经累计为超过30亿台设备提供安全防护。搜索巨头本...

难以避免的泄漏事故:怎么解?

  世界各地的企业都在担忧网络安全威胁问题,特别是每天看到大量窃取信息和知识产权...

导入jar包,jar包名类名与SDK相同,怎么调用jar中的类或者方法,求大神解疑!

本人是新手,公司给了一个项目,并给了一个classes.jar包,我也在项目中导...

苹果谈Siri隐私:会收集数据,但不保存个人信息

  据MacRumors报道,在iOS11发布之前,苹果营销副总裁格雷格·乔斯维...

请问怎么更改AndroidStudio默认新建工程的时候的gradle版本?

每次新建项目都得自己改回来不然安装上去程序会出错buildscript {   ...

程序员想要不被淘汰 终身学习才是关键

  在IT行业,技术迅速转变、业务要求不断变化,这使得重塑职业道路成为一个关乎生...

出不来结猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,好不过瘾,又多吃了一个. 第二天早上又吃了剩下的桃子的一半,又多吃了一个。以后每天都吃了前一天剩

#include#includeint f...

关于对文件名使用 string.Replace() 没有作用 请教

这里我用replace()想要让文件名变成E:\CloudMusic\薛之谦 -...

以下代码实现的单例模式有什么缺陷?如果有,请做出你的修改!

public sealed class Singleton       stat...

wpf的keydown事件

页面只有这句话         

ASP.NET MVC验证表单

代码如下        [Required(ErrorMessage = "标题...

以XX开头的标识符太长,最大长度为128

本帖最后由qz6412525于2017-09-1212:09:14编辑如题,是一...

分部声明包含冲突的可访问性修饰符

代码如下:namespace ConstDefinitionLib{    pu...