使用new初始化typedef结构

时间:2014-12-10 23:21:52

标签: c++ pointers struct new-operator glfw

我正在使用GLFW并创建一个GLFW窗口,该窗口在其头部" glfw3.h"中声明。像这样:

typedef struct GLFWwindow GLFWwindow;

通常,在堆上初始化结构时,我会这样做:

GLFWwindow *window = new GLFWwindow();

这给了我以下错误: 无效使用不完整类型'GLFWwindow {aka struct GLFWwindow}', 'GLFWwindow {aka struct GLFWwindow}'

的前向声明

以下是我对此问题的解决方法:

GLFWwindow **window = new GLFWwindow*();

此修复确实有效,但我不明白为什么需要它。

  1. 我不明白为什么结构GLFW窗口不完整或为什么我做前瞻性声明。似乎没有正确宣布某些事情。究竟我做错了什么?
  2. 当给出指向类型的指针时,操作员新做什么?
  3. 提前谢谢

2 个答案:

答案 0 :(得分:5)

正如其他人所说,你不能用GLFWindow直接创建new,因为它只是声明,而不是定义。

实际上,它用作opaque type,你应该只使用GLFW函数来操作它。例如,您可以使用glfwCreateWindow() function创建一个窗口,即:

GLFWwindow* window = glfwCreateWindow(...);

答案 1 :(得分:3)

您需要结构的定义才能实例化它。但是您似乎只有声明(缺少#include?)。

我相信你的'修复'会编译,但它实际上并不是工作:它会为结构分配一个新指针,但它不会创建一个指向的结构。