我有一个非常标准的类,其中包含一些公共成员函数和私有变量。
我的问题最初源于无法动态命名我的类的对象实例,所以我创建了一个类类型的指针数组:
static CShape* shapeDB[dbSize];
我有一些提示来获取要传递给构造函数的字段的信息(这似乎有效):
shapeDB[CShape::openSlot] = new CShape(iParam1,sParam1,sParam2);
openSlot 会正确递增,因此如果我要创建另一个 CShape 对象,它将有指向它的 next 指针。下一段代码不起作用并始终崩溃:
cout << shapeDB[2]->getName() << " has a surface area of: " << shapeDB[2]->getSA() << shapeDB[2]->getUnits() << endl;
指针数组在 main 之外全局声明,get() 函数在返回字符串或整数的类中是公共的。我不确定我做错了什么,但我确定与指针设置有关。我正在编写此代码以尝试了解有关类/指针的更多信息,并且由于找不到其他人尝试这样做而感到非常困惑。
我也很好奇 CShape 新实例的名称是什么......?如果有任何其他方法可以动态创建对象实例并跟踪名称以便能够为成员函数访问它们,我全都听好了。
我尝试了各种指针引用/取消引用的排列,但大多数都无法编译。如果有人认为这会有所帮助,我可以发布更大的代码块或所有代码。
class CShape {
int dim[maxFaces];
int faces;
string units;
string type;
string name;
bool initialized;
int slot;
public:
static int openSlot;
CShape();
CShape(int, string, string); // faces, units, name
~CShape();
void initialize(void);
// external assist functions
int getA(void) {
return 0;
}
int getSA(void) {
int tempSA = 0;
// initialize if not
if(initialized == false) {
initialize();
}
// if initialized, calculate SA
if(initialized == true) {
for(int i = 0; i < faces; i++)
{
tempSA += dim[i];
}
return(tempSA);
}
return 0;
}
string getUnits(void) {
return(units);
}
string getName(void) {
return(name);
}
// friend functions
friend int printDetails(string);
};
// constructor with values
CShape::CShape(int f, string u, string n) {
initialized = false;
faces = f;
units = u;
name = n;
slot = openSlot;
openSlot++;
}