请问:对类的成员 取地址 和对全局变量 取地址 有什么不同

bazoo 2005-04-20 11:08:33
DSBUFFERDESC dsbd; //全局变量。如果作为类的成员, 取地址时就不行
class DSound
{

private:
// DSBUFFERDESC dsbd;
};



CreateSoundBuffer(&dsbd,&sound[sound_id].dsbuffer,NULL);
函数CreateSoundBuffer 的第一个参数是一个DSBUFFERDESC结构的地址。
DSBUFFERDESC dsbd; 定主为类的成员时就不行(不会出错,但CreateSoundBuffer返回失败的结果)

请问:对类的成员 取地址有什么不同,如果要把dsbd定义为类成员应该什么改
...全文
385 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhousqy 2005-04-20
  • 打赏
  • 举报
回复
全局变量 在定义以后就有自己的内存空间 可以取地址
类的成员 只有在定义了这个类的对象后 才会分配内存 可以取地址
=============
應該是的。
bing_huo 2005-04-20
  • 打赏
  • 举报
回复
那象这里 &dsbd 应该是什么的地址,

某个DSound对象中 dsbd成员的地址喽

一直看你说不行 请问是怎么不行? 编译不行? 运行不行?
bazoo 2005-04-20
  • 打赏
  • 举报
回复
dongpy(51-->ARM) :
int DSound::LoadWav(char *filename, int flags)
{
if (FAILED(lpDSound->CreateSoundBuffer(&dsbd,&sound[sound_id].dsbuffer,NULL)))
{
free(snd_buffer);
return(-1);
}
}
那象这里 &dsbd 应该是什么的地址,
bazoo 2005-04-20
  • 打赏
  • 举报
回复
bing_huo(我是一个演员!) :有这种说法吗? 偶还真不懂,
bazoo 2005-04-20
  • 打赏
  • 举报
回复
有这种说法吗? 偶还真不懂,
dongpy 2005-04-20
  • 打赏
  • 举报
回复
class DSound
{

DSBUFFERDESC dsbd;
};
DSound ds;
&ds.dsbd 取类成员地址, &DSound::dsbd 取成员地址偏移量.
bing_huo 2005-04-20
  • 打赏
  • 举报
回复
LoadWav 可以访问DSound类的成员 包括private的 但是不代表CreateSoundBuffer函数的内部也可以 不明白?
dongpy 2005-04-20
  • 打赏
  • 举报
回复
请问:对类的成员 取地址有什么不同,如果要把dsbd定义为类成员应该什么改
======================================================================
类成员的内存地址应该通过类对象来取.

直接取,只能得到类的成员的地址偏移值.
bazoo 2005-04-20
  • 打赏
  • 举报
回复
bing_huo(我是一个演员!)

你没看见CreateSoundBuffer 是在LoadWav 是调用的吗?
bing_huo 2005-04-20
  • 打赏
  • 举报
回复
LoadWav是DSound的成员函数 但是 CreateSoundBuffer不是!!!! 他怎么取DSound的private 成员地址?
bazoo 2005-04-20
  • 打赏
  • 举报
回复
bing_huo(我是一个演员!)
magicsnake(北极狐):
两位把偶当白痴了不是
bazoo 2005-04-20
  • 打赏
  • 举报
回复

magicsnake(北极狐):
int DSound::LoadWav(char *filename, int flags)
是不是DSound 的成员函数,看不懂吗?
bing_huo 2005-04-20
  • 打赏
  • 举报
回复
回复人: magicsnake(北极狐) ( )

这个是正确的。。。。。。一直在想对象成员和全局变量的区别。。。。忽略了那个private......哈哈
bazoo 2005-04-20
  • 打赏
  • 举报
回复
bing_huo(我是一个演员!)
刚看了一下msdn 不知道这个DSBUFFERDESC的dwSize 你有没有做初始化?

------这就不用你担心了
完整的程序,只要DSBUFFERDESC dsbd;
定义成全局的,就完全问题


zengwujun(月之海)
DSBUFFERDESC dsbd;
定义为指针吧

一样的,如要是类成员就不行
magicsnake 2005-04-20
  • 打赏
  • 举报
回复
CreateSoundBuffer又不是class DSound 的成员函数,你在class DSound中把DSBUFFERDESC dabd定义成私有的,CreateSoundBuffer怎么可能取到class DSound的私有成员变量??
听海拉拉 2005-04-20
  • 打赏
  • 举报
回复
up
zengwujun 2005-04-20
  • 打赏
  • 举报
回复
DSBUFFERDESC dsbd;
定义为指针吧
bing_huo 2005-04-20
  • 打赏
  • 举报
回复
Syntax

typedef struct {
DWORD dwSize;
DWORD dwFlags;
DWORD dwBufferBytes;
DWORD dwReserved;
LPWAVEFORMATEX lpwfxFormat;
GUID guid3DAlgorithm;
} DSBUFFERDESC, *LPDSBUFFERDESC;

typedef const DSBUFFERDESC *LPCDSBUFFERDESC;

Members

dwSize

Size of the structure, in bytes. This member must be initialized before the structure is used.

刚看了一下msdn 不知道这个DSBUFFERDESC的dwSize 你有没有做初始化?
bing_huo 2005-04-20
  • 打赏
  • 举报
回复
编译期没有错误吧???

是不是执行期CreateSoundBuffer失败?
bazoo 2005-04-20
  • 打赏
  • 举报
回复
DSBUFFERDESC dsbd; //全局变量。如果作为类的成员, 取地址时就不行
class DSound
{
public:
int LoadWav(char *filename, int control_flags = DSBCAPS_CTRLDEFAULT);
private:
// DSBUFFERDESC dsbd;
};

int DSound::LoadWav(char *filename, int flags)
{
if (FAILED(lpDSound->CreateSoundBuffer(&dsbd,&sound[sound_id].dsbuffer,NULL)))
{
free(snd_buffer);
return(-1);
}
}

CreateSoundBuffer(&dsbd,&sound[sound_id].dsbuffer,NULL);
函数CreateSoundBuffer 的第一个参数是一个DSBUFFERDESC结构的地址。
DSBUFFERDESC
加载更多回复(15)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