2011-07-18 105 views
-3

我得到了以下錯誤:如果聲明錯誤!

error: no matching function for call to 'max(int&, int&, int&, int&)'

我的代碼是:

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
#include <time.h> 
#include <string> 
#include <cstring> 
#include <stdlib.h> 
#include <stdio.h> 

using namespace std; 

int main() 
{ 
    srand(time(NULL)); 
    int g1l= rand()%5; 
    int g1r= rand()%5; 
    int g2l= rand()%5; 
    int g2r= rand()%5; 
    int g3l= rand()%5; 
    int g3r= rand()%5; 
    int g4l= rand()%5; 
    int g4r= rand()%5; 
    int g5l= rand()%5; 
    int g5r= rand()%5; 
    int g6l= rand()%5; 
    int g6r= rand()%5; 
    int manudw = 0; 
    int manudd = 0; 
    int manudl = 0; 
    int lagalw = 0; 
    int lagald = 0; 
    int lagall = 0; 
    int rmadw = 0; 
    int rmadd = 0; 
    int rmadl = 0; 
    int acmilw = 0; 
    int acmild = 0; 
    int acmill = 0; 

    int manudp = ((manudw*3)+(manudd*1)); 
    int lagalp = ((lagalw*3)+(lagald*1)); 
    int rmadp = ((rmadw*3)+(rmadd*1)); 
    int acmilp = ((acmilw*3)+(acmild*1)); 
    string manud = "Manchester United"; 
    string lagal = "Los Angeles Galaxy"; 
    string rmad = "Real Madrid"; 
    string acmil = "AC Milan"; 
    string place1 = "Manchester United |"; 
    string place2 = "Real Madrid  |"; 
    string place3 = "AC Milan   |"; 
    string place4 = "Los Angeles Galaxy |"; 
    int counter=0; 
    int round1; 
    int round2; 
    int round3; 
    int manudgd = 0; 
    int rmadgd = 0; 
    int acmilgd = 0; 
    int lagalgd = 0; 
    do 
    { 
     int manudp = ((manudw*3)+(manudd*1)); 
     int lagalp = ((lagalw*3)+(lagald*1)); 
     int rmadp = ((rmadw*3)+(rmadd*1)); 
     int acmilp = ((acmilw*3)+(acmild*1)); 
     int manudgd = ((g1l+g3r+g6r)-(g1r+g3l+g6l)); 
     int rmadgd = ((g2l+g3l+g5r)-(g2r+g3r+g5l)); 
     int acmilgd = ((g2r+g4l+g6l)-(g2l+g4r+g6r)); 
     int lagalgd = ((g1r+g4r+g5l)-(g1l+g4l+g5r)); 
     cout<<place1<<" "<<manudw<<" | "<<manudd<<" | "<<manudl<<" | "<<manudp<<" | "<<manudgd<<" |"<<endl<< 
       place2<<" "<<rmadw<<" | "<<rmadd<<" | "<<rmadl<<" | "<<rmadp<<" | "<<rmadgd<<" |"<<endl<< 
       place3<<" "<<acmilw<<" | "<<acmild<<" | "<<acmill<<" | "<<acmilp<<" | "<<acmilgd<<" |"<<endl<< 
       place4<<" "<<lagalw<<" | "<<lagald<<" | "<<lagall<<" | "<<lagalp<<" | "<<lagalgd<<" |"<<endl<<endl; 
//  if(max(manudgd,rmadgd,lagalgd,acmilgd)==manudgd || max(manudgd,rmadgd,lagalgd,acmilgd)==rmadgd || max(manudgd,rmadgd,lagalgd,acmilgd)==lagalgd || max(manudgd,rmadgd,lagalgd,acmilgd)==acmilgd) 
     if(counter==0) 
     { 
      for(round1=0;round1<=0;round1++) 
      { 
       cout<<"Manchester United "<<g1l<<"-"<<g1r<<" Los Angeles Galaxy"<<endl; 
       cout<<"Real Madrid "<<g2l<<"-"<<g2r<<" AC Milan"<<endl<<endl; 
       int manudgd = ((g1l)-(g1r)); 
       int rmadgd = ((g2l)-(g2r)); 
       int acmilgd = ((g2r)-(g2l)); 
       int lagalgd = ((g1r)-(g1l)); 
       if(g1l>g1r) 
       { 
        manudw++; 
        lagall++; 
       } 
       else if(g1l<g1r) 
       { 
        lagalw++; 
        manudl++; 
       } 
       else if(g1l==g1r) 
       { 
        manudd++; 
        lagald++; 
       } 
       if(g2l>g2r) 
       { 
        rmadw++; 
        acmill++; 
       } 
       else if(g2l<g2r) 
       { 
        rmadl++; 
        acmilw++; 
       } 
       else if(g2l==g2r) 
       { 
        rmadd++; 
        acmild++; 
       } 
      } 
     } 
     else if(counter==1) 
     { 
      for(round2=0;round2<=0;round2++) 
      { 
       cout<<"Real Madrid "<<g3l<<"-"<<g3r<<" Manchester United"<<endl; 
       cout<<"AC Milan "<<g4l<<"-"<<g4r<<" Los Angeles Galaxy"<<endl<<endl; 
       int manudgd = ((g1l+g3r)-(g1r+g3l)); 
       int rmadgd = ((g2l+g3l)-(g2r+g3r)); 
       int acmilgd = ((g2r+g4l)-(g2l+g4r)); 
       int lagalgd = ((g1r+g4r)-(g1l+g4l)); 
       if(g3l>g3r) 
       { 
        rmadw++; 
        manudl++; 
       } 
       else if(g3l<g3r) 
       { 
        manudw++; 
        rmadl++; 
       } 
       else if(g3l==g3r) 
       { 
        manudd++; 
        rmadd++; 
       } 
       if(g4l>g4r) 
       { 
        acmilw++; 
        lagall++; 
       } 
       else if(g4l<g4r) 
       { 
        acmill++; 
        lagalw++; 
       } 
       else if(g4l==g4r) 
       { 
        lagald++; 
        acmild++; 
       } 
      } 
     } 
     else if(counter==2) 
     { 
      for(round3=0;round3<=0;round3++) 
      { 
       cout<<"Los Angeles Galaxy "<<g5l<<"-"<<g5r<<" Real Madrid"<<endl; 
       cout<<"AC Milan "<<g6l<<"-"<<g6r<<" Manchester United"<<endl<<endl; 
       int manudgd = ((g1l+g3r+g6r)-(g1r+g3l+g6l)); 
       int rmadgd = ((g2l+g3l+g5r)-(g2r+g3r+g5l)); 
       int acmilgd = ((g2r+g4l+g6l)-(g2l+g4r+g6r)); 
       int lagalgd = ((g1r+g4r+g5l)-(g1l+g4l+g5r)); 
       if(g5l>g5r) 
       { 
        lagalw++; 
        rmadl++; 
       } 
       else if(g5l<g5r) 
       { 
        rmadw++; 
        lagall++; 
       } 
       else if(g5l==g5r) 
       { 
        lagald++; 
        rmadd++; 
       } 
       if(g6l>g6r) 
       { 
        acmilw++; 
        manudl++; 
       } 
       else if(g6l<g6r) 
       { 
        acmill++; 
        manudw++; 
       } 
       else if(g6l==g6r) 
       { 
        manudd++; 
        acmild++; 
       } 
      } 
     } 
     counter++; 
    } 
    while(counter!=4); 
} 

