簡體   English   中英

bool類型的參數不匹配

[英]Argument of type bool does not match

我正在嘗試對數據包含我所創建的對象的節點向量進行排序。 我正在比較的是該對象的值(相關性)。 我收到一個錯誤:

BST.h:148: error: argument of type âbool (BST<Play>::)(BST<Play>::node*, BST<Play>::node*)â does not match âbool (BST<Play>::*)(BST<Play>::node*, BST<Play>::node*)â

我從未見過像這樣的錯誤,它在我稱之為排序的行上調用。

#ifndef BST_H
#define BST_H
#include "Play.h"
#include <algorithm> 
#include <vector>
#include <iostream>

template<typename T>
class BST
{
    public:
        struct node{
            T data;
            node *left;
            node *right;
            node *parent;

            node(const T & theData, node *lt, node *rt, node *pt):
                data(theData), left(lt), right(rt), parent(pt) {}
        };
        std::vector<node*> tempVec;
        bool sorterFunc(node* x, node* y) { 
            return (y->data.getRelevance() < x->data.getRelevance());
        }
        void list(std::string offense, std::string defense, int downforplay, int yardstogo, int yardline, int minutes, node* &t, int level){
            tempVec.clear();
            float relevance;
            if(t==NULL){
                return;
            }
            if(level ==1){
                tempCount--;
                if(offense==t->data.getoTeam()){
                    if(downforplay==t->data.getDown()){
                        int yardabove = yardstogo+1;
                        int yardbelow = yardstogo-1;
                        if(yardstogo==t->data.getYard() || yardbelow==t->data.getYard() || yardabove==t->data.getYard()){
                            if(yardline >= t->data.getStartLoc() - percentback(yardline) && yardline <= (t->data.getStartLoc() + percentback(yardline))){
                                relevance= -((float)abs(minutes - t->data.getMinutes())*(float(5/3)) + (float)abs(yardstogo - t->data.getYard()) + (float)abs(yardline - t->data.getStartLoc()));
                                if(defense == t->data.getdTeam())
                                    relevance += 100;
                                t->data.setRelevance(relevance);
                                tempVec.push_back(t);
                            }
                        }
                    }
                }
            }
            else{
                list(offense, defense, downforplay, yardstogo, yardline, minutes, t->left, level-1);
                list(offense, defense, downforplay, yardstogo, yardline, minutes, t->left, level-1);
            }
        }
        void listFunc(std::string offense, std::string defense, int downforplay, int yardstogo, int yardline, int n, int minutes){
            tempCount = treeCount;
            for(int i=1; tempCount>0; i++)
                list(offense, defense, downforplay, yardstogo, yardline, minutes, root, i);
            std::sort(tempVec.begin(), tempVec.end(), sorterFunc);
            for(int i=0; i<n; i++)
                std::cout << tempVec[i]->data.getwholePlay() << std::endl << tempVec[i]->data.getRelevance();
        }
}

sorterFunc是一個成員函數。 因此,它只能在實例上工作。 但是,您嘗試將其用作比較node*的函數:

std::sort(tempVec.begin(), tempVec.end(), sorterFunc);

現在std::sort將在某個地方調用sorterFunc ,但這會失敗,因為沒有實例可以使用:

       sorterFunc( someNodePointer, someOtherNodePointer);
// ^^. missing instance

您不希望sorterFunc在任何實例上工作。 把它變成static

static bool sorterFunc(node* x, node* y) { 
    return (y->data.getRelevance() < x->data.getRelevance());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM