永发信息网

C++ 头文件中声明的函数都是在哪儿定义的?

答案:6  悬赏:50  手机版
解决时间 2021-03-08 05:03
我编写运行一个OpenGL例程时,调用别人编写的gltTransformPoint方法,出错说:ransform.obj : error LNK2001: unresolved external symbol "void __cdecl gltTransformPoint(float const * const,float const * const,float * const)" (?gltTransformPoint@@YAXQBM0QAM@Z)
这个方法是在GLTools.h中定义的,我在程序开头也包含了进去:
#include "../Common/OpenGLSB.h"
#include "../Common/GLTools.h"(路径是绝对正确的)
到GLTools.h一看,里面只是有个函数声明void gltTransformPoint(const GLTVector3 vSrcPoint, const GLTMatrix mMatrix, GLTVector3 vPointOut);
那具体的函数定义代码在哪儿呢?这是我学C++一大困惑的地方,好多头文件都只是有个声明没见具体代码,还有,这个问题该怎么解决?让程序能找到gltTransformPoint,请教大家了
好像是缺少lib文件,可是我该怎么知道gltTransformPoint函数在哪个lib文件里呢?有请赐教
最佳答案
1、函数声明由函数返回类型、函数名和形参列表组成。形参列表必须包括形参类型,但是不必对形参命名。这三个元素被称为函数原型,函数原型描述了函数的接口。定义函数的程序员提供函数原型,使用函数的程序员就只需要对函数原型编辑即可。

2、比如: 【返回类型】 函数名(参数1类型 参数1,参数2类型 参数2,……);
实例:bool swap(int a,int b);
例子中函数的返回类型为bool型,两个参数都是int型,一个名称为a ,一个名称为b
函数声明中的形参名往往被忽略,如果声明中提供了形参的名字,也只是用作辅助文档。另外要注意函数声明是一个语句,后面不可漏分号!
如果是自己写的函数,在声明函数的同时要对函数进行定义。
假设头文件名为head.h,源文件名为main.cpp,两个文件在同一个目录下
在头文件中直接加上int swap(int a,int b);这一句就可以了
在源文件中还要加上include"head.h"
并且加上函数的定义:
bool swap(int a,int b){//swap函数用于两个数据交换
int c;
c=a;
a=b;
b=c;
}
注意在头文件中声明后记得在源文件中包含这个头文件,要不然是找不到函数的定义的。
全部回答
只包含了头文件? 是不是缺少 .lib 的文件
定义只能有一次,而声明的次数不限。任何标识符在使用前至少要有声明,将声明放在头文件中,就可以在需要使用到标识符时随时把头文件包含进来即可。如果把定义放进头文件中,那每包含一次头文件,标识符就定义了一次,这样在多文件的编译连接时很容易出问题的。 包含其实就相当于把被包含文件的内容加入到其中,和用被包含文件中的内容替换掉对应的包含语句没有区别。使用头文件的好处就是免除了重复劳动的麻烦。 反正最终编译器都是把被包含文件的内容合并到一块才编译的。所以这样,lz觉得运行时的调用跟调用任何一个函数有区别吗。
对于Windows系统函数来说,你查MSDN的时候都可以找到函数所在的头文件和所需要的库,如果用别人写的函数话必须明确在那个库。。。或者看有没有帮助文档的。。。。。
你奴既然是调用别人编写的gltTransformPoint方法,那么应该将别人的库文件一起拷到你的工程里面,这样连接的时候才不会发生找不到函数定义的情况。 openGL的方法一般是由两类文件组成,头文件和库文件,头文件用来声明函数原型,库文件是函数定义。 再检查一下,是否少拷了一个库文件。
这不是编译错误,这是连接错误。 第一种可能: 你先去工程目录下面看有没有lib文件,有的话就用这个指令加进去: #pragma comment( lib,"lib文件名" ) 加在这两个头文件后面。 比如: #pragma comment( lib,"glut32.lib" ) #pragma comment( lib,"glut.lib" ) 第二: 看看commom/目录下面是否有对应的OpenGLSb.cpp、Gltools.cpp文件,如果有的话,就添加到工程里边来。 ---------------------------------------------------- 这需要查询相关文档。 不过通常如果不是系统库的话都可以在安装的SDK下面的Lib目录下找到lib文件,在bin目录下找到相关的dll文件。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
《神鬼寓言3》我学习了融合魔法后却只能释放
肺痈溃脓期,若服用桔梗白散后下不止,可加服
网球选手为什么一定要叫种子选手呢
宫腹腔镜手术成功率
为什么电脑屏幕开机后变成灰色?
有人有加勒比海盗5的百度云资源吗,能直接看
一头牛一年可以长多少斤?
洪家在什么地方啊,我要过去处理事情
梦到自行车坏了
模特魅影结局谁是凶手
跟你老婆的说媒,是什么意思,山东话
我才15岁眼袋就很重,请问有什么办法去除眼袋
下列酶学改变中与肺气肿发病有关的是A.胆碱酯
尺咀头地址在哪,我要去那里办事
请教一个QTableWidget按某列排序的问题
推荐资讯
MY WILL 犬夜叉中文谐音
滑头鬼之孙之千年魔京是什么意思
哥哥今年8岁,弟弟今年2岁,再过多少年后,弟
高潮发池不出去总憋的次数多想小便怎么办
因为夫妻打架女方提出离婚男方会有什么赔偿给
应收实收是什么意思
各有关主体按照市场机制,从事货币资金融通、
常德北站到高山街坐马路公交
96求交往,没什么别的要求身高要比我高的爆
[急!]一次函数数学题,10和11题请帮帮忙
长顺物流地址有知道的么?有点事想过去
不受任何限制怎么用成语代替?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?