К>class A
К>{
К> int a;
К>public:
К> A(int c=0):a(c)
К> {
К> std:: cout<<a<<"zz"<<endl;
К> };
К> ~A(){};
К>};
К>int main()
К>{
К> A a();//A a=A();все ок
К> return 0;
К>}
К>как результат МV2008: warning C4930: 'A a(void)': prototyped function not called (was a variable definition intended?)
К>Почему не вызывается конструктор?
потому что это объвление функции "a" не принимающией параметров и возвращающей экземпляр класс A
Здравствуйте, zaufi, Вы писали:
Z>Здравствуйте, Кнопка, Вы писали:
К>>Здравствуйте, zaufi, Вы писали:
Z>>>Здравствуйте, Кнопка, Вы писали:
К>>>>имеем код: Z>>>
К>>>>class A
К>>>>{
К>>>> int a;
К>>>>public:
К>>>> A(int c=0):a(c)
К>>>> {
К>>>> std:: cout<<a<<"zz"<<endl;
К>>>> };
К>>>> ~A(){};
К>>>>};
К>>>>int main()
К>>>>{
К>>>> A a();
Z>>>//A a=A();все ок
К>>>> return 0;
К>>>>}
Z>>>
К>>>>как результат МV2008: warning C4930: 'A a(void)': prototyped function not called (was a variable definition intended?)
К>>>>Почему не вызывается конструктор? Z>>>потому что это объвление функции "a" не принимающией параметров и возвращающей экземпляр класс A
К>>Оммм...? К>>A a(5); эт тоже визов функции, да?)
Z>ну да! конструктора )
Здравствуйте, zaufi, Вы писали:
Z>Здравствуйте, Кнопка, Вы писали:
К>>имеем код: Z>
К>>class A
К>>{
К>> int a;
К>>public:
К>> A(int c=0):a(c)
К>> {
К>> std:: cout<<a<<"zz"<<endl;
К>> };
К>> ~A(){};
К>>};
К>>int main()
К>>{
К>> A a();
Z>//A a=A();все ок
К>> return 0;
К>>}
Z>
К>>как результат МV2008: warning C4930: 'A a(void)': prototyped function not called (was a variable definition intended?)
К>>Почему не вызывается конструктор? Z>потому что это объвление функции "a" не принимающией параметров и возвращающей экземпляр класс A
К>>>Почему не вызывается конструктор? Z>>потому что это объвление функции "a" не принимающией параметров и возвращающей экземпляр класс A
К>Оммм...? К>A a(5); эт тоже визов функции, да?)
А вот это уже конструирование объекта. В отличие от исходной, последняя конструкция не может трактоваться как-то иначе. Конструкция, приведенная тобой вначале может трактоваться двояко: либо как определение и инициализация объекта, либо как объявление функции. Стандарт языка предписывает разрешать эту неоднозначность в пользу второго варианта, т.е. объявления функции.
--
Справедливость выше закона. А человечность выше справедливости.
Здравствуйте, Кнопка, Вы писали:
К>Здравствуйте, zaufi, Вы писали:
Z>>Здравствуйте, Кнопка, Вы писали:
К>>>имеем код: Z>>
К>>>class A
К>>>{
К>>> int a;
К>>>public:
К>>> A(int c=0):a(c)
К>>> {
К>>> std:: cout<<a<<"zz"<<endl;
К>>> };
К>>> ~A(){};
К>>>};
К>>>int main()
К>>>{
К>>> A a();
Z>>//A a=A();все ок
К>>> return 0;
К>>>}
Z>>
К>>>как результат МV2008: warning C4930: 'A a(void)': prototyped function not called (was a variable definition intended?)
К>>>Почему не вызывается конструктор? Z>>потому что это объвление функции "a" не принимающией параметров и возвращающей экземпляр класс A
К>Оммм...? К>A a(5); эт тоже визов функции, да?)
1. В первом объяснении и написано "объявление функции", а не "вызов функции".
2. Это — определение объекта а типа A с инициализацией константой 5.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Кнопка, Вы писали:
К>Здравствуйте, zaufi, Вы писали:
Z>>Здравствуйте, Кнопка, Вы писали:
К>>>имеем код: Z>>
К>>>class A
К>>>{
К>>> int a;
К>>>public:
К>>> A(int c=0):a(c)
К>>> {
К>>> std:: cout<<a<<"zz"<<endl;
К>>> };
К>>> ~A(){};
К>>>};
К>>>int main()
К>>>{
К>>> A a();
Z>>//A a=A();все ок
К>>> return 0;
К>>>}
Z>>
К>>>как результат МV2008: warning C4930: 'A a(void)': prototyped function not called (was a variable definition intended?)
К>>>Почему не вызывается конструктор? Z>>потому что это объвление функции "a" не принимающией параметров и возвращающей экземпляр класс A
К>Оммм...? К>A a(5); эт тоже визов функции, да?)
Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Кнопка, Вы писали:
Z>>>
К>>>>int main()
К>>>>{
К>>>> A a();
К>>>>}
Z>>>
К>>>>Почему не вызывается конструктор? Z>>>потому что это объвление функции "a" не принимающией параметров и возвращающей экземпляр класс A
К>>Оммм...? К>>A a(5); эт тоже визов функции, да?)
R>А вот это уже конструирование объекта. В отличие от исходной, последняя конструкция не может трактоваться как-то иначе. Конструкция, приведенная тобой вначале может трактоваться двояко: либо как определение и инициализация объекта, либо как объявление функции. Стандарт языка предписывает разрешать эту неоднозначность в пользу второго варианта, т.е. объявления функции.
Здравствуйте, Кнопка, Вы писали:
К>Здравствуйте, zaufi, Вы писали:
Z>>Здравствуйте, Кнопка, Вы писали:
К>>>Здравствуйте, zaufi, Вы писали:
Z>>>>Здравствуйте, Кнопка, Вы писали:
К>>>>>имеем код: Z>>>>
К>>>>>class A
К>>>>>{
К>>>>> int a;
К>>>>>public:
К>>>>> A(int c=0):a(c)
К>>>>> {
К>>>>> std:: cout<<a<<"zz"<<endl;
К>>>>> };
К>>>>> ~A(){};
К>>>>>};
К>>>>>int main()
К>>>>>{
К>>>>> A a();
Z>>>>//A a=A();все ок
К>>>>> return 0;
К>>>>>}
Z>>>>
К>>>>>как результат МV2008: warning C4930: 'A a(void)': prototyped function not called (was a variable definition intended?)
К>>>>>Почему не вызывается конструктор? Z>>>>потому что это объвление функции "a" не принимающией параметров и возвращающей экземпляр класс A
К>>>Оммм...? К>>>A a(5); эт тоже визов функции, да?)
Z>>ну да! конструктора )
К>Неожидано, кэп=))
Кстати в сервис паке к студии 2010, warning по русски написан будет.
И еще кстати A *a = new A() — проходит. Также как и без скобок. Вот такой головняк с этими плюсами)
Здравствуйте, Кнопка, Вы писали:
К>class A К> A a();//A a=A();все ок
К>Почему не вызывается конструктор?
Когда нечто может быть и объявлением, и чем-то еще, оно трактуется как объявление. В случае класса можно написать и просто A a — и вызовется конструктор по умолчанию. Иногда, если нужно явно указать, что нужна инициализация без параметров — для встроенных типов int x и int x = int() дают разный результат (только второе инициализирует нулем) — приходится писать X x = X() или X x((X())), причем лишние скобки здесь обязательны, без них это снова было бы воспринято как объявление.