C++ 无法将char转换为GluByte(如何使用重新解释的\u cast)

C++ 无法将char转换为GluByte(如何使用重新解释的\u cast),c++,opengl,C++,Opengl,我得到了一段代码,可以在我的笔记本电脑上运行系统测试,这样我的教授就可以对我们正在运行的系统有一个基本的了解(即将开始一门OpenGL课程)。对于OpenGL和C++(以前主要使用java),我很新,在花了很多时间试图解决问题而找不到正确的LIB文件之后,现在我得到这个错误: 错误C2440:“=”:无法从“const GLubyte*”转换为“const char*” 1> 指向的类型是不相关的;转换需要重新解释转换、C样式转换或函数样式转换 我认为这意味着我必须投下它,但由于我对这门语言缺乏

我得到了一段代码,可以在我的笔记本电脑上运行系统测试,这样我的教授就可以对我们正在运行的系统有一个基本的了解(即将开始一门OpenGL课程)。对于OpenGL和C++(以前主要使用java),我很新,在花了很多时间试图解决问题而找不到正确的LIB文件之后,现在我得到这个错误:

错误C2440:“=”:无法从“const GLubyte*”转换为“const char*” 1> 指向的类型是不相关的;转换需要重新解释转换、C样式转换或函数样式转换

我认为这意味着我必须投下它,但由于我对这门语言缺乏经验,我不知道正确的格式或正确的方式来做这件事,而且研究它并没有真正的帮助,因为GL已经更新,我能找到的大多数回复建议使用更新的glGetStringi,而我尝试过的其他回复都不起作用

如果有人愿意帮助我,我将不胜感激,下面是我的代码副本,错误出现在“p=glGetString(GL_扩展名);”

#包括
#包括
#包括
#包括
#包括
#包括
#定义GL_最大_纹理_单位0x84E2
#定义APIENTRYP APIENTRY*
#定义PADDR(functype,funcname)(funcname=(functype)wglGetProcAddress(#funcname))
#定义GLAPI外部
类型定义无效(APIENTRYP PFNGL)(无效);
typedef GLboolean(apientrypfnglisrenderbufferextproc)(GLuint);
类型DEF void(APIENTRYP PFNGLBINDRENDERBUFEREXTPROC)(GLenum target,GLuint renderbuffer);
typedef GLboolean(apientrypfnglisframebufferextproc)(GLuint framebuffer);
typedef void(apentryp PFNGLBINDFRAMEBUFFEREXTPROC)(GLenum目标,GLuint帧缓冲区);
PFNGL玻璃纤维;
PFNGL GL2F;
PFNGL-glTexImage3D;
PFNGLISRENDERBUFFEREXTPROC gliserenderbufferext;
PFNGLBINDRENDERBUFFEREXTPROC glbindrrenderbufferext;
PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT;
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
void main(整型argc,字符**argv){
常量字符*p;
闪烁naux、nlights、maxtxsize、maxviewsize[2],maxtxunits;
auxInitDisplayMode(AUX_SINGLE | AUX_RGBA);
生长素位置(0,0400);
生长素窗口(argv[0]);
printf(“OpenGL版本:%s\n”,glGetString(GL_版本));
printf(“OpenGL供应商:%s\n”,glGetString(GL_供应商));
printf(“OpenGL渲染器:%s\n”,glGetString(GL_渲染器));
printf(“\nGL扩展支持:\n\n”);
p=glGetString(GL_扩展名);
而(*p!=0){
putchar(*p);if(*p='')printf(“\n”);
p++;
}
glGetIntegerv(GL_辅助缓冲区和naux);
printf(“辅助缓冲区的数量%ld\n”,naux);
glGetIntegerv(GLU最大灯光和nlights);
printf(“最大灯光数%ld\n”,nlights);
glGetIntegerv(GL_MAX_TEXTURE_SIZE和maxtxsize);
printf(“最大纹理大小%ld\n”,最大TXSIZE);
glGetIntegerv(GL最大纹理单位和最大纹理单位);
printf(“最大纹理单位%ld\n”,最大纹理单位);
glGetIntegerv(GL_MAX_VIEWPORT_DIMS,maxviewsize);
printf(“最大视图大小%ld%ld\n”,最大视图大小[0],最大视图大小[1]);
printf(“\n”);
PADDR(PFNGL,glActiveTexture);printf(“活动纹理函数”);
if(glActiveTexture==NULL)printf(“未找到”);else printf(“确定”);
PADDR(PFNGL,glMultiTexCoord2f);printf(“MultiTex纹理函数”);
if(glmultimetexcoord2f==NULL)printf(“未找到”);else printf(“确定”);
PADDR(PFNGL,glTexImage3D);printf(“TexImage3D纹理函数”);
if(glTexImage3D==NULL)printf(“未找到”);else printf(“确定”\n);
PADDR(PFNGLISRENDERBUFFEREXTPROC,gliserenderbufferext);printf(“IsRenderbuffer函数”);
if(glistrenderbufferext==NULL)printf(“未找到”);else printf(“确定”);
PADDR(PFNGLBINDRENDERBUFFEREXTPROC,glbindrrenderbufferext);printf(“bindrrenderbuffer函数”);
if(glBindRenderbufferEXT==NULL)printf(“未找到”);else printf(“确定”\n);
PADDR(PFNGLISFRAMEBUFFEREXTPROC,glIsFramebufferEXT);printf(“IsFramebuffer函数”);
if(glIsFramebufferEXT==NULL)printf(“未找到”);else printf(“确定”\n);
PADDR(PFNGLBINDFRAMEBUFFEREXTPROC,glBindFramebufferEXT);printf(“BindFramebuffer函数”);
if(glBindFramebufferEXT==NULL)printf(“未找到”\n);else printf(“确定”\n);
//getch();
glFlush();
}

