Использование 'std :: cin' с членом структуры данных [duplicate]

0

Мой исходный код:

#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 Character Console! (JCC v1.0)\n";
    std::cout << "==============================================\n\n";

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

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

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

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

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

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

    return 0;
}

Проблема:

Ошибка возникает в 'std :: cin >> character.name;' выражение. Я полный, абсолютный новичок в C++. Я делал эту программу изучать канаты структур данных, но я столкнулся с этой ошибкой. Как я могу просто переписать этот код, чтобы я мог вводить данные в member.name? Кроме того, будут высоко оценены любые консультации экспертов; У меня мало знаний C++. Спасибо, сообщество SOF.

Ошибка:

"Нестатическая ссылка на элемент должна быть относительно заданного объекта".

  • 2
    Какие ошибки вы получаете?
  • 0
    Вам нужно сделать экземпляр character . character - это имя класса, а не объекта.
Показать ещё 5 комментариев
Теги:
data-structures
iostream

3 ответа

3
Лучший ответ

character - это имя класса (т.е. это тип). То, что вы делаете, эквивалентно cin >> int.name что не имеет смысла, потому что int - это тип и ключевое слово, а не объект.

Примечание. Нельзя сказать, что character является целым числом. Это два разных типа. Другое отличие состоит в том, что character является типом класса, а int является встроенным неклассовым типом.

Вам нужно создать объект типа character, которые вы можете использовать. Вы делаете это, делая:

character myChar;

Затем вы выполните следующее:

std::cin >> myChar.name;
  • 0
    Спасибо, поэтому объявление структуры по умолчанию делает его целым числом?
  • 0
    @ Jake2k13 Нет! Извините, это была просто аналогия. Когда вы создаете класс или структуру, это ваш собственный определяемый пользователем тип. :)
3

Вам нужно объявить экземпляр символа struct:

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

Вероятно, вы должны объявить структуру вне основной функции. Однако вы можете создать экземпляр класса следующим образом:

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

Если вы собираетесь это сделать, я бы изменил имена. Этот код является законным, но может быть запутанным. Этот синтаксис, по-видимому, используется больше в C.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню