С помощью моего кода я создал класс, в котором есть конструкторы, создающие счетчик.У счетчиков есть процедуры, которые заставляют его вращаться, и результат отправляется в landOn.Я посмотрел на похожие вопросы, но не смог найти тот, в котором упоминалось, что «int» несовместим с «const char *» после попытки перегрузить оператор.
Часть, в которой я пытаюсь перегрузить »== "сравнивать landOn с" const char * ", являющимся названием плода, который будет читать счетчик:
bool operator == (Cspinner leftside, const char * rightside)
{
return leftside.landOn == rightside;
}
Из того, что я понимаю, я не могу объявить landOn как" int ", потому что егосовместим с "const char *", когда я пытаюсь их сравнить.
Вот весь код:
#include <iostream>
#include <time.h>
#include <string>
using namespace std;
class Cspinner
{
friend bool IsEqual(Cspinner param1, Cspinner param2);
friend bool operator == (Cspinner leftside, Cspinner rightside);
friend bool operator == (int leftside, Cspinner rightside);
friend ostream & operator <<(ostream & leftside, Cspinner rightside);
friend bool operator == (Cspinner leftside, const char* rightside);
private:
int result;
int landOn = 0;
int fruit[5] = { 30, 55, 75, 90, 100 };
public:
Cspinner()
{
fruit[0] = 30; // 30% Probability
fruit[1] = 55; // 25% Probability
fruit[2] = 75; // 20% Probability
fruit[3] = 90; // 15% Probability
fruit[4] = 100; // 10% Probability
}
Cspinner(int Newapple, int Neworange, int Newcherry, int Newbannana, int Newpeach)
{
fruit[0] = Newapple;
fruit[1] = Newapple + Neworange;
fruit[2] = Newapple + Neworange + Newcherry;
fruit[3] = Newapple + Neworange + Newcherry + Newbannana;
fruit[4] = Newapple + Neworange + Newcherry + Newbannana + Newpeach;
}
void spin() // Procedure to spin fruit on spinner
{
result = rand() % 100;
if (result <= fruit[0])
{
landOn = 0;
}
else if (result < fruit[1])
{
landOn = 1;
}
else if (result < fruit[2])
{
landOn = 2;
}
else if (result < fruit[3])
{
landOn = 3;
}
else
{
landOn = 4;
}
}
int ReturnlandOn()
{
return landOn;
}
bool operator ==(int rightside)
{
return this->landOn == rightside;
}
bool operator < (int rightside)
{
return landOn < rightside;
}
};
bool operator == (Cspinner leftside, const char * rightside)
{
return leftside.landOn == rightside;
}
bool IsEqual(Cspinner param1, Cspinner param2)
{
return param1.landOn == param2.landOn;
}
bool operator == (Cspinner leftside, Cspinner rightside)
{
return leftside.landOn == rightside.landOn;
}
bool operator == (int leftside, Cspinner rightside)
{
return leftside == rightside.landOn;
}
ostream & operator <<(ostream & leftside, Cspinner rightside)
{
leftside << rightside.landOn;
return leftside;
}
void main()
{
srand(time(NULL));
Cspinner w1;
Cspinner w2;
Cspinner w3(80, 5, 5, 5, 5);
for (int x = 0; x <= 9; x++)
{
w1.spin();
w2.spin();
w3.spin();
cout << w1 << w2 << w3;
if (w1 == w2 && w2 == w3)
{
if (w1 == "Apple") cout << " (All Apples) ";
else if (w1 == "Orange") cout << " (All Oranges) ";
else if (w1 == "Cherry") cout << " (All Cherries) ";
else if (w1 == "Banana") cout << " (All Bananas) ";
else cout << " (All Peaches)";
}
cout << endl;
}
system("pause");
}
Error: Operand types are incompatible ("int" and "const char*") Line 89
Обновление:
Я работал над этим, и этот код, похоже, работает, однако способ его работы может быть не лучшим:
#include <iostream>
#include <time.h>
#include <string>
using namespace std;
class Cspinner
{
friend bool IsEqual(Cspinner param1, Cspinner param2);
friend bool operator == (Cspinner leftside, Cspinner rightside);
friend bool operator == (int leftside, Cspinner rightside);
friend ostream & operator <<(ostream & leftside, Cspinner rightside);
friend bool operator == (Cspinner leftside, const char* rightside);
private:
int result;
int landOn;
int fruit[5] = { 30, 55, 75, 90, 100 };
const char * name;
public:
Cspinner()
{
fruit[0] = 30; // 30% Probability
fruit[1] = 55; // 25% Probability
fruit[2] = 75; // 20% Probability
fruit[3] = 90; // 15% Probability
fruit[4] = 100; // 10% Probability
}
Cspinner(int Newapple, int Neworange, int Newcherry, int Newbannana, int Newpeach)
{
fruit[0] = Newapple;
fruit[1] = Newapple + Neworange;
fruit[2] = Newapple + Neworange + Newcherry;
fruit[3] = Newapple + Neworange + Newcherry + Newbannana;
fruit[4] = Newapple + Neworange + Newcherry + Newbannana + Newpeach;
}
void spin() // Procedure to spin fruit on spinner
{
result = rand() % 100;
if (result <= fruit[0])
{
landOn = 0;
name = "Apple ";
}
else if (result < fruit[1])
{
landOn = 1;
name = "Orange ";
}
else if (result < fruit[2])
{
landOn = 2;
name = "Cherry ";
}
else if (result < fruit[3])
{
landOn = 3;
name = "Banana ";
}
else
{
landOn = 4;
name = "Peach ";
}
}
int ReturnlandOn()
{
return landOn;
}
bool operator ==(int rightside)
{
return this->landOn == rightside;
}
bool operator < (int rightside)
{
return landOn < rightside;
}
};
bool operator == (Cspinner leftside, const char * rightside)
{
return leftside.name == rightside;
}
bool IsEqual(Cspinner param1, Cspinner param2)
{
return param1.landOn == param2.landOn;
}
bool operator == (Cspinner leftside, Cspinner rightside)
{
return leftside.landOn == rightside.landOn;
}
bool operator == (int leftside, Cspinner rightside)
{
return leftside == rightside.landOn;
}
ostream & operator <<(ostream & leftside, Cspinner rightside)
{
leftside << rightside.name;
return leftside;
}
void main()
{
srand(time(NULL));
Cspinner w1;
Cspinner w2;
Cspinner w3(5, 5, 80, 5, 5);
for (int x = 0; x <= 9; x++)
{
w1.spin();
w2.spin();
w3.spin();
cout << w1 << w2 << w3;
if (w1 == w2 && w2 == w3)
{
if (w1 == "Apple ") cout << " (All Apples) ";
else if (w1 == "Orange ") cout << " (All Oranges) ";
else if (w1 == "Cherry ") cout << " (All Cherries) ";
else if (w1 == "Banana ") cout << " (All Bananas) ";
else cout << " (All Peaches)";
}
cout << endl;
}
system("pause");
}