我收到错误:
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 __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;
};
Veiculo.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;
};
我删除了这些方法,因为如果添加这些方法,问题将会很长,抱歉,代码在PT-BR中。
我看到的问题通常是前向声明。
但是我找不到问题,在很多论坛上都没找到问题。
有人可以帮助我吗?
需要代码的其他部分吗?
最佳答案
真正的问题是自由使用#include
预处理程序指令。通常,只应在需要的最低范围内包含头文件,并向前声明您可以做的所有事情。您通常根本不需要(应该)头文件的完整类声明。头文件通常不需要了解实现细节。您绝对不应该向前声明和包含 header 。
编写此答案时,代码就位于问题中,因此您对veiculo.h(以及proprietario.h)具有循环依赖性。由于veiculo.h确实是其子类Motocicleta
的头文件所必需的,因此您应该删除已经在每个头文件中预先声明的类的#include
指令。然后,您可以根据需要在源文件中包含标题。
关于c++ - ‘{’ token 之前的预期类名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9839421/