我需要初始化此变量:const WAVEFORMATEX *pFormat
,其中包含struct字段的有效值。
首先我尝试在声明后修改:(*pFormat).wFormatTag = 0;
然后很快发现const修饰符不允许这样的动作。然后我尝试了内联初始化的变种
new WAVEFORMATEX() { 0, 0, 0, 0, 0, 0, 0}; //or
WAVEFORMATEX { 0, 0, 0, 0, 0, 0, 0};
第一个投掷期待a;'错误和第二个初始化表达式不返回正确的类型。有人可以帮忙吗?我之后使用的函数调用必须有一个类型为const WAVEFORMATEX *的参数。
这是结构文档:http://msdn.microsoft.com/en-us/library/windows/desktop/dd390970(v=vs.85).aspx
答案 0 :(得分:3)
函数需要const WAVEWHATEVER*
类型的参数这一事实并不意味着您必须声明此结构以使其同时变为const WAVEWHATEVER*
,只需使用:
void foo(const WAVEWHATEVER* w) {}
WAVEWHATEVER w;
w.FormatTag = 0;
// [...] and so on
foo(&w);
该功能仅保证不会更改原始w
的内容。
答案 1 :(得分:1)
我认为你在寻找的是:
const WAVEFORMATEX * pFormat = new WAVEFORMATEX{ 0, 0, 0, 0, 0, 0, 0};
这将允许您在一个表达式中初始化const T*
。存在其他方法可以使您的意图在变化时更加清晰或健壮,例如创建工厂函数等。
这与您之前尝试过的内容之间的区别在于缺少()
。使用()
将尝试调用没有参数的默认构造函数,然后在紧跟初始化列表时会导致语法错误。
不使用new
运算符将导致您在堆栈而不是堆上分配内存,并且您的类型错误,因为结果不是指针。