Ошибка пустого значения компилятора GCC - PullRequest
0 голосов
/ 09 мая 2018

Мой компилятор GCC показывает «пустое значение не игнорируется, как должно быть», и я до сих пор не нашел решения для моего кода ниже: Мои данные приведены ниже

#include<iostream>

using namespace std;

class enemy
{
public:
    virtual void attack()
    {
        cout<<"Yo!!! i am the ENEMY "<<endl;
    }
};

class ninja: public enemy
{
public:
    void attack()
    {
        cout<<"I am the ninja"<<endl;
    }
};

class monster: public enemy
{
public:
    void attack()
    {
        cout<<"And, I am the monster"<<endl;
    }
};

int main()
{
    ninja n;
    monster m;
    enemy *enemya = &n;
    enemy *enemyb = &m;
   *enemya -> attack();
   *enemyb -> attack();
}

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Из-за приоритета оператора выражение *enemya -> attack() равно *(enemya -> attack()).

То есть вы пытаетесь разыменовать то, что возвращает enemya -> attack(), а это ничто.

Кажется, вы неправильно понимаете, как работают указатели на объект, поскольку вы пытаетесь разыменовать указатели дважды . Либо используйте оператор стрелки ->, либо используйте оператор унарного разыменования * с оператором точки ..

т.е. либо enemya -> attack(), либо (*enemya) . attack().

0 голосов
/ 09 мая 2018

Член доступа (->), связывает крепче, чем унарный *. Ваши звонки на attack эквивалентны следующим:

*(enemya -> attack());

Вы пытаетесь разыменовать void, что просто неправильно. Удалите лишний оператор.

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