在解除引用地图指针

时间:2016-06-05 10:21:29

标签: c++

#include <iostream>
#include <map>
#include <vector>

using namespace std;

struct node{
  int data;
  struct node *left;
  struct node *right;
};

struct node* newNode (int data)
{
    struct node *temp = new struct node;
    temp->data = data;
    temp->left = NULL;
    temp->right = NULL;
    return temp;
}


void printVerticalUtil(struct node *root, map<int, vector<struct node*> > *m, int index){
    if(root == NULL)
        return;

    *m[index].push_back(root); // compiler error 
}


int main(){
    struct node *root, *res;
    root = newNode(1);
    map<int, vector<struct node*> > m;
    printVerticalUtil(root, &m, 0)
}

我使用指针在printVerticalUtil()函数中传递地址,我在*m[index].push_back(root);遇到编译器错误我无法理解错误(没有匹配的函数可以调用)

我知道如果我通过引用传递,它会工作,但我想知道在这里传递指针有什么问题。

2 个答案:

答案 0 :(得分:3)

由于operator precedence表达式

*m[index].push_back(root)

相同
*(m[index].push_back(root))

换句话说,您尝试取消引用push_back函数返回的内容,并且由于它不返回任何可以引用的内容(它根本不返回任何内容),因此会出现编译器错误。< / p>

你想要的是

(*m)[index].push_back(root)

答案 1 :(得分:1)

关于运营商优先权。您必须首先遵循指针,才能到达地图

(*m)[index].push_back(root);