我正在从我的C ++教科书中学习一个程序,这是我第一次遇到麻烦。我似乎无法看到这里有什么问题。 Visual Studio告诉我错误:标识符“string”未定义。
我将程序分成三个文件。类规范的头文件,类实现的.cpp文件和主程序文件。这些是我书中的说明:
编写一个名为Car的类,其中包含以下成员变量:
年即可。保持汽车模型年的int
。
请即可。保持汽车品牌的string
。
速度即可。保持汽车当前速度的int
。
此外,该类应具有以下成员函数。
构造即可。构造函数应接受汽车的year
和make
作为参数,并将这些值分配给对象的year
和make
成员变量。构造函数应将speed
成员变量初始化为0
。
访问者即可。应创建适当的访问器函数,以允许从对象的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()
{
}
我还没有在主程序中写任何东西,因为我无法编译类。我只将头文件链接到主程序。提前感谢所有花时间为我调查此问题的人。
答案 0 :(得分:13)
您忘记了#include字符串标题,并且您需要完全限定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)
{
}
答案 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;
你很高兴去!