![](/img/trans.png)
[英]Why am I getting an “use of undefined type” error in my code, when I have the header for it included?
[英]Why am I not able to use OpenGL functions when I include my loader header?
我目前正在嘗試創建自定義OpenGL函數加載器,以便可以開始設計自己的自定義游戲引擎。 包含所有加載程序代碼的標頭的格式如下:
#ifndef SWOGLL_H_
#define SWOGLL_H_
#pragma once
#include <Windows.h>
#include <gl/GL.h>
#include <gl/GLU.h>
#include <gl/glext.h>
#include <gl/wglext.h>
static PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram;
static PFNGLACTIVETEXTUREPROC glActiveTexture;
// ...
static void* GetGLFunctionPointer(const char* functionName)
{
void* functionPointer = (void*)wglGetProcAddress(functionName);
if(
functionPointer == (void*)0x0 ||
functionPointer == (void*)0x1 ||
functionPointer == (void*)0x2 ||
functionPointer == (void*)0x3 ||
functionPointer == (void*)-0x1
)
{
HMODULE module = LoadLibraryA("opengl32.dll");
functionPointer = (void*)GetProcAddress(module, functionName);
}
return functionPointer;
}
static void GenerateGLFunctionPointers()
{
glActiveShaderProgram = (PFNGLACTIVESHADERPROGRAMPROC)GetGLFunctionPointer("glActiveShaderProgram");
glActiveTexture = (PFNGLACTIVETEXTUREPROC)GetGLFunctionPointer("glActiveTexture");
// ...
}
如果我在main.cpp
文件中#include "SWOGLL.h"
,則在創建OpenGL上下文后調用了GenerateGLFunctionPointers()
的情況下,OpenGL函數可以正常工作。
但是,如果我創建一個單獨的文件並#include "SWOGLL.h"
,即使已經創建了OpenGL上下文,OpenGL函數也將完全不起作用。
這是什么問題
您在頭文件中聲明static
函數和變量。 除非您有非常特別的理由要做如此奇怪的事情, 否則不要這樣做 。
static PFNGLACTIVESHADERPROGRAMPROC glActiveShaderProgram;
static void* GetGLFunctionPointer(const char* functionName)
這將創建glActiveShaderProgram
, GetGLFunctionPointer()
的其他副本,以及在包含標頭的每個C ++文件中聲明為static
其他所有副本。
刪除static
,然后執行下列操作之一:
將聲明保留在標題中,但將定義移至C ++文件。
將聲明和定義保留在標題中,但將它們標記為inline
。 這不適用於全局變量。
在這種情況下,使用static
關鍵字可以使聲明為static
的函數和變量具有“內部鏈接”,這意味着,每個定義它們的C ++文件都會獲得它們的單獨副本。 這與聲明成員函數static
,后者具有完全無關的作用。 不幸的是關鍵字static
在不同的地方意味着不同的事物。 這就是生活。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.