- 主题:错误 C2440 “<function-style-cast>”: 无法从“_Ty”转换为“
你把LButtonDownEvent函数的参数加上const。
LButtonDownEvent(const LPoint &point)。声明和实现都要修改。
【 在 mazheng75 的大作中提到: 】
: /********************************************************************
: created: 2005/05/13
: created: 13:5:2005 15:45
: ...................
--
FROM 140.206.195.*
我模拟了一下你的代码,再我的VS2022上没有任何问题
class LPoint
{
public:
int x;
LPoint(int _x)
{
x=_x;
}
};
class LVAR
{
public:
int x;
LVAR(int _x)
{
x=_x;
}
operator LPoint() { return LPoint(x); }
};
void Press(LPoint &l)
{
printf("x=%d\n",l.x);
}
int main()
{
LVAR d(10);
vector<LVAR> v;
v.push_back(d);
Press(LPoint(v[0]));
return 0;
}
【 在 mazheng75 的大作中提到: 】
: 都加了 问题如旧 谢谢
--
FROM 140.206.195.*
我知道原因了。
你的LVAR类型转化与LPoint的构造函数有歧义。显示指定一下就可以了
比如
LButtonDownEvent(v[0].operator LPoint()); // 直接调用
LButtonDownEvent(LPoint(v[0].operator LPoint())); //默认拷贝构造
LButtonDownEvent(LPoint(v[0].operator long())); // LPARAM构造
或者你把LPoint的拷贝构造显示的给出来。这样LPoint(v[0])的时候,编译器的隐式类型转换系统也不会有歧义了,就能成功。
原因:
LPoint(v[0])的时候,v[0]会有多个隐士类型转换会匹配到LPoint的多个构造(拷贝构造,LPARAM构造)。但是LPoint的拷贝构造并没有显示给出来,编译器认为这个隐士转换不能随意进行。要么你显示,要么你把拷贝构造补全.
【 在 mazheng75 的大作中提到: 】
:
--
修改:foliver FROM 140.206.195.*
FROM 140.206.195.*