函数声明调用问题.h文件

borland_boy 2004-08-23 11:48:47
主程序:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "CRC.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int a, b, c;

a = 10;
b = 20;

c = Add(a , b);
}
//---------------------------------------------------------------------------

Fun.C:
#include "CRC.h"

// 构造 16 位 CRC 表
int Add( int a , int b )
{
return a+b;
}
//---------------------------------------------------------------------------
FUN.h:
int Add( int a , int b );

运行程序提示:

[linker error]Unresolved external 'Add(int, int)' referenced from d:test\unit1.obj
...全文
204 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
borland_boy 2004-08-24
  • 打赏
  • 举报
回复
再问:
我已经加入该。C文件到工程中!

而且我发现了更奇怪的问题:
如果我的CRC文件的后缀名是.cpp那么编译就能通过!
如果CRC文件的后缀名是.c就会失败
出现:[linker error]Unresolved external 'Add(int, int)' referenced from d:test\unit1.obj
sunliwen780502 2004-08-24
  • 打赏
  • 举报
回复
楼主:
我特意的把你写的函数定义在了.c文件中(我保存时把Unit.cpp文件强行的该成了.c扩展名)
编译,运行都没问题.干脆重新写一个文件.
borland_boy 2004-08-24
  • 打赏
  • 举报
回复
这个问题大家没遇见过?
borland_boy 2004-08-23
  • 打赏
  • 举报
回复
上面的方法不行啊!
我把主程序中的:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "CRC.h"
//此处如果改成#include "CRC.C"就行了
//可我不明白那还要.h干什么用?
sunliwen780502 2004-08-23
  • 打赏
  • 举报
回复
把CRC.h
中的改为
extern "C" int Add(int a, int b); 试试!

如果不行试试下面的做法:
把你的自定义函数加入到工程中来,在重新编译一下.
Lonelywolf1899 2004-08-23
  • 打赏
  • 举报
回复
你也模拟系统的写法:int __fastcall TForm1::Add(int a,int b){}
调用的时候:intc=Form1->Add(a,b);
------------------------------------------------------------
不如,新建一个Unit算了......
borland_boy 2004-08-23
  • 打赏
  • 举报
回复
大家注意我问问题的时候手误将CRC写成了Fun
改正如下:
CRC.C:
#include "CRC.h"

// 构造 16 位 CRC 表
int Add( int a , int b )
{
return a+b;
}
//---------------------------------------------------------------------------
CRC.h:
int Add( int a , int b );

运行程序提示:

[linker error]Unresolved external 'Add(int, int)' referenced from d:test\unit1.obj
jessy_winter2000 2004-08-23
  • 打赏
  • 举报
回复
#include "Unit1.h"
#include "CRC.h"

add one more line :
#include "FUN.h"
borland_boy 2004-08-23
  • 打赏
  • 举报
回复
FUN.C和FUN.h
应该为CRC.C与CRC.H
sunliwen780502 2004-08-23
  • 打赏
  • 举报
回复
楼主:
我在请问一下,你写的函数是否真的加入到了工程中了,因为刚才我测试的时候,把自定义函数.cpp文件移出工程时,发现出的问题和你的一样.
sunliwen780502 2004-08-23
  • 打赏
  • 举报
回复
把CRC.cpp和CRC.h文件先移出工程在,然后在添加入工程中来在编译一下.
实在不行,重新写一个函数算了.
borland_boy 2004-08-23
  • 打赏
  • 举报
回复
没有人回答这么简单的问题了吗?
borland_boy 2004-08-23
  • 打赏
  • 举报
回复
请大家注意根本就没有FUN的事!!!!!!!!!!!!!!!!!!!!!!!!!!
是我手误写错了!!!!

可问题依然存在!

你们在回答问题的时候最好自己测试一下
constantine 2004-08-23
  • 打赏
  • 举报
回复
没有添加FUN.h文件
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "CRC.h"
#include "FUN.h"

这个跟两个Form互相调用一样的嘛

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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