Класс C ++ не распознает строковый тип данных - PullRequest
13 голосов
/ 21 мая 2010

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

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

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

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

сделать . 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()
{

}

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

Ответы [ 6 ]

13 голосов
/ 21 мая 2010

Вы забыли # включить заголовок строки, и вам необходимо полностью указать, что вы используете от 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 :: в этом файле. Однако НЕ помещайте один из них в заголовок, потому что это очень плохой мохо.

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

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

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

Рекомендуется использовать список инициализаторов в конструкторе, например:

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

{

}
10 голосов
/ 21 мая 2010

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

5 голосов
/ 21 мая 2010

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

2 голосов
/ 01 декабря 2012

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

1 голос
/ 23 апреля 2019

вам нужно добавить эти 2 строки:

# include ;

с использованием std :: string;

0 голосов
/ 13 ноября 2012

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

#include < string >;

using namespace std;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...