C++ 错误:在';之前应为类名;{';令牌错误

C++ 错误:在';之前应为类名;{';令牌错误,c++,C++,我的程序中有一个恼人的错误 “Vehicle”是基本类。 “自行车”扩展了这一类 #ifndef BICYCLE_H #define BICYCLE_H #include "Vehicle.h" #include <string> #include <iostream> using namespace std; //Template class which is derived from Vehicle template<typename T> clas

我的程序中有一个恼人的错误

“Vehicle”是基本类。 “自行车”扩展了这一类

#ifndef BICYCLE_H
#define BICYCLE_H

#include "Vehicle.h"

#include <string>
#include <iostream>
using namespace std;

//Template class which is derived from Vehicle
template<typename T>
class Bicycle: public Vehicle
{
public:
    Bicycle();
    Bicycle(int, int, string, int); 
    ~Bicycle();

    //Redefined functions inherited from Vehicle
    void move(int, int); // move to the requested x, y location divided by 2
    void set_capacity(int); // set the capacity value; can't be larger than 2

};
\ifndef BICYCLE\u H
#定义自行车
#包括“Vehicle.h”
#包括
#包括
使用名称空间std;
//从车辆派生的模板类
模板
自行车类别:公共车辆
{
公众:
自行车();
自行车(int,int,string,int);
~Bicycle();
//从车辆继承的重新定义的功能
void move(int,int);//移动到请求的x,y位置除以2
void set_capacity(int);//设置容量值;不能大于2
};
上面是Bicycle.h文件(我没有这个类的.cpp文件)

#如果车辆不可用#
#定义车辆
#包括“PassengerException.h”
#包括
#包括
使用名称空间std;
//在此处添加行以使其成为模板类
模板
等级车辆
{
公众:
Vehicle();//默认contstructor
车辆(int,int,string,int);//设置x,y,名称和容量
virtual~Vehicle();//析构函数;这应该是虚拟的还是非虚拟的???
//继承-问题#1;在此处和Bicycle类中创建这些函数
字符串get_name();//获取车辆的名称
void set_name(string);//设置车辆名称
void print();//std print函数(提供给您)
//多态性-问题2
虚空移动(int,int);//移动到请求的x,y位置
虚空集_容量(int);//设置容量值
//运算符重载-问题3
车辆操作员+(车辆和第二辆车辆)施工;
//例外情况——问题4
T get_passenger(int)throw(PassengerException);//在指定索引处获取乘客
void add_passenger(T)throw(PassengerException);//添加乘客和当前乘客索引
void remove_passenger()throw(PassengerException);//使用当前乘客索引删除乘客
受保护的:
int x_pos;
国际邮政局;
字符串名;
国际能力;
T*乘客;
国际流动人口;
};
上面是Vehicle.h文件。我也没有用于此的.cpp

另外,ifndef定义endif意味着什么?我必须使用它们吗?它们是必需的吗


<>和,它们的名字必须这样格式化吗?< /P> < P>,对于实际的基础文件,即C++文件本身,IFNDEF定义和Endif是必需的。如果你计划使用这些函数和变量,则它们是必需的。是的,它们的名称必须以这种方式格式化,这是指令的方式,或者在某些情况下,必须是B的标志。e格式化。

您必须将
#endif
放在头文件的末尾。这些被称为定义保护,以防止头文件多次包含。有关详细信息,请参阅

车辆是一个模板,因此您需要:

class Bicycle: public Vehicle<T>
class自行车:公共车辆

#ifndef和#define和#endif被称为头保护,用于防止头文件被多次包含,从而导致事物(类)被多次声明。

ifndef endif只声明类一次。你是在问(#ifndef)如果类没有定义,如果不是,你就定义它。这是要做的标准工作。非常感谢。谢谢解决了我的问题。还有一件事,格式化这些防护的规则是什么?有时我会在字符串前面看到u,而没有与xxx.h或xxx.cpp中的文件类似,但不要以下划线开头,使用唯一的名称,并保持一致。#定义也应该是所有大写。我更喜欢使用名为say
Vehicle.h
的文件来命名
Vehicle\u h
,因为它在您的帖子中。
class Bicycle: public Vehicle
class Bicycle: public Vehicle<T>