C++ 错误:调用重载';节点(int&;)&x27;是不明确的|?

C++ 错误:调用重载';节点(int&;)&x27;是不明确的|?,c++,C++,当我试图通过调用优先级队列来加载优先级队列时,我不断遇到此错误 在我的二叉树函数中。如果我取出pq.emplace(节点(v,ct++)并只放置{ct++},它就会工作。我只是想用我的二叉树加载我的pq,这样我就可以对它进行排序并打印到屏幕上 class node { public: node(){left=NULL; right=NULL; ct = 1;} node (int v){val = v; left=NULL; right=NULL; ct=1;} no

当我试图通过调用优先级队列来加载优先级队列时,我不断遇到此错误 在我的二叉树函数中。如果我取出pq.emplace(节点(v,ct++)并只放置{ct++},它就会工作。我只是想用我的二叉树加载我的pq,这样我就可以对它进行排序并打印到屏幕上

class node
{
public:
    node(){left=NULL; right=NULL; ct = 1;}
    node (int v){val = v; left=NULL; right=NULL;  ct=1;}

    node (int Pri=0, int cat=1)
    : val(Pri), ct(cat), left(NULL), right(NULL) {}


    friend bool operator>(//sorts queue by greatest Priority
    const node& x, const node& y) {
    return x.ct > y.ct;
    }

    friend std::ostream&//prints out queue later
    operator<<(std::ostream& os, const node& Pri) {
    return os  <<"my value = "<<Pri.val<<" occured "<<Pri.ct<<" times";
    }

    std::priority_queue<node, std::vector<node>, std::greater<node> > pq;
    void addnode(int v)
{
        if(v==val){pq.emplace(node(v, ct++));}///changed for {ct+++}
        else if(v<val)
            {
                if(left==NULL){left=new node(v);}///error here!!
                else{left->addnode(v);}
            }
         else
        {
                if(right==NULL){right = new node(v);}///error here!!
                else{right->addnode(v);}
        }
    }


    void display()
    {
         if(left!=NULL){left->display();}
             std::cout<<"my value = "<<val<<" occured "<<ct<<" times"<<std::endl;
             if(right!=NULL){right->display();}
    }

    void display_Queue()
    {
            std::cout << "0. size: " << pq.size() << '\n';
            std::cout << "Popping out elements from Pqueue..."<<'\n';
            while (!pq.empty())
            {
            std::cout << pq.top() <<  std::endl;
            pq.pop();
            }
            std::cout << '\n';
    }
private:
int val;      ///value in that node
int ct;      ///ct = count of that value
node * left;
node * right;


};


#include <iostream>
#include <random>
#include <ctime>
#include <queue>
#include <set>
#include <functional>
#include <algorithm>
#include "Q7.h"

using namespace std;
int unsortedRemoveDuplicates(vector<int>& numbers)
    {
    set<int> seenNums; //log(n) existence check
    auto itr = begin(numbers);
    while(itr != end(numbers))
    {
        if(seenNums.find(*itr) != end(seenNums)) //seen? erase it
            itr = numbers.erase(itr); //itr now points to next element
        else
        {
            seenNums.insert(*itr);
            itr++;
        }
    }
    return seenNums.size();
    }

int main()
{
    node * root=NULL;
    int v, n;
    vector<int> first;
    vector<int>::iterator fi;
    default_random_engine gen(time(NULL));

    cout<<"how many values? "; cin>>n;

for(int i=0; i<n; i++)
    {    (v=gen()%n);
         first.push_back(v);
         cout<<"value "<<v<<" generated"<<endl;
         if(root==NULL){root = new node(v);}
         else{
         root->addnode(v);
         }
    }
    unsortedRemoveDuplicates(first);
    cout<<"Binary Tree in a depth first manner with Duplicates 
          removed!"<<endl; 
    for ( fi = first.begin() ; fi != first.end(); ++fi)     
    {cout<<"Node "<<*fi<<endl;}
cout<<"-------------------"<<endl;
    root->display();
    cout<<"-------------------"<<endl;

    cout<<"-------------------"<<endl;
    root->display_Queue();
    cout<<"-------------------"<<endl;


    return 0;
}
类节点
{
公众:
node(){left=NULL;right=NULL;ct=1;}
节点(intv){val=v;left=NULL;right=NULL;ct=1;}
节点(int Pri=0,int cat=1)
:val(Pri)、ct(cat)、左(NULL)、右(NULL){
friend bool运算符>(//按最大优先级排序队列
常量节点(x、常量节点和y){
返回x.ct>y.ct;
}
friend std::ostream&//稍后打印队列

operatorI认为这与此处所述的结果相同:--基本上,默认参数和函数重载会导致调用哪个版本的不确定性。您的意思是在{pq.emplace(node(v,ct++);{left=new node(v);}和{code>node(v)之间
是不明确的。它可能是一个arg构造函数,也可能是两个arg构造函数,默认值为
int cat=1
。这有助于很多人摆脱:node(){left=NULL;right=NULL;ct=1;}node(int v){val=v;left=NULL;right=NULL;ct=1;}我相信这和这里讨论的结果是一样的:--基本上,默认参数和函数重载会导致调用哪个版本的不确定性。你是说在{pq.emplace(node(v,ct++);{left=new node(v);}和{code>node(v)之间是不明确的。它可能是一个arg构造函数,也可能是两个arg构造函数,默认值为
int cat=1
。这有助于很多人摆脱:node(){left=NULL;right=NULL;ct=1;}node(int v){val=v;left=NULL;right=NULL;ct=1;}