#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);
遇到编译器错误我无法理解错误(没有匹配的函数可以调用)
我知道如果我通过引用传递,它会工作,但我想知道在这里传递指针有什么问题。
答案 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);