我上是在第74行錯誤的代碼行:

if(max(manudgd,rmadgd,lagalgd,acmilgd)==manudgd || max(manudgd,rmadgd,lagalgd,acmilgd)==rmadgd || max(manudgd,rmadgd,lagalgd,acmilgd)==lagalgd || max(manudgd,rmadgd,lagalgd,acmilgd)==acmilgd) 

這是所有C++,以防萬一您看不到標籤或識別代碼。

+1

究竟是什麼問題?你在哪裏期望最大功能來自哪裏? – Marcin

+1

歡迎來到Stack Overflow,Bob。很高興您閱讀了如何在問題中嵌入代碼;感謝那。這不太好,你在你的問題中嵌入了大量代碼。嘗試下次展示一個最小的例子。並再次歡迎登機。 –

+1

很好,你已經粘貼了一段足夠完整的代碼來重現你的錯誤,但是如果你可以把它修剪掉,那會更好,所以它是一個給出相同錯誤的最小代碼塊。 –

回答

4

std::max需要兩個參數,而不是任意數量的參數。

+0

嗨,歡迎來到SO!請使用[SO Markdown語法](http://stackoverflow.com/editing-help)來格式化您帖子中的代碼。 –

6

max只有兩個參數,所以你必須將它從多個調用中合併。

int maxGd = max(max(manudgd,rmadgd),max(lagalgd,acmilgd)); 
if(maxGd == manudgd || maxGd == lagalgd || maxGd == acmilDg) { 
    // ... 
} 
0

Eh?沒有max()函數,我知道這需要四個參數!在<algorithm>中有兩個arg版本,std::max()

如果這是您自己的,請執行它。

0

因爲沒有這樣的函數叫做max,它在C++中需要4個參數,並且你還沒有定義一個!

+0

哦,我以爲我在C++ =/ – Bob

+0

之前看到了max函數,正如其他人已經指出的那樣,但它只需要2個參數而不是4個。您可以實現自己的或使用std,如@marc。 – bluefalcon

1

這是因爲沒有max函數需要四個參數。 max只有兩個參數。你可以自己寫一個這樣的功能,使用已經存在的一個:

int max(int a, int b, int c, int d) { 
    return max(max(a,b),max(c,d)); 
} 
+0

如果沒有'return',我不確定這是否符合您的想法。 –

2

max有兩個參數。你可能想看到max_element。順便說一句,你的代碼可能需要一些重構 - 請閱讀Robert C. Martin的Clean Code

+1

+1爲清潔代碼 – marc

+1

不,我認爲他需要閱讀更多*基本*第一:http://stackoverflow.com/q/388242/46642 –

+0

@Martinho:我認爲一般編碼風格和C++(或任何語言) - 具體的知識基本上是正交的,所以可以並行學習。 – ron

0

我沒有在代碼中看到你已經實現了max(int&, int&, int&, int&)方法。

在C++ <algorithm>庫,你可以找到std::max()聲明如下:

template <class T> const T& max (const T& a, const T& b); 
template <class T, class Compare> 
    const T& max (const T& a, const T& b, Compare comp); 
0

馬克斯()函數不是在通話的範圍被定義。 添加一個定義並重新編譯。

附註:max()是一些編譯器中的宏,但是隨後有2個參數而不是4個。