我有以下代码:
enum nums {
a
};
class cls {
public:
cls( nums );
};
void function()
{
cls( a );
}
当我尝试使用 gcc 编译它时,出现以下错误:
test.cpp: In function ‘void function()’:
test.cpp:12:10: error: no matching function for call to ‘cls::cls()’
test.cpp:12:10: note: candidates are:
test.cpp:7:3: note: cls::cls(nums)
test.cpp:7:3: note: candidate expects 1 argument, 0 provided
test.cpp:5:7: note: cls::cls(const cls&)
test.cpp:5:7: note: candidate expects 1 argument, 0 provided
make: *** [test] Error 1
如果我用这个替换函数:
void function()
{
cls name( a );
}
然后一切正常。如果我使用带有两个参数的构造函数,它也可以工作。如果我在构造函数中添加“显式”,它将不起作用。
我知道 gcc 以某种方式将其解析为定义名称为“a”的“cls”类型的变量,但我不熟悉这种用于定义变量的语法。在我看来,这是一个定义 cls 类型的匿名临时变量的语句,传递“a”是参数。
使用 gcc 4.6.3 编译。
有什么见解吗?
谢谢,沙查尔