C++ VC++;编译器和类型转换?
当我将一个程序从Mac移到这台Windows PC上时,VC++2008编译器给了我错误,因为它将无符号整数传递给了cmath pow()函数。据我所知,此函数不会重载以接受除浮点数以外的任何内容 是否存在忽略这些错误的编译器标志/设置?还有人知道如何找到VC++编译器上的文档吗 编辑C++ VC++;编译器和类型转换?,c++,visual-studio,compiler-construction,types,cmath,C++,Visual Studio,Compiler Construction,Types,Cmath,当我将一个程序从Mac移到这台Windows PC上时,VC++2008编译器给了我错误,因为它将无符号整数传递给了cmath pow()函数。据我所知,此函数不会重载以接受除浮点数以外的任何内容 是否存在忽略这些错误的编译器标志/设置?还有人知道如何找到VC++编译器上的文档吗 编辑 这不是警告,而是错误。然而,对我来说这不是一个问题,因为我的程序只处理以整数形式出现的数字,所以我不在乎它们是否是浮点数。如果只是警告,我会继续我的生活,但它不允许我编译。我能以某种方式抑制错误吗?就像我说的,我
这不是警告,而是错误。然而,对我来说这不是一个问题,因为我的程序只处理以整数形式出现的数字,所以我不在乎它们是否是浮点数。如果只是警告,我会继续我的生活,但它不允许我编译。我能以某种方式抑制错误吗?就像我说的,我的Mac电脑上没有出现错误,程序也很好。我不知道有什么标志,但是清除警告对我来说很容易。只需双击“任务列表”中的每个警告,并添加相应的强制类型,无论您是否愿意
(double) my_variable
或
static\u cast(my\u变量)
我猜如果你得到的是含糊不清的警告,那么在某个地方定义了多个pow函数。无论如何,在我看来,最好是直言不讳。值得一提的是,我的投票选择了静态施法选项。我不知道有国旗,但对我来说,摆脱警告已经很容易了。只需双击“任务列表”中的每个警告,并添加相应的强制类型,无论您是否愿意
(double) my_variable
或
static\u cast(my\u变量)
我猜如果你得到的是含糊不清的警告,那么在某个地方定义了多个pow函数。无论如何,在我看来,最好是直言不讳。值得一提的是,我的投票支持static_cast选项。正如Mehrdad提到的,使用
\pragma warning
语法禁用警告。文件在此-
我倾向于修正警告,而不是隐藏它们 如Mehrdad所述,使用
#pragma warning
语法禁用警告。文件在此-
我倾向于修正警告,而不是隐藏它们 关于这里的其他答案,告诉问题作者关闭此警告不是一个好主意。他的代码被破坏了-他传递的是一个无符号的int而不是float。你应该告诉他修改密码 这不是警告,而是错误。然而,对我来说,这不是一个问题,因为我的 这个程序只处理作为整数的数字,所以我不在乎 它们不是浮子。如果只是警告,我会继续我的生活,但事实并非如此 让我来编译。我能以某种方式抑制错误吗?就像我说的,这些错误不是 在我的Mac上,程序很好 整数和浮点在内部使用不同的表示形式。如果int和float中的数字相同,则它们在存储器中的位模式完全不同。在任何情况下,如果您传递的是一个整数,而您应该传递一个浮点,那么您都不能期望您的代码能够工作 此外,我断言您的Mac代码要么在默默地使用该函数的重载版本(例如,您在该平台上使用C++进行编译),要么您认为它可以工作,而实际上它是偶然工作的,或者实际上不工作 补遗 任何编写的编译器都无法关闭错误 警告意味着编译器认为您犯了错误
错误意味着编译器不知道该做什么。关于此处的其他答案,最好不要告诉问题作者关闭此警告。他的代码被破坏了-他传递的是一个无符号的int而不是float。你应该告诉他修改密码 这不是警告,而是错误。然而,对我来说,这不是一个问题,因为我的 这个程序只处理作为整数的数字,所以我不在乎 它们不是浮子。如果只是警告,我会继续我的生活,但事实并非如此 让我来编译。我能以某种方式抑制错误吗?就像我说的,这些错误不是 在我的Mac上,程序很好 整数和浮点在内部使用不同的表示形式。如果int和float中的数字相同,则它们在存储器中的位模式完全不同。在任何情况下,如果您传递的是一个整数,而您应该传递一个浮点,那么您都不能期望您的代码能够工作 此外,我断言您的Mac代码要么在默默地使用该函数的重载版本(例如,您在该平台上使用C++进行编译),要么您认为它可以工作,而实际上它是偶然工作的,或者实际上不工作 补遗 任何编写的编译器都无法关闭错误 警告意味着编译器认为您犯了错误
错误意味着编译器不知道该做什么。C++为
pow
/powf
重载int
指数。注意警告。C++对pow
/powf
对int
指数具有重载。注意警告。不要忽略此警告或任何警告。修好它们。编译器是你的朋友,试图让你写出好代码。一个朋友相信坚强的爱情,但他是你的朋友
如果您有一个无符号整数,并且需要一个浮点,请将无符号整数转换为浮点
这是该语言的VC++实现和IDE本身的文档。不要忽略此警告或任何警告。修好它们。编译器是你的朋友,试图让你写出好代码。一个朋友相信坚强的爱情,但他是你的朋友 如果您有一个无符号整数,并且需要一个浮点,请将无符号整数转换为浮点 这是该语言的VC++实现和IDE本身的文档
pow((double)i, (double)j)
pow(static_cast<double>(i), static_cast<double>(j))
std::pow(static_cast<double>(i), j);