表达式必须具有指针类型错误

时间:2015-10-02 11:03:16

标签: c++

我已经阅读了其他类似的帖子,但仍然没有找到解决我的编码问题的方法。

以下是代码:

   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;

3 个答案:

答案 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;