如何自己写主.H 文件,然后在主程序中引用。?

wutingting_12345678 2005-10-04 12:53:36

如何自己写主.H 文件,然后在主程序中引用。?



这有三个文件:

// 文件 test.cpp
#include "book.h"
void main()
{
P();
}

------------------
// 文件 book.h
#include "stdio.h"
void P();

-----------------
// 文件 book.cpp
#include "BOOK.H"
void P()
{
printf("PPPPPPPPPPP\n");
}





运行后为什么有错?我的意思是只在主程序 test.cpp 引用 book.h 就可以是用 book.cpp 中所有函数。

就想我们使用 stdio.h 一样,只要包含 "stdio.h" 就行了
...全文
772 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
feitianshiren 2005-10-05
  • 打赏
  • 举报
回复
主程序里面的#include "stdio.h"好像不能省,试过。(在dev c++)
feitianshiren 2005-10-05
  • 打赏
  • 举报
回复
所以说楼主的程序应该改成
// 文件 test.cpp
#include "book.h"
#include "stdio.h"
void main()
{
P();
}


// 文件 book.h
void P();


// 文件 book.cpp
#include "stdio.h"
void P()
{
printf("PPPPPPPPPPP\n");
}


feitianshiren 2005-10-05
  • 打赏
  • 举报
回复
想知道我这种想法对不对(因为是菜鸟)
把函数的声明都放在abc.h里,把这些函数的定义都放在abc.cpp里面。当我们再主程序用到这些函数时,只需把abc.h包含进来(#include "abc.h")。
如果有多个文件(.cpp),而这些文件里对某个函数有多个定义,这用#ifndef #endif避免重复定义。正如zhangzhengyu220所说的
codearts 2005-10-05
  • 打赏
  • 举报
回复
这是bc3.1的问题,你要么include你的cpp文件,要么创建一个project并将cpp文件加到project里
静如流水 2005-10-04
  • 打赏
  • 举报
回复
难道book.h里面不需要#include "book.cpp"么。。。
  • 打赏
  • 举报
回复

MoriyaLB(啸川)

------------------------------------------------
我在BC3.1中用bcc -c 编译test.cpp 和 book.CPP 后

然后我这样连接怎么不行呢 ,Tlink test.obj book.obj
  • 打赏
  • 举报
回复
能不能解释一下
zhangzhenyu220 2005-10-04
  • 打赏
  • 举报
回复
你的程序是没有任何问题滴。

错误可能出在工程设置上,你有没有把source文件都加到一个工程里?
你最好说明一下是编译错误还是连接错误,然后把详细的错误信息发一下。

另外为了避免类型重复定义的编译错误,头文件最好这样写:

//------------------
// 文件 book.h

#ifndef __book_h__
#define __book_h__

#include "stdio.h"
void P();
class A{};
#endif __book_h__

当然如果只有函数的声明,则没有必要这样写了。
madinmud 2005-10-04
  • 打赏
  • 举报
回复
在标准C和C++里从来都不允许void作为main()函数的返回值,main()函数的返回值只能是int,并且,最好在main()函数结束前用一个return返回值,通常是return 0;

在VC6中可以void作为main()函数的返回值,但是在linux下好像会给个警告·····
  • 打赏
  • 举报
回复
BC3.1中 编译是不是用 BCC 这个命令? 链接是哪个命令呢??
MoriyaLB 2005-10-04
  • 打赏
  • 举报
回复
调试的时候,要分析代码的走向,你编制的面向过程的代码,很容易分析。

// 文件 test.cpp
#include "book.h"
void main()
{
/////////////这里是程序入口,会调用P()函数,编译器会自动去查找book.h中P()的声明
P();
}

------------------
// 文件 book.h
#include "stdio.h"
/////////好的,P()声明了,只要test.cpp能看到声明就可以使用P()了
/////////只要你在别的地方把他实现了就行了,编译后会出现一个obj文件,通过链接器
/////////可以把test.obj和book.obj链接起来,从而test就能实现P()的功能了
void P();

-----------------
// 文件 book.cpp
#include "BOOK.H"
void P()
{
printf("PPPPPPPPPPP\n");
}
fiftymetre 2005-10-04
  • 打赏
  • 举报
回复
用命令行方式,只要编译cpp就好了
比如说这个例子
写成 bcc test.cpp book.cpp 就可以
这样bcc test.cpp book.cpp book.h 就没必要

如果cpp也很多的话就写到bat里编译啊
  • 打赏
  • 举报
回复
fiftymetre(对不起.你不是我的王子)

bcc31也可以建工程的,建一个把它们都加进来也好

其实还是命令行的编译方式好用,用make文件或者批处理编译

------------------------------------------------

我要包含的自定义.H 文件很多,如果用命令行方式要写好长,怎么办?
  • 打赏
  • 举报
回复
我不明白系统是如何把 book.H 和 book.cpp 关联起来的,我包含book.h时候它怎么知道调用 book.cpp 呢?
fiftymetre 2005-10-04
  • 打赏
  • 举报
回复
bcc31也可以建工程的,建一个把它们都加进来也好

其实还是命令行的编译方式好用,用make文件或者批处理编译
  • 打赏
  • 举报
回复
为什么我直接运行菜单中RUN命令来编译执行test.cpp 就错??(book.cpp 我事先编译过的)
fiftymetre 2005-10-04
  • 打赏
  • 举报
回复
bcc test.cpp book.cpp
是这样在命令行编译的吗?
  • 打赏
  • 举报
回复
楼上的,我用的是dos 下的 BC++3.1 ,已经编译过 book.cpp了。不行呀!!(在VC 中没问题)
fiftymetre 2005-10-04
  • 打赏
  • 举报
回复
你把book.cpp加到工程里来就不会有问题了,你没有编译book.cpp所以导致这样的问题
snowbirdfly 2005-10-04
  • 打赏
  • 举报
回复
我用VC6编译没有问题啊~~
运行没有问题~~~
对了,运行后为什么有错?
这个错误是什么啊???
加载更多回复(5)

64,685

社区成员

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

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