当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 10 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的[有朋友说要写个makefile,做个示范吧]
帖子发表于 : 2009-07-04 0:32 
头像

注册: 2009-03-19 8:39
帖子: 185
送出感谢: 0 次
接收感谢: 0 次
这程序是用来研究多层单继承

经常看到关于make,makefile的,麻烦各位以这个程序为例,写个makefile吧
谢谢


附件:
Inherit.tar.gz [1.57 KiB]
被下载 37 次


最后由 rob2468 编辑于 2009-07-09 22:21,总共编辑了 1 次
页首
 用户资料  
 
2 楼 
 文章标题 : Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
帖子发表于 : 2009-07-04 0:33 
头像

注册: 2007-09-26 17:34
帖子: 618
送出感谢: 0 次
接收感谢: 2
也不写个makefile。。。。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
帖子发表于 : 2009-07-04 1:02 
头像

注册: 2009-03-19 8:39
帖子: 185
送出感谢: 0 次
接收感谢: 0 次
不会写


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
帖子发表于 : 2009-07-04 1:18 
头像

注册: 2007-09-26 17:34
帖子: 618
送出感谢: 0 次
接收感谢: 2
初步判断,你的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)


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
帖子发表于 : 2009-07-04 1:33 
头像

注册: 2009-03-19 8:39
帖子: 185
送出感谢: 0 次
接收感谢: 0 次
乱吗
我包含的头文件是按着点,圆,圆柱一个个包含的应该没什么问题吧
在我电脑上编译出现的问题跟4楼列出的是一样的,提示说对‘Circle::Circle()’的调用没有匹配的函数,但是我在Circle类里面不是设计了复制构造函数,不是有匹配的函数么


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
帖子发表于 : 2009-07-04 16:00 

注册: 2007-11-15 9:08
帖子: 8
送出感谢: 0 次
接收感谢: 1
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++(英文原版,不是中译本)更好一点,个人见解,如有不同意见,请不要批评!


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
帖子发表于 : 2009-07-04 19:53 
头像

注册: 2009-03-19 8:39
帖子: 185
送出感谢: 0 次
接收感谢: 0 次
说的很好,我问了老师,老师差不多也是这么说的
可是我还是有的说法看不懂,看书是必要的,可是我现在急着想知道,有没有人可以讲讲
引用:
你的Cylinder类的构造函数没有显式的写出初始化列表
是什么意思,是说我的Cylinder类中的构造函数的形式参数没有默认参数?
引用:
在Circle类中添加一个不带参数的构造函数
这个怎么做,添加一个不带参数的构造函数?就是写一个Circle();这样的语句吗?


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
帖子发表于 : 2009-07-04 21:31 
头像

注册: 2006-06-19 19:19
帖子: 51
送出感谢: 0 次
接收感谢: 0 次
不光是Circle构造器的问题,这个只需在Circle.h中加个构造器:Circle() {}即可,还有:
1,Point 的 析构器~Point(),没有vitrual,并且没有定义(只有声明);
2,Circle的 析构器~Circle(),没有vitrual,并且没有定义(只有声明);
3,Cylinder的析构器~Cylinder(),没有定义(只有声明);
我改了出错的地方,传上来你看看吧。
另外,个人觉得,应该买本好点的书看看(不要看钱能的,纯粹折磨人)。


附件:
temp.tar.bz2 [1.55 KiB]
被下载 6 次


_________________
Tiger Cheng
昆山轩辕IT培训中心
C++培训讲师
邮件:kwarph@gmail.com
主页:http://www.xuanyuan-soft.cn
页首
 用户资料  
 
9 楼 
 文章标题 : Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
帖子发表于 : 2009-07-05 12:59 
头像

注册: 2009-05-30 15:52
帖子: 46
地址: DL LIAONING CHN
送出感谢: 0 次
接收感谢: 0 次
基本同意LS的关于看C++书的建议,钱能的书简直算得上是书中之“秦奋”——既不中看,也不中用!


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
帖子发表于 : 2009-07-08 0:57 
头像

注册: 2006-05-12 0:52
帖子: 781
地址: Chongqing China
送出感谢: 0 次
接收感谢: 0 次
《c++ primer》 或者就是c++之父写的《The C++ programming language》


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 10 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译