将'std :: cin'与数据结构成员一起使用

时间:2013-12-27 03:35:16

标签: c++ data-structures iostream

我的源代码:

#include <iostream>
#include <string>

int main(void) {

    struct character{

        std::string name;
        unsigned short int age;
        unsigned short int height;
        unsigned short int weight;
    }; 

    std::cout << "==============================================\n";
    std::cout << "Welcome to Jake's Character Console! (JCC v1.0)\n";
    std::cout << "==============================================\n\n";

    std::cout << "Let's start by describing your character..." << std::endl <<     std::endl;

    std::cout << "What is your character's name? ";

    std::cin >> character.name;        \\ <======= ERROR HERE ========

    std::cout << "Let's start by describing your character..." << std::endl << std::endl;

    std::cout << "Let's start by describing your character..." << std::endl << std::endl;

    std::cin.get();
    std::cin.get();

    return 0;
}

问题:

错误发生在&#39; std :: cin&gt;&gt; character.name;&#39;声明。我是C ++的完全绝对新手。我正在制作这个程序来学习数据结构的绳索,但我遇到了这个错误。我怎么能简单地重写这段代码,以便我可以将数据输入到character.name成员?此外,任何专家建议将不胜感激;我没有太多的C ++先验知识。谢谢SOF社区。

错误:

&#39;非静态成员引用必须与指定对象相关。&#39;

3 个答案:

答案 0 :(得分:3)

character是类的名称(即它是一种类型)。你所做的相当于cin >> int.name这是没有意义的,因为int是一个类型和一个关键字,而不是一个对象。

注意:并不是说character 整数。这些是他们自己的两种不同类型。另一个区别是character是类类型而int是内置的非类类型。

您需要创建一个可以使用的character类型的对象。你这样做:

character myChar;

然后你做:

std::cin >> myChar.name;

答案 1 :(得分:3)

您需要声明结构字符的实例:

character c;
c.name = "Cake";
std::cout << c.name << std::endl;
//=> "Cake"

答案 2 :(得分:0)

您应该在主函数之外声明一个结构。但是,您可以像这样创建类的实例:

struct character{
    std::string name;
    unsigned short int age;
    unsigned short int height;
    unsigned short int weight;
}character; 

如果你打算这样做,我会更改周围的名字。此代码是合法的,但可能会令人困惑。这种语法似乎在C中使用得更多。