我创建了一个具有两个公共属性的对象:
class Sound {
public:
unsigned int * source;
unsigned int * buffer;
}
现在我想访问这些变量,但是我被困了......编译器编译时没有错误,但是当我执行类似
的操作时Sound *s = new Sound();
alGenBuffers(1, s->buffer);
alGenSources(1, s->source);
它抛出错误..在这些函数中传递一个简单的unsigned int *变量,但是我想要一个面向对象的样式。
我做错了什么?我甚至尝试使用getter和setter,但同样的错误被抛出..
由于
编辑:抱歉我在这里复制我的代码时输了一个错字,它是s->缓冲区和s->源。
抛出错误: 在project.exe 0xC0000005中的0x00894E93中未处理异常;读取0x00000000时的违规访问
答案 0 :(得分:1)
您正在向每个函数传递一个空指针。相反,您需要一个指向unsigned int
变量的指针,该变量将用于存储结果。 (一般来说,他们想要一个指向数组的指针;但在这种情况下,你只需要创建一个数组,所以每个变量就足够了。)
class Sound {
public:
unsigned int source;
unsigned int buffer;
};
alGenBuffers(1, &s->buffer);
alGenSources(1, &s->source);
答案 1 :(得分:0)
您正在尝试访问未初始化的指针,这意味着您尝试取消引用空指针,需要首先初始化这些指针,以获取更多信息: What is a class constructor?
你也应该读到这个: Important points to Note using a constructor
在任何情况下,将您的成员变量放在公共部分都是不好的做法,您应该使用getter和setter: Why use getters and setters?