我无法在以下代码中打印双精度值?

kif*_*iph 0 c++ double cout

#include <iostream>
#include <iomanip>

using namespace std;

double distance(double, double);

int main ()
{
    double rate, time, distanceValue;

    cout << fixed << showpoint << setprecision(1);

    cout << "Enter rate" << endl;
    cin >> rate;

    cout << "Enter time" << endl;
    cin >> time;

    distanceValue = distance(rate, time);

    cout << "The distance is " << distanceValue << endl;
}

double distance (double num1, double num2)
{
    return num1 * num2;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它时,我看到一长串错误,我没有错在这里!如果我将方法从double更改为int值,它也可以正常工作!! 为什么??

以下错误:

*> C:\ Users\kifcaliph\Desktop\starting

out with c ++\Chapter6> cl 06_012.cpp 06_012 Microsoft(R)32位C/C++优化编译器版本16.00.30319.01 for 80x86版权所有(C)Microsoft Corporation.版权所有.

cl:命令行警告D9024:无法识别的源文件类型"06_012",假定对象文件为06_012.cpp C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xlocale(323):警告C4530:C++异常处理程序使用,但未启用展开语义.指定/ EHsc C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373):错误C2825:'_ Iter':后跟'::'06_012.cpp时必须是类或命名空间( 20):参见使用[_Iter = double]编译的类模板实例化'std :: iterator_traits <_Iter>'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373):error C2039:'iterator_category':不是' global namespace'' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C2146: syntax error : missing ';' b efore identifier 'iterator_category' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C2602: 'std::iterator_traits<_Iter> ::iterator_category' is not a member of a base class of 'std::iterator_traits<_Iter>' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : see declaration of 'std::iterator _traits<_Iter>::iterator_category' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(373) : error C2868: 'std::iterator_traits<_Iter> ::iterator_category' : illegal syntax for using-declaration; expected qualified-name with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374) : error C2825: '_Iter': must be a class or namespace when followed by '::' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374) : error C2039: 'value_type' : is not a memb er of '全局命名空间' 的成员'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374):错误C2146:语法错误:缺少';' 在标识符'value_type'之前C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374):错误C2602:'std :: iterator_traits <_Iter> :: value_type'不是a的成员带有[_Iter = double]的'std :: iterator_traits <_Iter>'的基类C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374):参见'std :: iterator _traits的声明带有[_Iter = double]的<_Iter> :: value_type'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(374):错误C2868:'std :: iterator_traits <_Iter> :: value_type ':使用声明的非法语法; 预期的限定名为[_Iter = double] C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375):错误C2825:'_ Iter':必须是一个类或命名空间,后跟' ::'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375):错误C2039:'difference_type':不是' global namespace'' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : error C2146: syntax error : missing ';' b efore identifier 'difference_type' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : error C2602: 'std::iterator_traits<_Iter> ::difference_type' is not a member of a base class of 'std::iterator_traits<_Iter>' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : see declaration of 'std::iterator _traits<_Iter>::difference_type' with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(375) : error C2868: 'std::iterator_traits<_Iter> ::difference_type' : illegal syntax for using-declaration; expected qualified-name with [ _Iter=double ] C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377) : error C2825: '_Iter': must be a class or namespace when followed by '::' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377) : error C2039: 'pointer' : is not a member of '全局命名空间''C:\ Program Files(x86)的成员)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377):错误C2146:语法错误:缺少';' 在标识符'指针'之前C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377):错误C2602:'std :: iterator_traits <_Iter> :: pointer'不是a的成员带有[_Iter = double]的'std :: iterator_traits <_Iter>'的基类C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377):请参阅'std :: iterator _traits的声明<_Iter> :: pointer'与[_Iter = double] C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(377):错误C2868:'std :: iterator_traits <_Iter> :: pointer ':使用声明的非法语法; 带有[_Iter = double]的预期限定名:C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378):错误C2825:'_ Iter':当后跟'时,必须是类或命名空间' ::'C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378):错误C2039:'reference':不是'`global namespace''C:\ Program Files的成员(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378):错误C2146:语法错误:缺少';' 在标识符'reference'之前C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378):错误C2602:'std :: iterator_traits <_Iter> :: reference'不是a的成员带有[_Iter = double]的'std :: iterator_traits <_Iter>'的基类C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378):请参阅'std :: iterator _traits的声明<_Iter> :: reference'with [_Iter = double] C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\INCLUDE\xutility(378):错误C2868:'std :: iterator_traits <_Iter> :: reference ':使用声明的非法语法; 预期的限定名称为[_Iter = double]

C:\ Users\kifcaliph\Desktop \从c ++\Chapter6开始>*

ild*_*arn 6

猜测(因为你没有真正向我们展示有问题的错误),因为你的using指令std::distance,::distance它之间存在模糊错误.完全限定::distance强制您的函数被调用,或者取消using指令并完全限定所有内容或为std您打算使用的命名空间内的每个符号添加using声明.

另外,你拼错了,distanceValue就像distancValue在最后一行一样main.


bdo*_*lan 5

您看到了 的不幸副作用using namespace std;。有一个函数叫做std::distance; 因为您使用using namespace std;它优先于您自己的distance功能。

解决的办法是不使用using namespace std;,而是参考std::coutstd::setprecision等个别。您还可以从std以下位置导入特定标识符:

using std::cout;
using std::setprecision;
using std::fixed;
using std::showpoint;
using std::cin;
using std::endl;
Run Code Online (Sandbox Code Playgroud)

或者您可以继续使用using namespace std;,但明确要求您自己distance使用::distance- 这特别要求与空名称空间保持距离(不推荐;如果添加任何内容std可能会再次中断)。

另外,distancValue是笔误。