Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板;操作员(int)_C++_Templates_Operator Overloading_Casting - Fatal编程技术网

C++ 模板;操作员(int)

C++ 模板;操作员(int),c++,templates,operator-overloading,casting,C++,Templates,Operator Overloading,Casting,关于我在这里已经提到的点结构: 是否有可能将函数toint()替换为强制转换运算符(int) 名称空间点{ 模板 结构点{ tx[dims]; //嗯??? 模板 点运算符U()常量{ 点ret; 标准::副本(X,X+dims,ret.X); 返回ret; } //嗯??? 点运算符int()常量{ 点ret; 标准::副本(X,X+dims,ret.X); 返回ret; } //嗯 点toint(){ 点ret; 标准::副本(X,X+dims,ret.X); 返回ret; } };//结

关于我在这里已经提到的点结构:

是否有可能将函数toint()替换为强制转换运算符(int)

名称空间点{
模板
结构点{
tx[dims];
//嗯???
模板运算符U()常量{
点ret;
标准::副本(X,X+dims,ret.X);
返回ret;
}
//嗯???
点运算符int()常量{
点ret;
标准::副本(X,X+dims,ret.X);
返回ret;
}
//嗯
点toint(){
点ret;
标准::副本(X,X+dims,ret.X);
返回ret;
}
};//结构点
模板
点<2,T>创建(T X0,T X1){
点<2,T>ret;
ret.X[0]=X0;ret.X[1]=X1;
返回ret;
}
}; //名称空间点
内部主(空){
使用名称空间点;
点<2,双>p2d=Point::Create(12.3,34.5);
点<2,int>p2i=(int)p2d;//ähhm???
std::coutc;
返回0;
}  
我认为问题在于C++无法区分不同的返回类型吗?非常感谢。 问候
Oops

正确的语法是

 operator int() const {
    ...
当您重载cast操作符时,不需要额外的返回类型

当你说
(int)x
时,编译器实际上希望得到
int
,而不是
点。可能您需要一个构造函数

 template <typename U>
 Point(const Point<dims, U>& other) { ... }
模板
点(常数点和其他){…}
正确的语法是

 operator int() const {
    ...
当您重载cast操作符时,不需要额外的返回类型

当你说
(int)x
时,编译器实际上希望得到
int
,而不是
点。可能您需要一个构造函数

 template <typename U>
 Point(const Point<dims, U>& other) { ... }
模板
点(常数点和其他){…}

您的语法错误。是否要强制转换为int?是否要强制转换到其他类型点?语法错误。是否要强制转换为int?你想转换到不同的类型点吗?是的!谢谢,这可能是最好的解决方案。不需要其他答案。其他正确语法:
运算符点()
;)但是使用构造函数进行转换是一个更好的主意。是的!谢谢,这可能是最好的解决方案。不需要其他答案。其他正确语法:
运算符点()
;)但是使用构造函数进行转换是一个更好的主意。