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文件中添加这些标题。。谢谢