如何通过指针数组访问类的成员函数?
How can I access a class's member function via an array of pointers?
我有一个非常标准的类,其中包含一些公共成员函数和私有变量。
我的问题最初源于不能动态命名我的类的对象实例,所以我创建了一个类类型的指针数组:
static CShape* shapeDB[dbSize];
我有一些提示来获取要传递给构造函数的字段的信息(这似乎有效):
shapeDB[CShape::openSlot] = new CShape(iParam1,sParam1,sParam2);
openlot正确递增,所以如果我要创建另一个CShape对象,它将有下一个指针指向它。下一段代码不起作用,并且一直崩溃:
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++;
}
我的猜测是你使用CShape构造函数来增加CShape:: openlot ?您可能在读取指针之前更改了它的值,因此指针存储在不同的位置。
尝试用固定值替换openSlot以排除此CShape::选项。
——code was added——
我很确定这就是问题所在,构造函数在赋值之前执行,这意味着lhs。
相关文章:
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 将公共但非静态的成员函数与ALGLIB集成
- 使用指向成员的指针将成员函数作为参数传递
- 将重载的成员函数传递给函数模板
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 如何在C++中使用非静态成员函数作为回调函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 关联容器的下界复杂性:成员函数与非成员函数
- 在 C++ 中用派生类型重写成员函数
- 链表的泛型函数remove()与成员函数remove)
- 如何将lambda作为模板类的成员函数参数
- constexpr构造函数需要常量成员函数时出现问题
- 将自由函数绑定为类成员函数
- 区分非成员函数和头文件中的成员函数
- 如何从子成员函数修改父公共成员变量
- 保留对其他类的成员函数的引用
- 在运算符重载定义中使用成员函数(const错误)
- 内联如何影响模块接口中的成员函数
- 将成员函数指针作为参数传递给模板方法