C没有
reinterpret\u cast
。而
main
的签名是错误的-你的编译器应该抱怨。
GLubyte
被定义为
unsigned char
,所以你是否尝试过
const unsigned char*p
const GLubyte*p
?@BDL我以前尝试过将其更改为GLubyte(刚刚尝试过无符号更改),但是对于所有的auxInit语句(auxInitDisplayMode、Position和Window)的一个未解析的外部符号,它给了我一个新的错误。转换是一个编译器错误。未解析的外部错误是链接器错误。由于链接是在编译之后出现的,因此必须首先修复转换,然后修复未解析的外部。链接:是否链接到相应的库(glaux.lib)?@BDL,我刚刚将glaux库添加到我的项目中的一个文件夹中,并再次链接它(它以前在我的C:drive上,但它无法识别),这样做并将char更改为Glubyte类型解决了我的问题:D非常感谢您的帮助(并解释导致这些错误的原因)C没有
reinterpret\u cast
。并且
main
的签名错误-您的编译器应该会抱怨。
GLubyte
被定义为
unsigned char
,所以您是否尝试过
const unsigned char*p
const GLubyte*p
?@BDL我以前尝试过将其更改为GLubyte(并且刚刚尝试了无符号更改),但对于所有auxInit语句(auxInitDisplayMode、Position和Window)的未解析外部符号,它给了我一个新的错误。转换是一个编译器错误。未解析的外部是一个链接器错误。由于链接发生在编译之后,因此您必须先修复转换,然后修复未解析的外部。对于链接:您是否链接到相应的库(glaux.lib)?@BDL,我刚刚添加了glaux
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>

#define GL_MAX_TEXTURE_UNITS              0x84E2
#define APIENTRYP APIENTRY *
#define PADDR(functype,funcname) (funcname = (functype) wglGetProcAddress( #funcname ))
#define GLAPI extern


typedef void (APIENTRYP PFNGL) (void);
typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint);
typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);
typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);
typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);

PFNGL glActiveTexture;
PFNGL glMultiTexCoord2f;
PFNGL glTexImage3D;
PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT;
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;


void main(int argc, char **argv){
 const char *p;
 GLint naux,nlights,maxtxsize,maxviewsize[2],maxtxunits;
 auxInitDisplayMode(AUX_SINGLE | AUX_RGBA);
 auxInitPosition(0,0,400,400);
 auxInitWindow(argv[0]);
 printf("OpenGL Version:  %s\n", glGetString(GL_VERSION)); 
 printf("OpenGL Vendor :  %s\n", glGetString(GL_VENDOR)); 
 printf("OpenGL Renderer: %s\n", glGetString(GL_RENDERER)); 
 printf("\nGL Extensions Supported:\n\n");
 p=glGetString(GL_EXTENSIONS);
 while(*p != 0){
  putchar(*p); if(*p == ' ')printf("\n");
  p++;
 }
 glGetIntegerv(GL_AUX_BUFFERS,&naux);
 printf("No of aux buffers %ld\n",naux);
 glGetIntegerv(GL_MAX_LIGHTS,&nlights);
 printf("Max number of lights %ld\n",nlights);
 glGetIntegerv(GL_MAX_TEXTURE_SIZE,&maxtxsize);
 printf("Max texture size %ld\n",maxtxsize);
 glGetIntegerv(GL_MAX_TEXTURE_UNITS,&maxtxunits);
 printf("Max texture units %ld\n",maxtxunits);
 glGetIntegerv(GL_MAX_VIEWPORT_DIMS,maxviewsize);
 printf("Max viewsize %ld %ld\n",maxviewsize[0],maxviewsize[1]);
 printf("\n");
 PADDR(PFNGL, glActiveTexture); printf("Active texture function ");
 if(glActiveTexture == NULL)printf("Not found\n"); else printf("OK\n");
 PADDR(PFNGL, glMultiTexCoord2f); printf("MultiTex texture function ");
 if(glMultiTexCoord2f == NULL)printf("Not found\n"); else printf("OK\n");
 PADDR(PFNGL, glTexImage3D); printf("TexImage3D texture function ");
 if(glTexImage3D == NULL)printf("Not found\n"); else printf("OK\n");
 PADDR(PFNGLISRENDERBUFFEREXTPROC,glIsRenderbufferEXT); printf("IsRenderbuffer function ");
 if(glIsRenderbufferEXT == NULL)printf("Not found\n"); else printf("OK\n");
 PADDR(PFNGLBINDRENDERBUFFEREXTPROC, glBindRenderbufferEXT); printf("BindRenderbuffer function ");
 if(glBindRenderbufferEXT == NULL)printf("Not found\n"); else printf("OK\n");
 PADDR(PFNGLISFRAMEBUFFEREXTPROC,glIsFramebufferEXT); printf("IsFramebuffer function ");
 if(glIsFramebufferEXT == NULL)printf("Not found\n"); else printf("OK\n");
 PADDR(PFNGLBINDFRAMEBUFFEREXTPROC, glBindFramebufferEXT); printf("BindFramebuffer function ");
 if(glBindFramebufferEXT == NULL)printf("Not found\n"); else printf("OK\n");


 //getch();
 glFlush();
}