
C++ 头文件中声明的函数都是在哪儿定义的?
我编写运行一个OpenGL例程时,调用别人编写的gltTransformPoint方法,出错说:ransform.obj:errorLNK2001:unresolvede...
我编写运行一个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文件里呢?有请赐教 展开
这个方法是在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;
}
注意在头文件中声明后记得在源文件中包含这个头文件,要不然是找不到函数的定义的。
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文件,有的话就用这个指令加进去:
#pragma comment( lib,"lib文件名" )
加在这两个头文件后面。
比如:
#pragma comment( lib,"glut32.lib" )
#pragma comment( lib,"glut.lib" )
第二:
看看commom/目录下面是否有对应的OpenGLSb.cpp、Gltools.cpp文件,如果有的话,就添加到工程里边来。
----------------------------------------------------
这需要查询相关文档。
不过通常如果不是系统库的话都可以在安装的SDK下面的Lib目录下找到lib文件,在bin目录下找到相关的dll文件。
第一种可能:
你先去工程目录下面看有没有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文件。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你奴既然是调用别人编写的gltTransformPoint方法,那么应该将别人的库文件一起拷到你的工程里面,这样连接的时候才不会发生找不到函数定义的情况。
openGL的方法一般是由两类文件组成,头文件和库文件,头文件用来声明函数原型,库文件是函数定义。
再检查一下,是否少拷了一个库文件。
openGL的方法一般是由两类文件组成,头文件和库文件,头文件用来声明函数原型,库文件是函数定义。
再检查一下,是否少拷了一个库文件。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对于Windows系统函数来说,你查MSDN的时候都可以找到函数所在的头文件和所需要的库,如果用别人写的函数话必须明确在那个库。。。或者看有没有帮助文档的。。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
只包含了头文件?
是不是缺少 .lib 的文件
是不是缺少 .lib 的文件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询