【发布时间】:2010-06-22 04:02:11
【问题描述】:
我正在尝试访问由向量容器中保存的指针指向的对象(称为向量),但我似乎无法访问它。
这里是重要的代码sn-ps:
int main{
Vector<double>* test = new Vector<double>(randvec<double>());
test->save();
cout << Element::vectors[0];
return 0;
}
其中Vector是一个模板类,randvec<T>()返回一个向量的引用,save()是
template <class T>
void Vector<T>::save()
{
vectors.push_back(this);
}
vectors 是 Vectors 的基类 Element.h 中定义的static std::vector<Element*> vectors;。
这一切都错了吗?我试图通过使用指向主类的指针向量将派生类的所有元素包含在基类的静态数据成员中。
main() 的输出可能会告诉你发生了什么——我得到了指针0x1001000a0。但是,如果我尝试取消引用该指针,则会收到以下错误:
error: no match for 'operator<<' in 'std::cout << * Element::vectors.
std::vector<_Tp, _Alloc>::operator[] [with _Tp = Element*, _Alloc = std::allocator<Element*>](0ul)'
为什么我不能取消引用这个指针?
【问题讨论】:
-
为什么要动态分配呢? (提示:你在泄漏!)
-
我花了三遍阅读您的描述才知道您命名的不同部分是如何相互纠缠的!这真的需要两期建设吗?如果所有对象都存储在基类静态数据成员中,为什么不将它们存储在它们的构造函数中呢?为什么要为
test使用动态分配?你在泄露它。自动对象有什么问题?哦,在 C++ 中file != class.
标签: c++ pointers reference vector dereference