Класс С++ не распознает строковый тип данных

Я работаю над программой из моего учебника на С++, и это в первый раз, когда я действительно столкнулся с трудностями. Я просто не могу понять, что здесь не так. Visual Studio говорит мне Ошибка: идентификатор "строка" - undefined.

Я разделил программу на три файла. Файл заголовка для спецификации класса, файл .cpp для реализации класса и основного файла программы. Это инструкции из моей книги:

Напишите класс Car, который имеет следующие переменные-члены:

год. int, который содержит модельный год автомобиля.

сделать. A string, который содержит марку автомобиля.

скорость. int, который поддерживает скорость автомобиля.

Кроме того, класс должен иметь следующие функции-члены.

Конструктор. Конструктор должен принимать в качестве аргументов автомобиль year и make и присваивать эти значения объектным переменным-членам year и make. Конструктор должен инициализировать переменную-член speed до 0.

Accessors. Должны быть созданы соответствующие функции доступа, позволяющие извлекать значения из переменных объекта year, make и speed.

Есть больше инструкций, но они не нужны, чтобы заставить эту часть работать.

Вот мой исходный код:

// File Car.h -- Car class specification file
#ifndef CAR_H
#define CAR_H
class Car
{
private:
    int year;
    string make;
    int speed;
public:
    Car(int, string);
    int getYear();
    string getMake();
    int getSpeed();
};
#endif


// File Car.cpp -- Car class function implementation file
#include "Car.h"

// Default Constructor
Car::Car(int inputYear, string inputMake)
{
    year = inputYear;
    make = inputMake;
    speed =  0;
}

// Accessors
int Car::getYear()
{
    return year;
}

string Car::getMake()
{
    return make;
}

int Car::getSpeed()
{
    return speed;
}


// Main program
#include <iostream>
#include <string>
#include "Car.h"
using namespace std;

int main()
{

}

Я еще ничего не писал в основной программе, потому что я не могу получить класс для компиляции. Я связал файл заголовка с основной программой. Заранее благодарим всех, кто тратит время на изучение этой проблемы для меня.

Ответ 1

Вы забыли # включить заголовок строки, и вам нужно полностью квалифицировать использование string до std::string, исправленный код должен быть.

// File Car.h -- Car class specification file
#ifndef CAR_H
#define CAR_H

#include <string>

class Car
{
private:
    int year;
    std::string make;
    int speed;
public:
    Car(int, string);
    int getYear();
    std::string getMake();
    int getSpeed();
};
#endif


// File Car.cpp -- Car class function implementation file
#include "Car.h"

// Default Constructor
Car::Car(int inputYear, std::string inputMake)
{
    year = inputYear;
    make = inputMake;
    speed =  0;
}

// Accessors
int Car::getYear()
{
    return year;
}

Вы можете поместить using namespace std; в начало Car.cpp, и это позволит вам использовать строку без std:: qualifier в этом файле. Однако НЕ помещайте один из них в заголовок, потому что это очень плохой mojo.

В качестве примечания вы должны всегда включать все, что требуется в декларации класса в заголовке перед телом класса, вы никогда не должны полагаться на исходный файл клиента, включая файл (например, <string>), прежде чем он включит ваш заголовок.

Что касается этой части вашей задачи:

Конструктор. Конструктор должен принять автомобиль год и сделать как аргументов и присвоить эти значения год объекта и участник переменные. Конструктор должен инициализировать переменную члена скорости до 0.

Лучшей практикой является использование списка инициализаторов в конструкторе, например:

// Default Constructor
Car::Car(int inputYear, string inputMake)
  : year(inputYear),
    make(inputMake),
    speed(0)

{

}

Ответ 2

Вы должны использовать полное имя std::string, или вы забыли включить заголовок <string>. Или и то, и другое.

Ответ 3

Я подозреваю, что вам нужен ваш #include <string> в верхней части файла, выше, где вы используете тип string.

Ответ 4

#include <string> НЕ работает. Вы должны положить using namespace std ; над кодом.

Ответ 5

Выполнение std::string будет работать, но достаточно громоздко писать каждый раз. Чтобы заставить его работать для любой строки без выполнения std:: каждый раз, просто поместите эти две строки кода вверху вашего файла заголовка:

#include < string >;

using namespace std;

И ты в порядке!