Массив указателей как параметр в функции - PullRequest
2 голосов
/ 26 ноября 2011

Я создаю эту функцию в классе и получаю сообщение об ошибке: указатель на неполный тип класса не допускается.

Однако, насколько мне известно, можно объявить массив указателей на объект абстрактного класса. После этого вы можете передавать объекты производного класса в массив. Где проблема с этим кодом (класс Square является абстрактным):

public:
Player(int,int);
void captureSquare(Square* []);

void Player::captureSquare(Square* allSquares[22])
{
  for(int i=0;i<22;i++){
    Square* OnSquare = allSquares[i];
      if(OnSquare->getID==squarePosition){
        capturedSquare = OnSquare;
        break;
 }
}

}

Ответы [ 2 ]

6 голосов
/ 26 ноября 2011

Необходимо убедиться, что класс определение из Square виден, когда вы используете класс (разыменовывая указатель). Обычно так:

// player.hpp

class Square;

class Player
{
  void captureSquare(Square* []);
};

// player.cpp

#include "player.hpp"
#include "square.hpp"

void Player::captureSquare(Square* allSquares[22])
{
  allSquares[0]->foo();  // need complete class here!
}
1 голос
/ 26 ноября 2011

Ошибка, сообщающая о неполном типе, обычно означает, что определение класса недоступно в этот момент. Возможно, у вас есть строка типа class Square; (без обычных фигурных скобок и их содержимого) где-то в том же файле или во включенном файле?

Трудно сказать что-то более определенное, не видя больше вашего кода (и не зная, на какую строку жалуется компилятор).

...