我正在弄乱一个指向指针向量的指针
std::vector<int*>* MyVector;
我尝试使用以下两种方法进行访问:
MyVector->at(i); //This works
MyVector[i] //This says "Expression must be a pointer to a complete object type"
据我了解,向量[] operator
和at
方法之间的区别在于at方法会执行其他边界检查,所以我的问题是为什么at方法成功访问元素而反之[] operator
不?
编辑:
此处是整个代码
#include <vector>
#include <iostream>
std::vector<int*>* MyVector;
int main()
{
MyVector = new std::vector<int*>;
MyVector->push_back(new int(5));
for (unsigned int i = 0; i < MyVector->size(); i++)
{
delete MyVector->at(i); //This works
delete MyVector[i]; //This says "Expression must be a pointer to a complete object type
}
system("pause");
}
答案 0 :(得分:5)
MyVector
是向量的指针,而不是向量的 。
两种解决方案:
由于vector
是一个指针,因此需要取消引用该指针
首先找回(*MyVector)[i]
。
operator
较少使用:使用MyVector->operator[](i)
关键字:
$image_icon = $request->file('image_icon');
$data['image'] = $image_icon->getClientOriginalName().'.'.time();
$destinationPath = public_path('/images');
$image_icon->move($destinationPath, $data['image']);
答案 1 :(得分:1)
问题是您已经声明了指向向量的指针。在第二个表达式中,您实际上将MyVector
视为一个数组,在其中您尝试访问类型为i
的第std::vector<int*>
个元素(我认为该元素不存在)。>