Ошибка C2446: '==': нет преобразования из 'int' в 'int (__thiscall keyboard :: *) (void)' - PullRequest
0 голосов
/ 03 марта 2020

Мой код работает нормально, но я получаю эту ошибку в своем классе: Ошибка C2446: '==': нет преобразования из 'int' в 'int (__thiscall keyboard :: *) (void)'. Вот проблема:

class keyboard {

public:

    char W = 'W';
    char A = 'A';
    char S = 'S';
    char D = 'D';
    char E = 'E';
    char tasta;

    int key_pressed_frd() {
        cin >> tasta;
        if (tasta == W) return 1;
        else return 0;

    }

Это часть моего класса, которая включает в себя еще 4 функции (такие же, как эта), и я получаю ту же ошибку.

Так что это мое целое code:

#include <iostream>

using namespace std;

char tasta;

class keyboard {


public:

    int key_pressed_frd() {
        cin >> tasta;
        if (tasta == 'w') return 1;
        else return 0;

    }

    int key_pressed_back() {
        cin >> tasta;
        if (tasta == 's') return 1;
        else return 0;

    }

    int key_pressed_lft() {
        cin >> tasta;
        if (tasta == 'a') return 1;
        else return 0;

    }

    int key_pressed_rgt() {
        cin >> tasta;
        if (tasta == 'd') return 1;
        else return 0;

    }

    int key_pressed_stop() {
        cin >> tasta;
        if (tasta == 'e') return 1;
        else return 0;

    }
};

void forward() {

    cout << "I go forward!";
}

void back() {
    cout << "I go back!";
}

void left() {
    cout << "I go left!";
}

void right() {
    cout << "I go right!";
}

int main()
{
    //keyboard apas;

    while (true) {

        if (&keyboard::key_pressed_frd == 1)
            while (&keyboard::key_pressed_frd == 1) forward();

        if (&keyboard::key_pressed_back == 1)
            while (&keyboard::key_pressed_back == 1) back();

        if (&keyboard::key_pressed_lft == 1)
            while (&keyboard::key_pressed_lft == 1) left();

        if (&keyboard::key_pressed_rgt == 1)
            while (&keyboard::key_pressed_rgt == 1) right();

        if (&keyboard::key_pressed_stop == 1)
            while (&keyboard::key_pressed_stop == 1) break;

    }
}

В основном он использует класс для получения ввода с клавиатуры, а затем, если условие проверено, в консоли появится сообщение. Я думаю, что код очень неправильный, потому что я впервые использую класс, но любая помощь от вас будет признательна! Спасибо! PS: под вкусом на моем языке подразумевается случайная клавиша с клавиатуры

1 Ответ

0 голосов
/ 03 марта 2020

Чтобы вызвать функцию-член, добавьте к ней пустые скобки, например:

...
if (keyboard::key_pressed_rgt() == 1)
...

Амперсанд перед именем функции, как в &keyboard::key_pressed_rgt, указывает компилятору получить указатель на эта функция. Это не то, что вам нужно. Компилятор запутался в коде типа keyboard::key_pressed_rgt (без скобок) и предложил добавить амперсанд. Не хорошее предложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...