Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;模板运算符重载不起作用_C++_Templates_Operators_Operator Overloading - Fatal编程技术网

C++ C++;模板运算符重载不起作用

C++ C++;模板运算符重载不起作用,c++,templates,operators,operator-overloading,C++,Templates,Operators,Operator Overloading,我有这个功能: void plusQueue(){ PrioQueue<int> *a = new PrioQueue<int>(2); PrioQueue<int> *b = new PrioQueue<int>(2); a->push(3); b->push(5); a->push(7); b->push(2); cout << "a"<&l

我有这个功能:

void plusQueue(){
    PrioQueue<int> *a = new PrioQueue<int>(2);
    PrioQueue<int> *b = new PrioQueue<int>(2);

    a->push(3);
    b->push(5);
    a->push(7);
    b->push(2); 

    cout << "a"<<endl;
    a->print();
    cout << "b"<<endl;
    b->print();
    cout<<"Samenvoegen\n";
    PrioQueue<int> *c = new PrioQueue<int>(4);
    c = a + b;
    c->print();
}
给出了一些问题。我得到这个信息:

main.cpp:71:13: error: invalid operands of types 'PrioQueue<int>*' and 'PrioQueue<int>*' to binary 'operator+'
main.cpp:71:13:错误:“PrioQueue*”和“PrioQueue*”类型的操作数对二进制“operator+”无效
它是我的模板类中的重载运算符:

PrioQueue operator +(PrioQueue a) {
    PrioQueue temp = *this;

    T *bottom = a.getBottom();
    T *top = a.getTop();

    for (T *element = bottom; element < top; element++) {
        temp.push(*element);
    }
    return temp;
}
PrioQueue操作符+(PrioQueue a){
PrioQueue temp=*此;
T*bottom=a.getBottom();
T*top=a.getTop();
对于(T*element=bottom;element

我做错了什么?

出于某种原因,您正在动态分配对象,因此
a
b
c
都是指针。不能添加指针

如果确实要保留指针,则需要遵从它们来访问对象:

*c = *a + *b;
记住,一旦你处理完这些对象,就要删除它们;你的代码像一个泄密的东西一样泄漏

更可能的情况是,您希望对象是自动的:

PrioQueue<int> a(2);
PrioQueue<int> b(2);

// populate them

PrioQueue<int> c = a + b;
PrioQueue a(2);
PrioQueue b(2);
//填充它们
PrioQueue c=a+b;

出于某种原因,您正在动态分配对象,因此
a
b
c
都是指针。不能添加指针

如果确实要保留指针,则需要遵从它们来访问对象:

*c = *a + *b;
记住,一旦你处理完这些对象,就要删除它们;你的代码像一个泄密的东西一样泄漏

更可能的情况是,您希望对象是自动的:

PrioQueue<int> a(2);
PrioQueue<int> b(2);

// populate them

PrioQueue<int> c = a + b;
PrioQueue a(2);
PrioQueue b(2);
//填充它们
PrioQueue c=a+b;

可能是因为你说你得到的是一个前奏曲,而不是一个指针。
试试
*a+*b

也许是因为你说你得到的是一个问答,而不是一个指针。
试试看
*a+*b

你能用那样的广告指针吗?a、 b、c是指向
PrioQueue
的指针,而不是
PrioQueue
<代码>尝试*c=*a+*bPrioQueue
的指针,而不是
PrioQueue
<代码>尝试*c=*a+*b