访问OpenAL缓冲区的公共对象属性

时间:2014-12-08 11:21:12

标签: c++ object openal

我创建了一个具有两个公共属性的对象:

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时的违规访问

2 个答案:

答案 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?