一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的[有朋友说要写个makefile,做个示范吧]
- rob2468
- 帖子: 185
- 注册时间: 2009-03-19 8:39
- 联系:
一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的[有朋友说要写个makefile,做个示范吧]
这程序是用来研究多层单继承
经常看到关于make,makefile的,麻烦各位以这个程序为例,写个makefile吧
谢谢
经常看到关于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++程序,编译总是那么个错误,但是看上去明明是对的
也不写个makefile。。。。
- rob2468
- 帖子: 185
- 注册时间: 2009-03-19 8:39
- 联系:
- windwhinny
- 帖子: 618
- 注册时间: 2007-09-26 17:34
Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
初步判断,你的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++程序,编译总是那么个错误,但是看上去明明是对的
乱吗
我包含的头文件是按着点,圆,圆柱一个个包含的应该没什么问题吧
在我电脑上编译出现的问题跟4楼列出的是一样的,提示说对‘Circle::Circle()’的调用没有匹配的函数,但是我在Circle类里面不是设计了复制构造函数,不是有匹配的函数么
我包含的头文件是按着点,圆,圆柱一个个包含的应该没什么问题吧
在我电脑上编译出现的问题跟4楼列出的是一样的,提示说对‘Circle::Circle()’的调用没有匹配的函数,但是我在Circle类里面不是设计了复制构造函数,不是有匹配的函数么
-
- 帖子: 8
- 注册时间: 2007-11-15 9:08
Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
错误信息已经说的很明白了,Cylinder类从Circle类中派生出来,Cylinder类的构造函数需要通过初始化列表调用基类Circle类的构造函数,而你的Cylinder类的构造函数没有显式的写出初始化列表,那就由编译器去自动调用Circle类的默认构造函数(即不带参数的构造函数),但是你的Circle类中显式的提供了构造函数 Circle(Point o,int p);和拷贝构造函数,则默认的构造函数编译器不再自动提供给你,也就是说Circle类中没有不带参数的构造函数,导致出错。要解决这个问题,可以在Cylinder类的构造函数定义的时候,在()之后{之前加上初始化列表,显式的调用基类Circle类的构造函数或者在Circle类中添加一个不带参数的构造函数都可以,根据需要自己定吧!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)
不过你可能得找本书好好看看构造函数、析构函数,继承情况下构造函数、析构函数的调用这方面的章节,个人觉得钱能的那本书还算不错,Thinking in C++(英文原版,不是中译本)更好一点,个人见解,如有不同意见,请不要批评!
- rob2468
- 帖子: 185
- 注册时间: 2009-03-19 8:39
- 联系:
Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
说的很好,我问了老师,老师差不多也是这么说的
可是我还是有的说法看不懂,看书是必要的,可是我现在急着想知道,有没有人可以讲讲
可是我还是有的说法看不懂,看书是必要的,可是我现在急着想知道,有没有人可以讲讲
是什么意思,是说我的Cylinder类中的构造函数的形式参数没有默认参数?你的Cylinder类的构造函数没有显式的写出初始化列表
这个怎么做,添加一个不带参数的构造函数?就是写一个Circle();这样的语句吗?在Circle类中添加一个不带参数的构造函数
- kwarph
- 帖子: 51
- 注册时间: 2006-06-19 19:19
- 联系:
Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
不光是Circle构造器的问题,这个只需在Circle.h中加个构造器:Circle() {}即可,还有:
1,Point 的 析构器~Point(),没有vitrual,并且没有定义(只有声明);
2,Circle的 析构器~Circle(),没有vitrual,并且没有定义(只有声明);
3,Cylinder的析构器~Cylinder(),没有定义(只有声明);
我改了出错的地方,传上来你看看吧。
另外,个人觉得,应该买本好点的书看看(不要看钱能的,纯粹折磨人)。
1,Point 的 析构器~Point(),没有vitrual,并且没有定义(只有声明);
2,Circle的 析构器~Circle(),没有vitrual,并且没有定义(只有声明);
3,Cylinder的析构器~Cylinder(),没有定义(只有声明);
我改了出错的地方,传上来你看看吧。
另外,个人觉得,应该买本好点的书看看(不要看钱能的,纯粹折磨人)。
- 附件
-
- temp.tar.bz2
- (1.55 KiB) 已下载 28 次
- xiaocheng_zh
- 帖子: 46
- 注册时间: 2009-05-30 15:52
- 来自: DL LIAONING CHN
Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
基本同意LS的关于看C++书的建议,钱能的书简直算得上是书中之“秦奋”——既不中看,也不中用!
- www1862
- 帖子: 781
- 注册时间: 2006-05-12 0:52
- 来自: Chongqing China
- 联系:
Re: 一个多文件的C++程序,编译总是那么个错误,但是看上去明明是对的
《c++ primer》 或者就是c++之父写的《The C++ programming language》