我该如何解决这个特定的 "undeclared identifier" 错误?
How do i fix this specific "undeclared identifier" error?
我正在尝试学习如何使用 glad 和 glfw 在 c 中制作游戏和模拟。当尝试在任何函数中使用结构 Window
作为参数或只是声明一个 Window
实例时,会发生此错误。我收到 'Window': undeclared identifier
错误。我知道这可能意味着我通过研究 Whosebug 上的错误有一个循环包含(我似乎无法弄清楚在哪里)。 (我是 c 的新手,所以我很感激任何帮助)
Core.h:
#ifndef MINECRAFTCLONE_CORE_H
#define MINECRAFTCLONE_CORE_H
#include <stdio.h>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
extern int error(char* error);
#endif
Core.c:
#include "Core.h"
int error(char* error)
{
printf("%s", error);
return -1;
}
Window.h:
#ifndef CORE_WINDOW_H
#define CORE_WINDOW_H
#include "Core.h"
struct Window
{
int width;
int height;
char* title;
GLFWwindow* res;
};
extern int coreCreateWindow(struct Window* window,
int width, int height, char* title);
extern int coreLoopWindow(struct Window* window);
#endif
Window.c:
#include "Core.h"
#include "Window.h"
int coreCreateWindow(struct Window* window,
int width, int height, char* title)
{
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
if (!glfwInit())
return error((char*)"Failed to initialize glfw");
window->width = width;
window->height = height;
window->title = title;
window->res = glfwCreateWindow(window->width, window->height,
window->title, 0, 0);
if (!window->res)
return error((char*)"Failed to create glfw window");
glfwMakeContextCurrent(window->res);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
return error((char*)"Failed to initialize glad");
return 0;
}
int coreLoopWindow(struct Window* window)
{
while (!glfwWindowShouldClose(window->res))
{
glfwPollEvents();
}
glfwDestroyWindow(window->res);
glfwTerminate();
return 0;
}
main.c:
#include "Core.h"
#include "Window.h"
int main()
{
Window* window;
return 0;
}
你还没有定义一个叫做Window
的类型,你可以用它定义一个变量,比如
Window *window;
你已经定义了一个struct Window
,你用它在main()
中定义你的window
变量,比如
struct Window *window;
您已经以同样的方式定义了所有函数原型的 window
参数。
我正在尝试学习如何使用 glad 和 glfw 在 c 中制作游戏和模拟。当尝试在任何函数中使用结构 Window
作为参数或只是声明一个 Window
实例时,会发生此错误。我收到 'Window': undeclared identifier
错误。我知道这可能意味着我通过研究 Whosebug 上的错误有一个循环包含(我似乎无法弄清楚在哪里)。 (我是 c 的新手,所以我很感激任何帮助)
Core.h:
#ifndef MINECRAFTCLONE_CORE_H
#define MINECRAFTCLONE_CORE_H
#include <stdio.h>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
extern int error(char* error);
#endif
Core.c:
#include "Core.h"
int error(char* error)
{
printf("%s", error);
return -1;
}
Window.h:
#ifndef CORE_WINDOW_H
#define CORE_WINDOW_H
#include "Core.h"
struct Window
{
int width;
int height;
char* title;
GLFWwindow* res;
};
extern int coreCreateWindow(struct Window* window,
int width, int height, char* title);
extern int coreLoopWindow(struct Window* window);
#endif
Window.c:
#include "Core.h"
#include "Window.h"
int coreCreateWindow(struct Window* window,
int width, int height, char* title)
{
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
if (!glfwInit())
return error((char*)"Failed to initialize glfw");
window->width = width;
window->height = height;
window->title = title;
window->res = glfwCreateWindow(window->width, window->height,
window->title, 0, 0);
if (!window->res)
return error((char*)"Failed to create glfw window");
glfwMakeContextCurrent(window->res);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
return error((char*)"Failed to initialize glad");
return 0;
}
int coreLoopWindow(struct Window* window)
{
while (!glfwWindowShouldClose(window->res))
{
glfwPollEvents();
}
glfwDestroyWindow(window->res);
glfwTerminate();
return 0;
}
main.c:
#include "Core.h"
#include "Window.h"
int main()
{
Window* window;
return 0;
}
你还没有定义一个叫做Window
的类型,你可以用它定义一个变量,比如
Window *window;
你已经定义了一个struct Window
,你用它在main()
中定义你的window
变量,比如
struct Window *window;
您已经以同样的方式定义了所有函数原型的 window
参数。