我有两个相互使用的类作为成员.. 第一类:
#ifndef PROPERTY_H
#define PROPERTY_H
#include "individualProperty.h"
#include "structurizer.h"
#include "p_owner.h"
#include <windows.h>
class p_owner;
class p_property {
private:
p_owner _Owner;
string ownerName;
string propertyAddress;
string taxID;
string postalCode;
bool owes_taxes;
double propertyTaxVal;
double solidWasteTaxVal;
public:
p_owner getOwner() {
return _Owner;
}
void setOwner(p_owner a) { _Owner = a; }
string getPropertyAddress() { return propertyAddress; }
void setPropertyAddress(string a) { propertyAddress = a; }
void setTaxID(string a) { taxID = a; }
string getTaxID() { return taxID; }
void setPostalCode(string a) { postalCode = a; }
string getPostalCode() { return postalCode; }
void setTaxes(bool a) { owes_taxes = a; }
bool getTaxes() { return owes_taxes; }
void setPropertyTaxVal(double a) { propertyTaxVal = a; }
double getPropertyTaxVal() { return propertyTaxVal; }
void setSolidWasteTaxVal(double a) { solidWasteTaxVal = a; }
double getSolidWasteTaxVal() { return solidWasteTaxVal; }
p_property(string _taxID)
{
taxID = _taxID;
}
};
#endif
第二类:
#ifndef OWNER_H
#define OWNER_H
#include "individualProperty.h"
//#include <vector>
#include "property.h"
class p_property;
class p_owner
{
private:
string ownerName;
string mailingAddress;
string mailingState;
vector<p_property> ownedProperties;
int numProperties;
public:
string getOwnerName() { return ownerName; }
void setOwnerName(string a) { ownerName = a; }
string getMailingAddress() { return mailingAddress; }
void setMailingAddress(string a) { mailingAddress = a; }
string getMailingState() { return mailingState; }
void setMailingState(string a) { mailingState = a; }
p_property getPropertyAtIndex(int a) {
return ownedProperties.at(a);
}
void addProperty(p_property a) {
ownedProperties.push_back(a);
numProperties++;
}
int getNumProperties() { return numProperties; }
p_owner(string _name, string _addy, string _state)
{
setOwnerName(_name);
setMailingAddress(_addy);
setMailingState(_state);
numProperties = 0;
}
p_owner()
{
setOwnerName("null");
numProperties = 0;
}
};
#endif
建成后我收到错误: Error Image
这很奇怪,因为这个解决方案昨天完美无缺!有没有人对这个问题的根源有任何见解?
答案 0 :(得分:0)
class p_owner;
class p_property {
p_owner _Owner;
...
}
这不起作用,因为尚未定义p_owner
。您可以做的是声明一个p_owner
指针。例如:
class p_owner;
class p_property {
p_owner *ptr_owner;
...
}
然后使用指针来解决你的get / set问题
p_owner* getOwner() { return ptr_owner; }
void setOwner(p_owner* a) { ptr_owner = a; }
答案 1 :(得分:0)
请勿在{{1}}中加入property.h
。只转发声明owner.h
(正如您已经做过的那样)。现在将所有引用p_property
或其成员的方法 body 从所有者的标题移动到所有者的cpp文件。这将打破依赖关系。
我认为您还必须将构造函数/析构函数decls添加到p_property
的decl中,并在p_owner
中提供实体(即使为空)。
目标是在您编译owner.cpp
的正文之前,不要强制vector<p_property>
字段实例化任何std::vector<p_property>
方法。编译器生成的构造函数/析构函数将导致向量由头文件实例化。
目前尚不清楚这是你真正想要的东西!让p_owner
直接包含一个p_property
,以及p_owner
包含直接包含 p_owner
的向量 - 您 获取您可能想要的图形结构!您最有可能希望p_property
将指针添加到p_property
。您可能还希望p_owner
拥有指向 p_owner
的指针的向量。但前面的段落回答了您提出的问题,只有您可以确定它是否是正确的问题。