C ++期望的不合格ID

时间:2014-01-01 21:20:01

标签: c++ double

我是C ++的初学者。我正在使用Xcode编译我的代码。现在我正在讨论变量并对这个主题做一个简短的练习。练习要求用户输入他们的名字和姓氏以及他们的年龄。作为一个额外的要求,我需要使用双浮点年龄,所以我可以将年龄乘以几个月。以下是我的代码:

#include <iostream>
#include <math.h>

int main()
{
    std::cout << "Please enter your first name, second name, and age (then press enter).\n";
    std::string first;
    std::string last;
    std::double age;
    std::cin >> first >> last >> age;
    std::cout << "Hello, " << first << " " << last << ". Your age is " << age << " and you are " << (age * 12) << " months old.";
    return 0;
}

我收到一条错误消息,指出double是预期的不合格ID。有人可以指出我做错了什么以及正确的做法吗?

4 个答案:

答案 0 :(得分:5)

double不在std命名空间中。你需要

double age;

您还需要包含string的{​​{1}}标头。你可以 在某些实现中间接地从std::string获取它,但你不能依赖它:它是一个侥幸。

答案 1 :(得分:2)

double是内置类型。它不存在于任何命名空间中,也不需要任何限定!只需删除std::前面的double

double age;

注意,您应该测试您的输入是否确实成功:

if (std::cin >> first >> last >> age) {
    // process successful input
}
else {
    std::cout << "ERROR: failed to read expected input\n";
}

答案 2 :(得分:0)

首先,最好包含标题<string>

#include <string>

如果在C#中所谓的内置类型是类的别名,例如double是System.Double的别名,你可以编写

System.Double age;

double age;

在C ++中,这些类型确实是以类型构建的,并使用double关键字来指定类型

double age;

虽然我不明白为什么年龄应该加倍,因为一年中的月数是一个整数值。:)

答案 3 :(得分:0)

我相信下面的代码非常适合学习如何进行这种近乎第一个C ++程序。

您的代码的一个小技术问题只是double是关键字,而不是标准库定义的名称,因此,不在命名空间std中。

另外我添加了

  • 包含以便携方式使用<string>所需的std::string标题,

  • 一个using namespace std;指令,对于小型探索程序非常方便(但不要将它放在头文件的全局命名空间中!),

  • 检查输入操作是否成功(输出也会失败,但这种情况极为罕见)。

我使用布尔“或”(||运算符)检查输入操作失败的方式在C ++中尚未使用,但在其他一些语言中很常见。基本上||的左手参数转换为bool,因为这是||所要求的。左手参数是某些输入操作的表达式结果,它通常是对cin流的引用,然后通过定义的转换生成bool值这相当于写!cin.fail()(其中!是逻辑“非”操作)。

例如,getline( cin, first ) || fail( ... )非常好地读作“getlinefail”,除了读得很好外,它还具有视觉上的独特性,易于识别为故障检查。

#include <iostream>
#include <string>
#include <stdlib.h>             // exit, EXIT_FAILURE
using namespace std;

// Poor man's way to handle failure, but good enough here:
bool fail( string const& message )
{
    cerr << "!" << message << endl;
    exit( EXIT_FAILURE );
}

int main()
{
    cout << "Please enter your first name: ";
    string first;
    getline( cin, first )
        || fail( "Sorry, input of your first name failed." );

    cout << "Please enter your last name: ";
    string last;
    getline( cin, first )
        || fail( "Sorry, input of your last name failed." );

    cout << "Please enter your age in years: ";
    double age;
    cin >> age
        || fail( "Sorry, input of your age failed." );

    cout << "Hello, " << first << " " << last << "." << endl;
    cout
        << "Your age is " << age << " years"
        << " and you are "<< (age*12) << " months old."
        << endl;
}