头文件包含问题

sunyuqi 2009-02-27 08:21:58
我有这样一段程序

#include <iostream>
#include "A.h"
class A{
public:
int x;
int y;
A(int a=0,int b=0){
x=a;y=b;}
int print(){
std::cout<<x<<" "<<y<<std::endl;
return 0;}
};

int main(){
A a;
a.print();
return 0;}


然后我将这段程序分别放在三个文件:class.cpp,A.cpp,A.h中
class.cpp中的内容是
int main(){
A a;
a.print();
return 0;}

A.cpp中的内容是
#include "A.h"
#include <iostream>
A::A(int a=0,int b=0)
{
x=0;y=0;}


int A::print()
{
std::cout<<x<<" "<<y<<std::endl;
return 0;}

A.h中的内容是
#ifndef A_def
#define A_def
class A{
public:
int x;
int y;
A(int,int);
int print();
};
#endif

在没分割开的文件中可以编译成功
而咋分隔开后编译提示没有合适的默认构造函数,请大家帮我看看是什么原因
...全文
124 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
tncqsy 2009-02-28
  • 打赏
  • 举报
回复
看8楼
billpig 2009-02-28
  • 打赏
  • 举报
回复
问题是在这里A a;
这语句让编译器调用A的默认构造函数,如果没有默认构造函数有一些编译器就会提示出错,问题是出现在这,因此你在A中添加个默认的构造函数就应该可以了
sunyuqi 2009-02-28
  • 打赏
  • 举报
回复
哦。。。谢谢了
rgmlkthh 2009-02-28
  • 打赏
  • 举报
回复
本来就是你都重载了构造函数A(int, int)了,你在后面调用A a,当然不可以了。要传参数的。
yangch_nhcmo 2009-02-27
  • 打赏
  • 举报
回复
class.cpp

#include "A.h" //添加A.h头文件

int main()
{
A a(5,0); //传入参数
a.print();
return 0;
}

yangch_nhcmo 2009-02-27
  • 打赏
  • 举报
回复
找不到匹配的构造函数,因为你将显示定义了构造函数A(int,int);

下面将你的代码改了一下,可以运行了:
A.h

#ifndef A_def
#define A_def
class A
{
public:
int x;
int y;
A(int,int);
int print();
};
#endif



A.cpp

#include "A.h"
#include <iostream>
A::A(int a =0,int b=0)
{
x = a;
y = b;
}


int A::print()
{
std::cout<<x<<" "<<y<<std::endl;
return 0;
}


class.cpp
#include "A.h" //添加A.h头文件

int main()
{
A a(5,0); //传入参数
a.print();
return 0;
}

  • 打赏
  • 举报
回复
A(int a=0,int b=0)
该构造函数在头文件里没有声明啊。
A.h改成这样:
#ifndef A_def
#define A_def
class A{
public:
int x;
int y;
A(int a=0,int b=0);
int print();
};
#endif
蜥蜴枪王 2009-02-27
  • 打赏
  • 举报
回复
UP...
sagegz 2009-02-27
  • 打赏
  • 举报
回复
8F正解!
pengzhixi 2009-02-27
  • 打赏
  • 举报
回复
main函数里面要包括#include "A.h"
另外你的
#ifndef A_def
#define A_def
class A{
public:
int x;
int y;
A(inta=0,int b=0);
int print();
};
#endif
sunyuqi 2009-02-27
  • 打赏
  • 举报
回复
请你们在机器上编译通过了再告诉我好吗?
  • 打赏
  • 举报
回复
2个cpp文件里都要包含A.h。
lei_zhuyan 2009-02-27
  • 打赏
  • 举报
回复
class.cpp:


#include "A.h"
int main()
{
A a;
a.print();
return 0;
}
sagegz 2009-02-27
  • 打赏
  • 举报
回复
有主函数main()的.cpp文件也应该包含.h文件.
yangch_nhcmo 2009-02-27
  • 打赏
  • 举报
回复

#include "A.h" //添加A.h头文件

int main(){
A a;
a.print();
return 0;}

sunyuqi 2009-02-27
  • 打赏
  • 举报
回复
包含了。。。我上面那少打了些东西。。。
class.cpp文件中内容是
#include"A.h"
#include <iostream>
int main(){
A a;
a.print();
return 0;}
sxbwelcome 2009-02-27
  • 打赏
  • 举报
回复
class.cpp应该包含A.h

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