C++ 错误:结构的正向声明

C++ 错误:结构的正向声明,c++,oop,forward-declaration,C++,Oop,Forward Declaration,我收到错误信息: proprietario.cpp:36: error: invalid use of incomplete type ‘struct Motocicleta’ proprietario.h:12: error: forward declaration of ‘struct Motocicleta’ Motocicleta.h: #ifndef __MOTOCICLETA__ #define __MOTOCICLETA__ #include <iostream> #

我收到错误信息:

proprietario.cpp:36: error: invalid use of incomplete type ‘struct Motocicleta’
proprietario.h:12: error: forward declaration of ‘struct Motocicleta’
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“xxx.h”
),或者应该向前声明类(
class xxx;
)。您似乎在标题中同时执行了这两项操作,导致在真正声明之后进行向前声明,这可能是上述问题的原因。

在第36行的Proprietario.cpp中,您使用了类Motocicleta,但没有首先包含完整的类声明(您只有向前声明).

您的
#包含的
比您需要的多。如果您只需要一个转发声明,那么也不需要包含头文件。例如,在Proprietario.h中,您只使用指向
Motocicleta
Caminhao
Carreta
Carro
的指针,因此您只需要转发声明,而不需要包含“motocicicleta.h”
,就可以删除它


但这并不能完全解释这个错误。我认为如果你简化你的标题,它将更容易跟踪错误。如果看不到proprietario.cpp以及您从问题中列出的标题中删除的内容,我无法确定错误的原因。

哪一行是哪一行?在错误消息中的指定行发布代码那些cpp太大了,我只添加调用^^^在您之前的问题中,我回答说您应该删除include并尽可能只保留转发声明。在我看来,你似乎在寻找一个人来获取你的代码,修复它,然后发回正确的版本。发布
proprietario.cpp
的内容。这里的错误是“
无效地使用不完整的类型'struct Motocicleta'
”,“
转发声明'struct Motocicleta'
”只是一个有用的注释(您的编译器在错误中加入了它以帮助您)。我解决了这个问题。。我需要在cpp文件中添加这些标题。。谢谢