函数重复定义,请高手解答一下

allen95 2010-05-11 03:47:00
共6个文件 a.h b.h c.h main.cpp 2.cpp 3.cpp
a.h

//a.h
#ifndef A_H
#define A_H

#include <iostream>
using namespace std;

void displayA()
{
cout<<"this is a.h."<<endl;
}

#endif

b.h

#ifndef B_H
#define B_H

#include <iostream>
using namespace std;

void displayB()
{
cout<<"this is b.h."<<endl;
}

#endif

c.h

#ifndef C_H
#define C_H

#include <iostream>
using namespace std;

void displayC()
{
cout<<"this is c.h."<<endl;
}

#endif


main.cpp

#include <iostream>
using namespace std;
#include "a.h"

extern void display2();
extern void display3();
extern void displayA();
int main()
{
display2();
display3();
displayA();
}

2.cpp

#include <iostream>
using namespace std;
#include "a.h"
#include "b.h"

extern void displayA();
extern void displayB();
void display2()
{
cout<<"this is 2.cpp."<<endl;
displayA();
displayB();
}

3.cpp

#include <iostream>
using namespace std;
#include "b.h"
#include "c.h"

extern void displayC();
extern void displayB();
void display3()
{
cout<<"this is 3.cpp."<<endl;
displayB();
displayC();
}


请高手指点一下,为什么说我函数重复定义了呢,我应该如何改正,另外请问以上的extern中那些是可以去掉的呢, 谢谢
最好能详细解答一下 谢谢
...全文
222 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
taodm 2010-05-11
  • 打赏
  • 举报
回复
类是类,函数是函数,模板是模板,这没有推导关系。
allen95 2010-05-11
  • 打赏
  • 举报
回复
谢谢两位的解答 我按照2楼说的问题已经解决了 这里表示感谢

但是我还想问问为什么不能再头文件里写函数的定义呢? 我看过有的书中就把类的定义写在了头文件里,格式和我的差不多,不过好像多了一个#progma once(类似的一个宏,记不清了,可能拼写的有些问题),我查过msdn说这个宏的意思是把这个文件至少编译一次,那为什么不能把函数的定义写在头文件里呢?

书籍方面,《c++编程思想》(第二卷)中就有类似的例子(把类的定义写在了头文件中,我印象中是有的)。不都说这个书还不错嘛?

主要还是请教一下上面的代码为什么会错呢?
allen95 2010-05-11
  • 打赏
  • 举报
回复
谢谢两位的解答 我按照2楼说的问题已经解决了 这里表示感谢

但是我还想问问为什么不能再头文件里写函数的定义呢? 我看过有的书中就把类的定义写在了头文件里,格式和我的差不多,不过好像多了一个#progma once(类似的一个宏,记不清了,可能拼写的有些问题),我查过msdn说这个宏的意思是把这个文件至少编译一次,那为什么不能把函数的定义写在头文件里呢?

书籍方面,《c++编程思想》(第二卷)中就有类似的例子(把类的定义写在了头文件中,我印象中是有的)。不都说这个书还不错嘛?

主要还是请教一下上面的代码为什么会错呢?
selooloo 2010-05-11
  • 打赏
  • 举报
回复
extern都可以去掉,2.3文件没啥用吧 display2()display3()哪来的
taodm 2010-05-11
  • 打赏
  • 举报
回复
楼主是在哪本教材里学来的在.h文件里定义函数?
建议你把这个教材扔了。
dinjay 2010-05-11
  • 打赏
  • 举报
回复
main.cpp中

extern void display2();
extern void display3();

这两个不对,你display2和display3是在2,3.cpp中定义的啊,怎么跑main中去extern了呢?

你这个逻辑就错了,xx.h放的是函数声明,类似void XXX();
而.cpp中放的才是定义
void XXX()
{
...
}
....LZ概念混乱了
_JeffreyWu 2010-05-11
  • 打赏
  • 举报
回复
发错误信息

64,652

社区成员

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

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