一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的[有朋友说要写个makefile,做个示范吧]

软件和网站开发以及相关技术探讨
回复
头像
rob2468
帖子: 185
注册时间: 2009-03-19 8:39
联系:

一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的[有朋友说要写个makefile,做个示范吧]

#1

帖子 rob2468 » 2009-07-04 0:32

这程序是用来研究多层单继承

经常看到关于make,makefile的,麻烦各位以这个程序为例,写个makefile吧
谢谢
附件
Inherit.tar.gz
(1.57 KiB) 已下载 57 次
上次由 rob2468 在 2009-07-09 22:21,总共编辑 1 次。
头像
windwhinny
帖子: 618
注册时间: 2007-09-26 17:34

Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的

#2

帖子 windwhinny » 2009-07-04 0:33

也不写个makefile。。。。
头像
windwhinny
帖子: 618
注册时间: 2007-09-26 17:34

Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的

#4

帖子 windwhinny » 2009-07-04 1:18

初步判断,你的include有点乱,“#include”最好写在.cpp里
另外

代码: 全选

wind@wind-desktop:~/Inherit$ g++ *.cpp -c
Cylinder.cpp: In constructor ‘Cylinder::Cylinder(Circle, int)’:
Cylinder.cpp:7: 错误: 对‘Circle::Circle()’的调用没有匹配的函数
Circle.h:10: 附注: 备选为: Circle::Circle(const Circle&)
Circle.h:9: 附注:          Circle::Circle(Point, int)
头像
rob2468
帖子: 185
注册时间: 2009-03-19 8:39
联系:

Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的

#5

帖子 rob2468 » 2009-07-04 1:33

乱吗
我包含的头文件是按着点,圆,圆柱一个个包含的应该没什么问题吧
在我电脑上编译出现的问题跟4楼列出的是一样的,提示说对‘Circle::Circle()’的调用没有匹配的函数,但是我在Circle类里面不是设计了复制构造函数,不是有匹配的函数么
x3y1
帖子: 8
注册时间: 2007-11-15 9:08

Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的

#6

帖子 x3y1 » 2009-07-04 16:00

windwhinny 写了:初步判断,你的include有点乱,“#include”最好写在.cpp里
另外

代码: 全选

wind@wind-desktop:~/Inherit$ g++ *.cpp -c
Cylinder.cpp: In constructor ‘Cylinder::Cylinder(Circle, int)’:
Cylinder.cpp:7: 错误: 对‘Circle::Circle()’的调用没有匹配的函数
Circle.h:10: 附注: 备选为: Circle::Circle(const Circle&)
Circle.h:9: 附注:          Circle::Circle(Point, int)
错误信息已经说的很明白了,Cylinder类从Circle类中派生出来,Cylinder类的构造函数需要通过初始化列表调用基类Circle类的构造函数,而你的Cylinder类的构造函数没有显式的写出初始化列表,那就由编译器去自动调用Circle类的默认构造函数(即不带参数的构造函数),但是你的Circle类中显式的提供了构造函数 Circle(Point o,int p);和拷贝构造函数,则默认的构造函数编译器不再自动提供给你,也就是说Circle类中没有不带参数的构造函数,导致出错。要解决这个问题,可以在Cylinder类的构造函数定义的时候,在()之后{之前加上初始化列表,显式的调用基类Circle类的构造函数或者在Circle类中添加一个不带参数的构造函数都可以,根据需要自己定吧!

不过你可能得找本书好好看看构造函数、析构函数,继承情况下构造函数、析构函数的调用这方面的章节,个人觉得钱能的那本书还算不错,Thinking in C++(英文原版,不是中译本)更好一点,个人见解,如有不同意见,请不要批评!
头像
rob2468
帖子: 185
注册时间: 2009-03-19 8:39
联系:

Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的

#7

帖子 rob2468 » 2009-07-04 19:53

说的很好,我问了老师,老师差不多也是这么说的
可是我还是有的说法看不懂,看书是必要的,可是我现在急着想知道,有没有人可以讲讲
你的Cylinder类的构造函数没有显式的写出初始化列表
是什么意思,是说我的Cylinder类中的构造函数的形式参数没有默认参数?
在Circle类中添加一个不带参数的构造函数
这个怎么做,添加一个不带参数的构造函数?就是写一个Circle();这样的语句吗?
头像
kwarph
帖子: 51
注册时间: 2006-06-19 19:19
联系:

Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的

#8

帖子 kwarph » 2009-07-04 21:31

不光是Circle构造器的问题,这个只需在Circle.h中加个构造器:Circle() {}即可,还有:
1,Point 的 析构器~Point(),没有vitrual,并且没有定义(只有声明);
2,Circle的 析构器~Circle(),没有vitrual,并且没有定义(只有声明);
3,Cylinder的析构器~Cylinder(),没有定义(只有声明);
我改了出错的地方,传上来你看看吧。
另外,个人觉得,应该买本好点的书看看(不要看钱能的,纯粹折磨人)。
附件
temp.tar.bz2
(1.55 KiB) 已下载 28 次
Tiger Cheng
昆山轩辕IT培训中心
C++培训讲师
邮件:kwarph@gmail.com
主页:http://www.xuanyuan-soft.cn
头像
xiaocheng_zh
帖子: 46
注册时间: 2009-05-30 15:52
来自: DL LIAONING CHN

Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的

#9

帖子 xiaocheng_zh » 2009-07-05 12:59

基本同意LS的关于看C++书的建议,钱能的书简直算得上是书中之“秦奋”——既不中看,也不中用!
头像
www1862
帖子: 781
注册时间: 2006-05-12 0:52
来自: Chongqing China
联系:

Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的

#10

帖子 www1862 » 2009-07-08 0:57

《c++ primer》 或者就是c++之父写的《The C++ programming language》
回复