Запрещает сравнивать указатель с целым числом?

Я кодирую игру в farkle, и я сталкиваюсь с этой проблемой, хотя все, кроме двух, моих утверждений if являются bools.

Кроме того, как бы я позволил пользователю бросать конкретные кости? BloodshedDev / другие IDE, похоже, еще не работают в Windows 8, поэтому я использую Ideone и мне не повезло ни с чем из этого.

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

//global vars
int bubblehold;
int roll[6];
int score;
int bank;
int dicecatch;
int tempscore = 0;
int dicenum = 6;

//function prototype
void bubblesort(int[], int);
bool straightsix();
bool sixkind();
bool fivekind();
bool fourkind();
bool threekind();
int onefive();

int main() {
srand(time(0));
for(int i=0; i=dicenum-1; i++){
roll[i] = rand()%6+1;
}
bubblesort(roll,dicenum);
for(int i=0; i=dicenum-1; i++){
cout<< roll[i] <<", ";
}

if(straightsix == true){
tempscore = 1500;

}
else if(sixkind == true){
tempscore = 3000;

}
else if(fivekind == true){
tempscore = 2000;

}
else if(fourkind == true){
tempscore = 1000;
}
else if(threekind == true){
cout<< tempscore;
}
else if(onefive == 1){
tempscore = dicecatch * tempscore;
cout<< tempscore;
}
else if(onefive == 5){
tempscore = dicecatch * tempscore;
cout<< tempscore;
}

return 0;
}
void bubblesort(int a[], int x){
for (int i = 0; i < x-1; i++){
bubblehold = a[i+1];
a[i+1] = a[i];
a[i] = bubblehold;
}
}
bool straightsix(){
for(int i=0; i<5; i++){
if(roll[i]+1 != roll[i+5]){
return false;
}
}
}
bool sixkind(){
for(int i=0; i=5; i++){
if (roll[i] != roll[i+5]){
return false;
}
}
}
bool fivekind(){
for(int i=0; i=4; i++){
if (roll[i] != roll[i+4]){
return false;
}
}
}
bool fourkind(){
for(int i=0; i=3; i++){
if (roll[i] != roll[i+3]){
return false;
}
}
}
bool threekind(){
for(int i=0; i=2; i++){
if (roll[i] != roll[i+2]){
return false;
}
else if(i=1){
dicecatch = 3;
tempscore = dicecatch * 100;
return true;
}
else{
dicecatch = i;
tempscore = dicecatch * 100;
return true;
};
}
}

int onefive(){
for(int i=0; i=dicenum; i++){
if(roll[i] == 1){
dicecatch = dicecatch + 1;
tempscore = tempscore + 100;
return 1;
}
else if(roll[i] == 5){
dicecatch = dicecatch + 1;
tempscore = tempscore + 50;
return 5;
}
}
}

-4

Решение

В этой строке

if(straightsix == true){

вы сравниваете указатель на функцию с true, У вас есть похожие заявления с участием других функций.

Возможно, вы хотели использовать:

if(straightsix() == true){

В этом случае его можно упростить до:

if(straightsix()){
0

Другие решения

Расширяя немного ответ Р Саху, фактически разница заключается только в добавлении скобок, но я хотел бы добавить причину.

В C ++ (и на самом деле во всех других языках стиля C, о которых я знаю), когда вы ссылаетесь на функции с круглыми скобками, это большая разница. Помещение их означает, что код будет вызов Функция, выполнить весь свой код, и все, что он возвращает, будет использовано в сравнении впоследствии. Скобки также являются основным синтаксисом для передачи параметров и являются обязательными, даже если вы не передаете их при вызове, в отличие от языков базового стиля и многих других.

Пропуск скобок имеет совершенно иной смысл. Вместо того, чтобы инструктировать выполнение функции, он вернет указатель к функции и никогда не будет запускать какой-либо ее код. Этот указатель явно не логический и не ИНТ, это дает ошибку компилятора, скорее всего. Все твои если в главный есть эта проблема.

Правильное использование вызовов функций — это начальный вызов время а также srand, включая скобки и аргумент (ноль) внутри них.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector