错误:结构的前向声明

时间:2012-03-23 13:33:46

标签: 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>
#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

Proprietario.h

#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中。我看到问题通常是前向声明。但我找不到问题,我看了很多论坛,但我找不到问题..

有人可以帮助我吗?

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

3 个答案:

答案 0 :(得分:11)

在第36行的Proprietario.cpp中,你使用Motocicleta类做了一些事情,但没有先包含完整的类声明(你只有一个前向声明)。

答案 1 :(得分:3)

应该包含声明一个类的标题(#include "xxx.h"该类应该是前向声明的(class xxx;)。你似乎在你的标题中做了两个,导致在真实声明之后的前向声明,这可能是造成这种麻烦的原因。

答案 2 :(得分:2)

您的#include比您需要的多Motocicleta。如果您只需要前向声明,则也不需要包含头文件。例如,在Proprietario.h中,您只使用指向CaminhaoCarretaCarro#include "motocicleta.h"的指针,因此您需要的只是前向声明,您不需要到{{1}},以便删除它。

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