Ошибка при объявлении массива без первоначального указания размера: Crew :: flightAttendants Неполный тип не допускается - PullRequest
0 голосов
/ 04 августа 2020

Итак, учитывая этот класс в C ++ ...

    //C++ CODE    
        class Crew {
            Person flightAttendants[]; //Error: <error-type> Crew::flightAttendants Incomplete type is not allowed.
            Person captain, firstOfficer;
        public:
            Crew(Person, Person, Person);
        };

, я бы хотел объявить (но НЕ при первой инициализации) массив flightAttendants[] без указания его длины заранее ( Я просто хочу указать его размер после ). Так же, как, например, Java, в котором мы могли бы сделать:

    //JAVA CODE    
        class Lamp {
            private int nLightBulbs;
            private boolean lightBulbs[];
        
            Lamp(int nLightBulbs) {
                this.nLightBulbs = nLightBulbs;
                this.lightBulbs = new boolean[nLightBulbs];
            }
        }

Это вопрос.

1 Ответ

3 голосов
/ 04 августа 2020
Person flightAttendants[];

вы хотели, например

 Person * flightAttendants;

тогда, как в Java, у вас есть:

this.lightBulbs = new boolean[nLightBulbs];

в C ++ do

 flightAttendants = new Person[...expected size...];

Но гораздо практичнее использовать std::vector

 std::vector<Person> flightAttendants;

по многим причинам, включая возможность получить его размер / изменить его размер, и не управлять указателем, используемым в Person * flightAttendants (даже есть другие способы безопасного управления им)

Обратите внимание, что в Java вы всегда манипулируете указателем на экземпляры, в C ++ у нас есть выбор, и предыдущий массив / вектор не запоминает указатель на экземпляры Person , а экземпляры Person

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