Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在‘之前应为类名;{&x2019;代币_C++_Inheritance_Forward Declaration - Fatal编程技术网

C++ 在‘之前应为类名;{&x2019;代币

C++ 在‘之前应为类名;{&x2019;代币,c++,inheritance,forward-declaration,C++,Inheritance,Forward Declaration,我收到错误信息: In file included from proprietario.h:5, from veiculo.h:4: motocicleta.h:8: error: expected class-name before ‘{’ token Motocicleta.h: #ifndef __MOTOCICLETA__ #define __MOTOCICLETA__ #include <iostream> #include "veicu

我收到错误信息:

In file included from proprietario.h:5,
                 from veiculo.h:4:
motocicleta.h:8: error: expected class-name before ‘{’ token
Motocicleta.h:

#ifndef __MOTOCICLETA__
#define __MOTOCICLETA__
#include <iostream>
#include "veiculo.h"
#include "proprietario.h"
using namespace std;
class Proprietario;
class Motocicleta:public Veiculo{

public:
  Motocicleta(int nPassageiros, string modelo, string placa, int aFabricacao, Proprietario* pai, int nRodas, int aro);
  ~Motocicleta();
  Motocicleta (const Motocicleta& source);
  Motocicleta& operator= (const Motocicleta& source);

  string toString();

};                     
#endif
\ifndef\uu MOTOCICLETA__
#定义__
#包括
#包括“veiculo.h”
#包括“proprietario.h”
使用名称空间std;
所有权阶级;
运动类:公共静脉{
公众:
Motoccileta(位于北帕萨盖罗斯、弦乐模型、弦乐板、阿法布里卡奥、帕伊、诺达斯、阿罗);
~motoccileta();
Motoccileta(const Motoccileta&source);
Motocicleta和运算符=(常量Motocicleta和源);
字符串toString();
};                     
#恩迪夫
所有权

#ifndef __PROPRIETARIO__
#define __PROPRIETARIO__

#include <iostream>
#include "motocicleta.h"
#include "caminhao.h"
#include "carreta.h"
#include "carro.h"

using namespace std;

class Carro;
class Carreta;
class Caminhao;
class Motocicleta;

class Proprietario{
protected:
  string nome;
  string cpf;
  Motocicleta* mMoto;
  Caminhao* mCaminhao;
  Carreta* mCarreta;
  Carro* mCarro;
};
#ifndef#__
#定义所有权__
#包括
#包括“motocicleta.h”
#包括“caminhao.h”
#包括“carreta.h”
#包括“carro.h”
使用名称空间std;
卡罗级;
卡雷塔级;
卡明浩类;
原叶蝉纲;
所有权阶级{
受保护的:
字符串名称;
串cpf;
Motoccileta*mMoto;
卡明浩*麦卡明浩;
卡雷塔*麦卡雷塔;
卡罗*麦卡洛;
};
静脉h:

#ifndef __VEICULO__
#define __VEICULO__
#include <iostream>
#include "proprietario.h"
#include "roda.h"
#include "motor.h"

using namespace std;
class Motor;
class Proprietario;
class Veiculo{
protected:
  int nPassageiros;
  string modelo;
  string placa;
  int aFabricacao;
  Proprietario* pai;
  Roda* rodas;
  Motor* mMotor;
  int nRodas;
  };
\ifndef\uu VEICULO__
#定义__
#包括
#包括“proprietario.h”
#包括“roda.h”
#包括“电机h”
使用名称空间std;
类电机;
所有权阶级;
静脉类{
受保护的:
int nPassageiros;
弦模型;
弦板;
int AFABRICAO;
所有权*派;
罗达*罗达;
电动机;
内特诺达斯;
};
我删除了这些方法,因为如果我添加这些方法,问题将变得很长,对不起,代码在PT-BR中。 我看到问题通常是提前申报。 但是我找不到问题,我看了很多论坛,但是我找不到问题

有人能帮我吗


需要代码的任何其他部分吗?

这里真正的问题是自由使用
#include
预处理器指令。通常,您应该只在需要的最低范围包含头文件,并向前声明您可以声明的所有内容。您根本不(不应该)这样做通常需要头文件的完整类声明。头文件通常不需要知道实现细节。您绝对不应该转发声明并包含头文件


在编写此答案时,代码就在问题中,您对veiculo.h(以及proprietario.h)有一个循环依赖关系.由于veiculo.h确实是其子类
Motocicleta
的标头所必需的,因此您应该删除已在每个标头中转发声明的类的
\include
指令。然后,您可以根据需要将标头包含在源文件中。

您是否错过了Proprietario.ha的
\endif
nd Veiculo.h或者它们只是在复制粘贴中掉下来的?@Shahbaz如果这不是复制粘贴错误,那么错误消息应该是
预期的#endif
@LuchianGrigore我知道,这就是为什么我没有把它作为一个答案来写。我只是想把它作为一个附带错误来提一下。对不起,我真的忘了。Motocicleta.h错过了Veiculo的声明。如果您仔细地遵循包括(从原始帖子,当Veiculo.h在第4行包括proprietario.h时),那么您会看到Motocicleta声明Veiculo时,Veiculo还没有出现。