Доброго времени суток.
class A{
int i_;
public:
~A(){
cout << "A destr " << endl;
}
A();
A(int i) : i_(i){
cout << "My constr A " << endl;
}
};
int main(){
A* p = new A;
}
В такой реализации исходник не компилируется.
А вот в таком виде всё работает
class A{
int i_;
public:
~A(){
cout << "A destr " << endl;
}
A(){}
A(int i) : i_(i){
cout << "My constr A " << endl;
}
};
int main(){
A* p = new A;
}
Почему так?
Потому, что в первом случае конструктор у вас объявлен, но не определён, во втором - все ОК.
С C++11 так же доступна следующая запись, разрешающая компилятору генерировать конструктор по умолчанию:
A() = default;
Он компилируется, но не линкуется.
В первом случае у вас нет определения конструктора по умолчанию A::A()
- только его объявление, так что нечего вызывать при создании объекта без параметров
A* p = new A;
Если изменить код на
A* p = new A(0);
или дать значение по умолчанию конструктору
A(int i = 0) : i_(i){...
выбросив A();
, то все будет работать.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Есть у меня проект интерпретатора Basic, написанный на С++Проект довольно давний, ему уже лет 20
В общем, проблема в следующемЕсть задание написать простое приложение на чистом WinAPI