无效使用未定义的类型"结构 PelephonePH"

Invalid use of undefined type 'struct PelephonePH'

本文关键字:结构 PelephonePH 类型 未定义 无效      更新时间:2023-10-16

我在.cpp中收到了无效使用未定义结构PelephonePN、CellcomPN等的错误以及PelephonePN正向声明的.h错误,。。。

#ifndef PHONE_H_INCLUDED
#define PHONE_H_INCLUDED
#include <iostream>
#include <ctime>
#include <string>
#include "phone.h"
using namespace std;
class PhoneNumber;
class PelephonePN;
class CellcomPN;
class OrangePN;
class HotPN;
class BezeqPN;
class PhoneManager
{
private:
    PelephonePN* mpPelephone;
    CellcomPN* mpCellcom;
    OrangePN* mpOrange;
    HotPN* mpHot;
    BezeqPN* mpBezeq;
public:
    PhoneManager();
    ~PhoneManager();
    void split_check_data(string str);
};
#endif

和.cpp

#include <iostream>
#include <ctime>
#include <string>
#include <sstream>
#include "phone_manager.h"
#include "phone.h"

using namespace std;
PhoneManager::PhoneManager()
{
    srand(time(0));
    mpPelephone = new PelephonePN();
    mpCellcom = new CellcomPN();
    mpOrange = new OrangePN();
    mpHot = new HotPN();
    mpBezeq = new BezeqPN();
    mpPelephone->add(mpCellcom);
    mpPelephone->add(mpOrange);
    mpPelephone->add(mpHot);
    mpPelephone->add(mpBezeq);
    mpBezeq->setNext(mpPelephone);
}

要实例化对象,前向声明是不够的。在源文件中包括相应的标头。在构造函数的主体中,您正在实例化mpPelephone, ....。因此,请确保在翻译单元中可以看到相应的类标头。

.cpp源文件中,您需要#include定义class PelephonePN及其关联的标头。

如果您仅将这些classes用作指针或引用,则可以在标头中正向声明,但如果您在实现中使用来启动,则需要向编译器提供定义

您不能使用类的前向声明来访问其成员(包括构造函数、默认构造函数或其他构造函数)或其大小,如果没有这两件事,您就无法实例化该类的实例。

您需要它的FULL实现才能做到这一点,因此在.cpp文件中,您需要将标头包含在整个class PelephonePN {/* class body */};部分中。

在第一个文件中有行:

#ifndef PHONE_H_INCLUDED
#define PHONE_H_INCLUDED

我想你们的电话线是一样的。h,请查收。。。

您的PelephonePN和co是否在特定的命名空间中?如果是这样,则预定义必须都在同一个命名空间中。由于您添加了一个using命名空间std(叹息),我猜测phone.h正在命名空间std中定义您的类(我希望它没有,但那是另一回事)。如果是,您的预先声明必须是:命名空间std{PelephonePN类;}

顺便说一句,什么是pelephone???O.O