假设我有这个 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: error: default argument for 'MyStruct myStruct' has type 'int'
现在,我明白了这个错误,但仍然 - 我该如何解决这个问题?我知道我需要以某种方式从 int
转换为 MyStruct
,但两者都是
MyStruct myStruct = (MyStruct)0
和
MyStruct myStruct = static_cast<MyStruct>0
失败了:
prog.cc:7: error: no matching function for call to 'MyStruct::MyStruct(int)'
prog.cc:1: note: candidates are: MyStruct::MyStruct()
prog.cc:1: note: MyStruct::MyStruct(const MyStruct&)
我怎样才能简单地初始化我的用户定义的结构,作为函数参数的默认参数传递?
(这里是示例代码: http://melpon.org/wandbox/permlink/izWCnBXl9PGnmm0l )
您可以默认初始化 POD,因此:
void MyFunc (int x, MyStruct myStruct = MyStruct());
我猜您正在尝试使用 0
,因为它不仅是一个整数,而且还是一个空指针常量。但是您在这里没有使用指针。使用 0
是错误的方法。
我是一名优秀的程序员,十分优秀!