I am having problems with my operators that I have overloaded. My current program is probably too long to post here and if i did post it all i doubt anyone would look at it. So I'll just post the errors and some sections of code that might be useful. Thank you in advance for the help. The errors I get are:
"card.h", line 27.14: 1540-1184 (S) Wrong number of parameters for "operator>".
a4main.cpp:
"card.h", line 27.14: 1540-1184 (S) Wrong number of parameters for "operator>".
"a4main.cpp", line 457.8: 1540-0218 (S) The call does not match any parameter list for "operator!".
"a4main.cpp", line 457.8: 1540-1283 (I) "builtin operator!(bool)" is not a viable candidate.
Here are my operators
For the CARD CLASS:
For the PLAY CLASS:Code:bool operator!(){ bool test = false; if (this.value == JOKER) test = true; return test; } bool operator > (const Card& left, const Card& right){ bool test = false; if (left.value == right.value){ if (left.suit > right.suit) test = true; } else if (left.value > right.value) test = true return test; } bool operator < (const Card& left, const Card& right){ bool test = false; if (right.value == left.value){ if (right.suit > left.suit) test = true; } else if (right.value > left.value) test = true; return test; }
Code:bool operator!(){ bool test = false; if (this.play = 0) test = true; return test; } bool operator > (const Play& left, const Play& right){ bool test = false; if (left.play == 0 && right.play == 0){ if (left.numofcards > right.numofcards) test = true; } if (left.play != 0 && right.play == 0) test = true; if (left.play != 0 && right.play != 0){ if (left.numofcards > right.numofcards) test = true; if (left.numofcards == 1 && right.numofcards == 1){ if(left.card[0].Face() > right.card[0].Face()) test = true; else if (left.card[0].Face() = right.card[0].Face()){ if (left.card[0].Suit() > right.card[0].Suit()) test = true; } } if (left.numofcards == 2 && right.numofcards == 2){ if (left.card[1].Face() > right.card[1].Face()) test = true; else if (left.card[1].Face() == right.card[1].Face()){ if (left.card[1].Suit() > right.card[1].Suit()) test = true; } } if (left.numofcards == 3 && right.numofcards == 3){ if (left.card[2].Face() > right.card[2].Face()) test = true; else if (left.card[2].Face() == right.card[2].Face()){ if (left.card[2].Suit() > right.card[2].Suit()) test = true; } } if (left.numofcards == 4 && right.numofcards == 4){ if (left.card[3].Face() > right.card[3].Face()) test = true; else if (left.card[3].Face() == right.card[3].Face()){ if (left.card[3].Suit() > right.card[3].Suit()) test = true; } } if (left.numofcards == 5 && right.numofcards == 5){ if (left.play == 5){ if (right.play < 5) test = true; } if (left.play == 6){ if (right.play < 6) test = true; } if (left.play == 7){ if (right.play < 7) test = true; } if (left.play == 8){ if (right.play < 8 || right.play == 9) test = true; } if (left.play == 9){ if (right.play < 8) test = true; } } } } bool operator < (const Play& left, const Play& right){ bool test = false; if (right.play == 0 && left.play == 0){ if (right.numofcards > left.numofcards) test = true; } if (right.play != 0 && left.play == 0) test = true; if (right.play != 0 && left.play != 0){ if (right.numofcards > left.numofcards) test = true; if (right.numofcards == 1 && left.numofcards == 1){ if(right.card[0].Face() > left.card[0].Face()) test = true; else if (right.card[0].Face() = left.card[0].Face()){ if (right.card[0].Suit() > left.card[0].Suit()) test = true; } } if (right.numofcards == 2 && left.numofcards == 2){ if (right.card[1].Face() > left.card[1].Face()) test = true; else if (right.card[1].Face() == left.card[1].Face()){ if (right.card[1].Suit() > left.card[1].Suit()) test = true; } } if (right.numofcards == 3 && left.numofcards == 3){ if (right.card[2].Face() > left.card[2].Face()) test = true; else if (right.card[2].Face() == left.card[2].Face()){ if (right.card[2].Suit() > left.card[2].Suit()) test = true; } } if (right.numofcards == 4 && left.numofcards == 4){ if (right.card[3].Face() > left.card[3].Face()) test = true; else if (right.card[3].Face() == left.card[3].Face()){ if (right.card[3].Suit() > left.card[3].Suit()) test = true; } } if (right.numofcards == 5 && left.numofcards == 5){ if (right.play == 5){ if (left.play < 5) test = true; } if (right.play == 6){ if (left.play < 6) test = true; } if (right.play == 7){ if (left.play < 7) test = true; } if (right.play == 8){ if (left.play < 8 || left.play == 9) test = true; } if (right.play == 9){ if (left.play < 8) test = true; } } } }
And this is where the operators are being tested in the testmain
The ! operator is checked here, this part of the code is line 457 if(!(*c1)){Code:/*Test Card's > operator. Passed array that holds every card in a deck, an array that holds which tests failed and a reference to what test number we are on. returns true if all tests passed false otherwise*/ bool TestCardGreater(Card deck[],int failedtests[],int& testnumber){ bool passmain=true; int k=0; cout << "Testing Card's > operator" << endl; for(int i=0;i<52;i+=4){ for(int j=2;j<52;j+=4){ if(i!=j){ if(( !GREATERTHAN1[k]&& (deck[i] > deck[j])) || (GREATERTHAN1[k] && !(deck[i] > deck[j]))){ failedtests[testnumber]=1; passmain=false; #if VERBOSE==1 cout << "Card's > operator test failed." << endl; cout << "Your program reported that " << deck[i].Face() << deck[i].Suit(); cout << " > " << deck[j].Face() << deck[j].Suit() << endl << endl; #endif } k++; testnumber++; } } } return passmain; } /*Test Card's < operator. Passed array that holds every card in a deck, an array that holds which tests failed and a reference to what test number we are on. returns true if all tests passed false otherwise*/ bool TestCardLesser(Card deck[],int failedtests[],int& testnumber){ cout << "Testing Card's < operator" << endl; bool passmain=true; int k=0; for(int i=0;i<52;i+=4){ for(int j=2;j<52;j+=4){ if(i!=j){ if(( LESSTHAN1[k]&& !(deck[i] < deck[j])) || (!LESSTHAN1[k] && (deck[i] < deck[j]))){ failedtests[testnumber]=1; passmain=false; #if VERBOSE==1 cout << "Card's < operator test failed." << endl; cout << "Your program reported that " << deck[i].Face() << deck[i].Suit(); cout << " < " << deck[j].Face() << deck[j].Suit() << endl << endl; #endif } testnumber++; k++; } } } return passmain; } /*Tests the < operator using Plays with different/invalid number of cards*/ bool TestPlayLesser1(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int total=RSIZES[4]; //total number of Play objects cout << "Testing Play's < Operator on Plays with different number of cards" << endl; for(int i=0;i<total;i++){ for(int j=0;j<total;j++){ if(i!=j && NUMCARDS[i]!=NUMCARDS[j]){ if(((NUMCARDS[i]<NUMCARDS[j]) && !(parray[i]<parray[j]))|| (!(NUMCARDS[i]<NUMCARDS[j]) && parray[i]<parray[j])){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[j].Get(getarr2); cout << "The Play's < operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 < P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[j]); cout << endl; #endif } testnumber++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the < operator using Plays with Singles*/ bool TestPlayLesser2(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int k=0; cout << "Testing Play's < Operator on single cards" << endl; for(int i=0;i<52;i+=4){ for(int j=2;j<52;j+=4){ if(i!=j){ if((!LESSTHAN1[k] && (parray[i] < parray[j])) || (LESSTHAN1[k] && (!(parray[i] < parray[j])))){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[j].Get(getarr2); cout << "The Play's < operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 < P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[j]); cout << endl; cout << ((parray[i] < parray[j])?"true":"false")<< endl; #endif } k++; testnumber++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the < operator using Plays with Singles*/ bool TestPlayLesser3(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int j=0; cout << "Testing Play's < Operator on Pairs" << endl; for(int i=RSIZES[0];i<RSIZES[1];i++){ for(int k=RSIZES[0];k<RSIZES[1];k++){ if(i!=k && !(!parray[i]) && !(!parray[k])){ if((LESSTHAN2[j] && !(parray[i] < parray[k])) || (!LESSTHAN2[j] && parray[i] < parray[k])){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[k].Get(getarr2); cout << "The Play's < operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 < P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[k]); cout << endl; #endif } testnumber++; j++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the < operator using Plays with Singles*/ bool TestPlayLesser4(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int j=0; cout << "Testing Play's < Operator on 3 of a kinds" << endl; for(int i=RSIZES[1];i<RSIZES[2];i++){ for(int k=RSIZES[1];k<RSIZES[2];k++){ if(i!=k && !(!parray[i]) && !(!parray[k])){ if((LESSTHAN3[j] && !(parray[i] < parray[k])) || (!LESSTHAN3[j] &&(parray[i] < parray[k]))){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[k].Get(getarr2); cout << "The Play's < operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 < P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,parray[i].NumCards()); cout << "P2 is "; PrintCardArray(getarr2,parray[k].NumCards()); cout << "Your < operator returns " <<((parray[i] < parray[k])?"true":"false") << endl; cout << "It should return " << (LESSTHAN3[j]?"true":"false") << endl; cout << endl; #endif } testnumber++; j++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the < operator using Plays with 4 of a kinds*/ bool TestPlayLesser5(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int j=0; cout << "Testing Play's < Operator on 4 of a kinds" << endl; for(int i=RSIZES[2];i<RSIZES[3];i++){ for(int k=RSIZES[2];k<RSIZES[3];k++){ if(i!=k && !(!parray[i]) && !(!parray[k])){ if((LESSTHAN4[j] && !(parray[i] < parray[k])) || (!LESSTHAN4[j] &&(parray[i] < parray[k]))){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[k].Get(getarr2); cout << "The Play's < operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 < P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[k]); cout << "Your < operator returns " <<((parray[i] < parray[k])?"true":"false") << endl; cout << "It should return " << (LESSTHAN4[j]?"true":"false") << endl; cout << endl; #endif } testnumber++; j++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the < operator using Plays with 4 of a kinds*/ bool TestPlayLesser6(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int j=0; cout << "Testing Play's < Operator on Plays with 5 Cards" << endl; for(int i=RSIZES[3];i<RSIZES[4];i++){ for(int k=RSIZES[3];k<RSIZES[4];k++){ if(i!=k &&!HasSame(PICK5[i-RSIZES[3]],PICK5[k-RSIZES[3]]) && !(!parray[i]) && !(!parray[k])){ if((LESSTHAN5[j] && !(parray[i] < parray[k])) || (!LESSTHAN5[j] &&(parray[i] < parray[k]))){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[k].Get(getarr2); cout << "The Play's < operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 < P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[k]); cout << "Your < operator returns " <<((parray[i] < parray[k])?"true":"false") << endl; cout << "It should return " << (LESSTHAN5[j]?"true":"false") << endl; cout << endl; #endif } testnumber++; j++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the > operator using Plays with different/invalid number of cards*/ bool TestPlayGreater1(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int total=RSIZES[4]; //total number of Play objects cout << "Testing Play's > Operator on Plays with different number of cards" << endl; for(int i=0;i<total;i++){ for(int j=0;j<total;j++){ if(i!=j && NUMCARDS[i]!=NUMCARDS[j]){ if(((NUMCARDS[i]>NUMCARDS[j]) && !(parray[i]>parray[j]))|| (!(NUMCARDS[i]>NUMCARDS[j]) && parray[i]>parray[j])){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[j].Get(getarr2); cout << "The Play's > operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 > P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[j]); cout << endl; #endif } testnumber++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the < operator using Plays with Singles*/ bool TestPlayGreater2(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int k=0; cout << "Testing Play's > Operator on single cards" << endl; for(int i=0;i<52;i+=4){ for(int j=2;j<52;j+=4){ if(i!=j){ if((!GREATERTHAN1[k] && (parray[i] > parray[j])) || (GREATERTHAN1[k] && (!(parray[i] > parray[j])))){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[j].Get(getarr2); cout << "The Play's > operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 > P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[j]); cout << endl; #endif } k++; testnumber++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the > operator using Plays with Singles*/ bool TestPlayGreater3(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int j=0; cout << "Testing Play's > Operator on Pairs" << endl; for(int i=RSIZES[0];i<RSIZES[1];i++){ for(int k=RSIZES[0];k<RSIZES[1];k++){ if(i!=k && !(!parray[i]) && !(!parray[k])){ if((GREATERTHAN2[j] && !(parray[i] > parray[k])) || (!GREATERTHAN2[j] && parray[i] > parray[k])){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[k].Get(getarr2); cout << "The Play's > operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 > P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[k]); cout << endl; #endif } testnumber++; j++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the < operator using Plays with Singles*/ bool TestPlayGreater4(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int j=0; cout << "Testing Play's > Operator on 3 of a kinds" << endl; for(int i=RSIZES[1];i<RSIZES[2];i++){ for(int k=RSIZES[1];k<RSIZES[2];k++){ if(i!=k && !(!parray[i]) && !(!parray[k])){ if((GREATERTHAN3[j] && !(parray[i] > parray[k])) || (!GREATERTHAN3[j] && parray[i] > parray[k])){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[k].Get(getarr2); cout << "The Play's > operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 > P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,parray[i].NumCards()); cout << "P2 is "; PrintCardArray(getarr2,parray[k].NumCards()); cout << "Your > operator returns " <<((parray[i] < parray[k])?"true":"false") << endl; cout << "It should return " << (LESSTHAN3[j]?"true":"false") << endl; cout << endl; #endif } testnumber++; j++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the < operator using Plays with 4 of a kinds*/ bool TestPlayGreater5(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int j=0; cout << "Testing Play's > Operator on 4 of a kinds" << endl; for(int i=RSIZES[2];i<RSIZES[3];i++){ for(int k=RSIZES[2];k<RSIZES[3];k++){ if(i!=k && !(!parray[i]) && !(!parray[k])){ if((GREATERTHAN4[j] && !(parray[i] > parray[k])) || (!GREATERTHAN4[j] && parray[i] > parray[k])){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[k].Get(getarr2); cout << "The Play's > operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 > P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[k]); cout << "Your < operator returns " <<((parray[i] < parray[k])?"true":"false") << endl; cout << "It should return " << (LESSTHAN4[j]?"true":"false") << endl; cout << endl; #endif } testnumber++; j++; } } } return passmain; } #endif #if TESTPLAY == ON /*Tests the > operator using Plays with 4 of a kinds*/ bool TestPlayGreater6(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int j=0; cout << "Testing Play's > Operator on Plays with 5 Cards" << endl; for(int i=RSIZES[3];i<RSIZES[4];i++){ for(int k=RSIZES[3];k<RSIZES[4];k++){ if(i!=k &&!HasSame(PICK5[i-RSIZES[3]],PICK5[k-RSIZES[3]]) && !(!parray[i]) && !(!parray[k])){ if((GREATERTHAN5[j] && !(parray[i] > parray[k])) || (!GREATERTHAN5[j] && parray[i] > parray[k])){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON Card getarr1[5],getarr2[5]; parray[i].Get(getarr1); parray[k].Get(getarr2); cout << "The Play's > operator is not working properly" << endl; cout << "Your operator returned the wrong value when" << endl; cout << "Comparing P1 > P2 " << endl; cout << "P1 is "; PrintCardArray(getarr1,NUMCARDS[i]); cout << "P2 is "; PrintCardArray(getarr2,NUMCARDS[k]); cout << "Your < operator returns " <<((parray[i] < parray[k])?"true":"false") << endl; cout << "It should return " << (LESSTHAN5[j]?"true":"false") << endl; cout << endl; #endif } testnumber++; j++; } } } return passmain; } #endif
Here is the PLAY ! operatorCode:bool TestCardConstructor(int failedtests[],int& testnumber){ Card* c1; int suitidx,faceidx; //used to hold index of suit and face bool failedmain=false; cout << "Testing Card(char,int) constructor" << endl; for(int i=0;i<52;i++){ suitidx=i%4; faceidx=i/4; char currsuit=(i%3)?SUITS[suitidx]:tolower(SUITS[suitidx]); //uses the lower //case char once //in a while to //make sure it works c1=new Card(currsuit,FACES[faceidx]); //create a Card if(!(*c1)){ //check ! operator failedtests[testnumber]=1; failedmain=true;
Code:bool TestNotOperator(Play parray[], int failedtests[],int& testnumber){ bool passmain=true; int total=RSIZES[4]; //total number of Play objects cout << "Testing Play's ! operator" << endl; for(int i=0;i<total;i++){ bool notrc=!parray[i]; if((VALIDPLAYS[i] && notrc) || (!VALIDPLAYS[i]&& (!notrc))){ passmain=false; failedtests[testnumber]=1; #if VERBOSE==ON cout << "The Play's !operator is not working properly" << endl; cout << "The operator should have returned "<< ((!VALIDPLAYS[i])?"true":"false")<< endl; cout << "Your function returned " << ((!parray[i])?"true":"false")<<endl; cout << i << endl; Card arr[5]; int getrc=parray[i].Get(arr); PrintCardArray(arr,getrc); cout << endl; #endif } testnumber++; } return passmain; } #endif



LinkBack URL
About LinkBacks


