2017-06-06 2 views
-1

Ich bekomme "'_comp' kann nicht als Funktion verwendet werden" Fehler in der Header-Datei stl_algobase.h. Hier ist mein Code und der Teil der Header-Datei, die den Fehler haben soll. Code:'_comp' kann nicht als Funktionsfehler verwendet werden

#include<iostream> 
#include<algorithm> 

using namespace std; 

void subsqr(int a[10][10]){ 
    //int s[][10]; 
    for(int i =1;i<5;i++){ 
     for(int j = 1;j<5;j++){ 
      if(a[i][j] == 1){ 
       a[i][j] = min(a[i][j-1], a[i-1][j],a[i-1][j-1]) + 1; 
      } 
     } 
    } 
    for(int i=0;i<5;i++){ 
     for(int j=0;j<5;j++){ 
      cout<<a[i][j]<<"\t"; 
     } 
     cout<<endl; 
    } 
} 

int main(){ 
    int a[10][10] = {{0,1,1,0,1}, {1,1,0,1,0}, {1,1,1,0}, {1,1,1,1,0}, {1,1,1,1,1}, {0,0,0,0,0}}; 

    subsqr(a); 
    return 0; 
} 

stl_algobase.h:

template<typename _Tp, typename _Compare> 
    inline const _Tp& 
    min(const _Tp& __a, const _Tp& __b, _Compare __comp) 
    { 
     //return __comp(__b, __a) ? __b : __a; 
     if (__comp(__b, __a)) 
      return __b; 
     return __a; 
    } 

Der Compiler sagt, dass der Fehler in der Leitung ist

if (__comp(__b, __a)) 
+0

nicht doppelten Unterstrich Präfix Namen sind möglicherweise durch den Compiler reserviert? Kann ein Konflikt sein. – Carcigenicate

+0

Welche 'min()' Funktion denkst du, dass du anrufst? – juanchopanza

+1

Bitte postet keine irrelevanten Kommentare zu doppelten Unterstrichen. – juanchopanza

Antwort

4

Es ist nicht das Problem sein kann, aber die Kopfzeile Ihres min Funktion gibt an, dass es 3 Parameter benötigt: 2 vom Typ __Tp und eines vom Typ _Compare, aber in Ihrem Programm rufen Sie es mit 3 Typen auf __TP:

a[i][j] = min(a[i][j-1], a[i-1][j],a[i-1][j-1]) + 1; // the third parameter is an int, not a function ! 

EDIT: Wenn Sie die min von drei Zahlen herausfinden möchten, betrachten Sie this post, mit Ints und Float ist es nicht erforderlich, eine Comp-Funktion anzugeben. Für eine schnelle Lösung, ersetzen Sie die Linie, die ich mit diesem hervorgehoben:

std::min({a[i][j-1], a[i-1][j], a[i-1][j-1]}); 
Verwandte Themen