C ++类无法识别字符串数据类型

时间:2010-05-20 22:45:26

标签: c++ constructor string

我正在从我的C ++教科书中学习一个程序,这是我第一次遇到麻烦。我似乎无法看到这里有什么问题。 Visual Studio告诉我错误:标识符“string”未定义。

我将程序分成三个文件。类规范的头文件,类实现的.cpp文件和主程序文件。这些是我书中的说明:

编写一个名为Car的类,其中包含以下成员变量:

即可。保持汽车模型年的int

即可。保持汽车品牌的string

速度即可。保持汽车当前速度的int

此外,该类应具有以下成员函数。

构造即可。构造函数应接受汽车的yearmake作为参数,并将这些值分配给对象的yearmake成员变量。构造函数应将speed成员变量初始化为0

访问者即可。应创建适当的访问器函数,以允许从对象的yearmakespeed成员变量中检索值。

还有更多说明,但没有必要让这部分工作。

这是我的源代码:

// 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 个答案:

答案 0 :(得分:13)

您忘记了#include字符串标题,并且您需要完全限定stringstd::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)

{

}

答案 1 :(得分:10)

您应该使用完全限定名称std::string,否则您忘记包含<string>标题。或两者兼而有之。

答案 2 :(得分:5)

我怀疑您需要在文件的顶部处使用#include <string>,在您使用string类型的位置上方。

答案 3 :(得分:2)

#include <string>不起作用。您应该将using namespace std ;放在代码上方。

答案 4 :(得分:1)

您需要添加以下两行:

#include <字符串>;

使用std :: string;

答案 5 :(得分:-2)

执行std::string会有效,但每次编写都很麻烦。要使它适用于所有字符串而不是每次都执行 std :: ,只需将这两行代码放在头文件的顶部:

#include < string >;

using namespace std;

你很高兴去!