Ошибка: переменная или поле «PrintEntity» объявлены void void PrintEntity (Entity e); - PullRequest
1 голос
/ 16 октября 2019

Код действительно прост (но я новичок, поэтому я понятия не имею, что я делаю неправильно):

#include<iostream>
#include<string>

void PrintEntity(Entity* e);

class Entity
{
  public:
      int x,y;


      Entity(int x, int y)
      {

         Entity* e= this;
         e-> x=x;
         this->y=y;

         PrintEntity(this);

      }

  };

void PrintEntity(Entity* e)
  {
    // *Do stuff*
  }

int main()
  {

     return 0;
  }

Насколько я понимаю, ошибка заключается в том, что я не могу объявить функцию PrintEntity до того, какСущность класса. Но даже если бы я объявил функцию ниже класса, это было бы проблемой, поскольку в конструкторе я вызываю функцию PrintEntity.

Так что я застрял. Кто-нибудь может мне объяснить, что я делаю не так, пожалуйста?

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Объявите функцию перед определением класса, например

void PrintEntity( class Entity* e);

, используя разработанный спецификатор типа.

В противном случае компилятор не знает, что такое Entity.

0 голосов
/ 16 октября 2019

Компилятор читает ваш файл сверху вниз.

Когда он встречает void PrintEntity(Entity * e);, он должен определить, является ли Entity * e формальным параметром (делает это объявление функции) или умножением (делает этообъявление переменной с инициализатором).

Поскольку компилятор полностью не знает тип с именем «Entity», он решает, что это должно быть объявление переменной, а переменная не может иметь тип void.

Решение состоит в том, чтобы объявить класс перед прототипом функции, либо отдельно:

class Entity;
void PrintEntity(Entity* e);

, либо непосредственно в объявлении функции:

void PrintEntity(class Entity* e);
...