Чарльз и Майкл Барр оба определили, что второе объявление на самом деле было прототипом функции, а не экземпляром A
.
Что касается возможных причин, по которым ваш первый фрагмент кода не работал, вы получите ошибку компиляции в этой ситуации, когда:
- Класс
A
наследуется от базового класса, у которого нет конструктора по умолчанию; OR
- Класс
A
содержит объекты типов, которые не имеют конструктора по умолчанию; OR
- Класс
A
содержит ссылочные элементы;
И
Вы предоставили конструктор по умолчанию, который исключает один или несколько из этих подобъектов из списка инициализаторов.
Все эти подобъекты нуждаются в некотором способе инициализации, и конструктор по умолчанию, созданный компилятором, этого не сделает. Обратите внимание, что во всех случаях вам нужно инициализировать их в списке инициализатора , а не в теле конструктора.