我已经阅读了其他类似的帖子,但仍然没有找到解决我的编码问题的方法。
以下是代码:
void Foo(vector<Name> &obj){
vector<Name> *temp = 0;
temp = new vector<Name>;
if (!temp){
std::cout << "temp Allocation Error!" << std::endl;
exit(1);
}
temp->push_back(obj[n]);
std::cout << temp[0]->member_function() << std::endl;
}
Foo是一种通用功能。
我有一个函数Foo,它引用了一个向量容器。在Foo中有一个名为temp的动态矢量。
我使用push_back()将obj插入到临时向量中。
然后我希望访问存储在临时向量中的obj以访问其成员函数。
然而,这是编译器说“表达式必须具有指针类型”的地方。
有人可以解释如何重写这行代码。
std::cout << temp[0]->member_function() << std::endl;
答案 0 :(得分:1)
temp[0]->member_function()
这会将temp
视为一个指向矢量的指针数组,但它不是。
在对结果执行数组下标之前,您需要取消引用temp
:
(*temp)[0].member_function()
老实说,这里的动态分配毫无意义,现在正在给你一个内存泄漏。
答案 1 :(得分:0)
你有一个名字对象的矢量,而不是名字*,但你使用&#34; - &gt;&#34;运算符而不是&#34;。&#34;这是编译器告诉你的。
你应该尝试:
std::cout << (*temp)[0].member_function() << std::endl;
或制作矢量元素名称*。
答案 2 :(得分:0)
temp[0]->member_function()
如果temp
是指针的向量,是正确的,但它不是 - 它是指向一个向量的指针。
并且您不能将->
与向量一起使用
(相当于(*temp)->member_function()
。)
你可以说
(*temp)[0].member_function()
但更好的解决方案通常是完全避免动态分配:
vector<Name> temp;
temp.push_back(obj[n]);
std::cout << temp[0].member_function() << std::endl;