这个问题已经在这里有了答案:
7年前关闭。
刚从pdf中复制了一些代码到C++ builder XE2和Visual Studio Express 2012中。这两个编译器都给出了有关歧义的错误代码。我才刚开始,所以我真的不知道该怎么办。也许我的教科书(pdf)现在已经过时了?它被称为“在14天内学习c++”。好吧,这里是复制的代码。
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
#pragma hdrstop
void getSqrRoot(char* buff, int x);
int main(int argc, char** argv)
{
int x;
char buff[30];
cout << “Enter a number: “;
cin >> x;
getSqrRoot(buff, x);
cout << buff;
getch();
}
void getSqrRoot(char* buff, int x)
{
sprintf(buff, “The sqaure root is: %f”, sqrt(x));
}
我在c++ builder中得到的错误代码是:
[BCC32错误] SquareRoot.cpp(19):E2015在c:\ program files(x86)\ embarcadero \ rad studio \ 9.0 \ include \ windows \ crtl \ math.h:266的'std::sqrt(float)之间存在歧义'和'std::sqrt(long double)at c:\ program files(x86)\ embarcadero \ rad studio \ 9.0 \ include \ windows \ crtl \ math.h:302'
完整的解析器上下文
SquareRoot.cpp(18):解析:void getSqrRoot(char *,int)
附带一提,我的pdf手册中的引号与普通的“我键入的字符”不同。这些“”也与编译器不兼容。也许有人也知道解决方法吗?在此先感谢您。
最佳答案
像这样更改代码:
void getSqrRoot(char* buff, int x)
{
sprintf(buff, “The sqaure root is: %f”, sqrt((float)x));
}
由于平方根是重载函数,因此编译器没有机会将int x值隐式转换为float或double值,因此您需要直接执行此操作。
Compiler: see sqrt(int) -> what to choose? sqrt(float)/sqrt(double) ?
Compiler: see sqrt((float)int) -> sqrt(float), ok!
Compeler: see sqrt((double)int) -> sqrt(double), ok!
关于c++ - 歧义平方根,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13874096/