【发布时间】:2011-05-12 07:28:16
【问题描述】:
我有一个类 Vehicle(vehicle.h 和 vehicle.cpp)。如果我不将包含内容放在头文件中,Visual Studio 会给我错误。为什么是这样?在我之前的 2 个作业中,我将包含在 .cpp 文件中并且没有任何问题。这是我想要工作但不是:
车辆.h:
#ifndef VEHICLE_H
#define VEHICLE_H
using namespace std;
class Vehicle
{
public:
Vehicle();
Vehicle(string mfr, int cylinders, Person owner);
string getManufacturer();
int getNumOfCylinders();
Person getOwner();
private:
string manufacturer;
int numOfCylinders;
Person owner;
};
#endif
车辆.cpp:
#include <iostream>
#include <string>
using namespace std;
#include "person.h"
#include "vehicle.h"
Vehicle::Vehicle()
{
//Initialize with defaults
}
Vehicle::Vehicle(string mfr, int cylinders, Person owner)
{
//Initialize with parameters
}
string Vehicle::getManufacturer()
{
return manufacturer;
}
int Vehicle::getNumOfCylinders()
{
return numOfCylinders;
}
Person Vehicle::getOwner()
{
return owner;
}
person.h:
#ifndef PERSON_H
#define PERSON_H
class Person {
public:
//default constructor
Person();
//constructor with two parameters
Person(string the_name, string no);
//accessor member functions
string get_name() const;
string getDriverLicenseNo() const;
//overloaded equal operator
bool operator==(const Person& p);
//overloaded extraction operator
friend istream& operator >> (istream& in, Person& p);
//overloaded insertion operator
friend ostream& operator <<(ostream& out, Person& p);
private:
string name;
string drivingLicenseNo;
};
#endif
person.cpp:
#include <iostream>
#include <string>
using namespace std;
#include "person.h"
//default constructor
Person::Person(){}
//constructor with two parameters
Person::Person(string the_name, string no){}
//accessor member functions
string Person::get_name() const
{
return name;
}
string Person::getDriverLicenseNo() const
{
return drivingLicenseNo;
}
//overloaded equal operator
bool Person::operator==(const Person& p)
{
return false;
}
//overloaded extraction operator
istream& operator >> (istream& in, Person& p)
{
return in;
}
//overloaded insertion operator
ostream& operator <<(ostream& out, Person& p)
{
return out;
}
卡车.h:
#include "vehicle.h"
class Truck: public Vehicle
{
};
卡车.cpp:
#include "person.h"
#include "vehicle.h"
//implement truck here
例如几个错误:
错误 C2061:语法错误:标识符“字符串”
错误 C2146:语法错误:缺少 ';'在标识符“getManufacturer”之前
错误 C2061:语法错误:标识符“字符串”
错误 C2535:“Person::Person(void)”:成员函数已定义或声明
错误 C2146:语法错误:缺少“;”在标识符“get_name”之前
错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
错误 C2146:语法错误:缺少 ';'在标识符“getDriverLicenseNo”之前
【问题讨论】:
-
你能把错误信息作为cmets放在代码中,这样我们就知道每个人在说哪一行了吗?
-
当然,我猜这不是问题,但此时我没有移动任何东西,我总共有 41 个错误。有没有办法让视觉工作室以某种方式将其放入代码中?当我移动包含时,错误消失了,所以我很确定就是这样。我只是想了解如何正确地做到这一点,而不是每次都与编译器争吵。
-
请永远不要将
using namespace std;放在标题中。