【发布时间】:2015-12-30 13:44:14
【问题描述】:
假设我有这个 prog.cc 文件:
struct MyStruct
{
unsigned int X : 2;
unsigned int Y : 2;
unsigned int Spare : 28;
};
void MyFunc (int x, MyStruct myStruct = 0);
int main ()
{
MyStruct myStr;
myStr.X = 1;
myStr.Y = 0;
MyFunc(6);
}
void MyFunc (int x, MyStruct myStruct)
{
x += 10;
}
当使用 GCC 4.4.7 编译时,我得到了这个错误:
prog.cc:7:错误:“MyStruct myStruct”的默认参数类型为“int”
现在,我理解了错误,但仍然 - 我该如何解决这个问题?
我知道我需要以某种方式从 int 转换为 MyStruct,但两者都
MyStruct myStruct = (MyStruct)0
和
MyStruct myStruct = static_cast<MyStruct>0
失败了:
prog.cc:7: 错误:没有匹配函数调用 'MyStruct::MyStruct(int)'
prog.cc:1:注意:候选人是:MyStruct::MyStruct()
prog.cc:1: 注意:MyStruct::MyStruct(const MyStruct&)
如何简单地初始化我的用户定义结构,作为函数参数的默认参数传递?
(这里是示例代码: http://melpon.org/wandbox/permlink/izWCnBXl9PGnmm0l)
【问题讨论】:
-
您希望从
0转换为MyStruct的具体操作是什么?将所有成员初始化为0?如果参数作为5传入怎么办?根据我收集的信息(包括您指定成员的大小),我认为您最好使用std::bitset。
标签: c++ casting initialization default-arguments