【发布时间】:2016-02-15 23:40:52
【问题描述】:
我有一个类ReferenceManager(处理书籍或期刊引用的类),其中包含数据成员:
private:
int arraySize;
Reference **references;
这是“ReferenceManager”的主要构造函数:
ReferenceManager::ReferenceManager(int capacity):
arraySize(capacity)
{
Reference* arrayOfreferencePointers[capacity];
references = arrayOfreferencePointers;
}
Reference 是我创建的另一个类。
所以,据我了解,现在我们有一个指针Reference **references,它指向Reference* 的指针数组。所有这些指针现在都指向NULL。
到目前为止一切顺利。
现在,考虑ReferenceManager 类的这个成员函数:
bool ReferenceManager::insert(Reference &reference){
for (int i = 0; i < arraySize; i++) {
if((*(references) + i) == NULL){
(*(references) + i) = &reference; //ERROR: expression not assignable
cout << "Object placed in position " << i << "." << endl;
return true;
}
}
cout << "Array full!" << endl;
return false;
}
该函数假设获取数组中的第一个可用指针,并将其指向通过引用传递的对象。
我不明白为什么我会收到“表达式不可分配”错误。通过仅取消引用“引用”一次,我不应该能够将指针指向我想要的任何地方吗?
【问题讨论】:
-
尝试分配给
*(references) + i就像尝试分配给i + 5。你打算如何处理这个任务? -
在你的构造函数中,你将一个局部指针数组的地址分配给你的成员变量
references,一旦构造函数结束,它就会被销毁。 -
两者都是真实的,只有一个是编译时,另一个是运行时。
-
动态分配或
std::vector. -
new Reference*[capacity]();如果你希望它包含nullptrs,它在第一种情况下也没有。不要忘记delete []并且传递给insert函数的内容应该有生命周期,只要你需要它。不过,这是一团糟。