我收到了.cpp错误无效使用未定义的结构PelephonePN,CellcomPN等等 以及PelephonePN前向声明的误差。...
#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);
}
答案 0 :(得分:1)
要实例化一个对象,前向声明就不够了。在源文件中包含相应的标头。在构造函数的主体中,您将实例化mpPelephone, ....
。因此,请确保在翻译单元中可以看到相应的类标题。
答案 1 :(得分:1)
在.cpp
源文件中,您需要#include
定义class PelephonePN
及其关联的标头。
如果你只是将它们用作指针或引用,那么在标题中转发声明这些class
是很好的,但你可以使用开始在实现中,您需要为编译器提供定义。
答案 2 :(得分:0)
您不能使用类的前向声明来访问其成员(包括构造函数,默认或其他)或其大小,如果没有这两件事,您就无法实例化该类的实例。
您需要完整的实现才能执行此操作,因此在.cpp
文件中,您需要在整个class PelephonePN {/* class body */};
部分中包含标题。
答案 3 :(得分:0)
在第一个文件中有行:
#ifndef PHONE_H_INCLUDED
#define PHONE_H_INCLUDED
我想你在phone.h中有相同的行,请检查......
答案 4 :(得分:0)
你的PelephonePN和合作伙伴吗?在特定的命名空间?如果是这样,预解释必须都在同一名称空间中。既然你添加了一个using namespace std(叹气),我的猜测是phone.h在命名空间std中定义你的类(我希望它没有,但那是另一回事)。 如果是这样,您的预先声明必须是: namespace std { PelephonePN类; }
不过,什么是pelephone ??? O.O