Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2011, 19:24   #1
igor17
Пользователь
 
Аватар для igor17
 
Регистрация: 02.06.2010
Сообщений: 16
По умолчанию Проблема с конструктором

Добрый день.
Почему то не работает программа с написанным конструктором а также с конструктором по умолчанию. Подскажите пожалуйста, что в ней неправильно?

Код:
#include<string>
#include<iostream>

using namespace std;

class Book
{public:
 char name[40];
 int x;
 Book(); //с ним не работает :(
 void print()  {cout<<' '<<x<<' '<<name<<endl;}   // вывод на экран
};
 void main()
  { 
setlocale(LC_CTYPE, "Russian");
	 Book aa = {"спасибо мама",200};
     Book bb;
     bb.x=50;
     strcpy(bb.name,"papa");
     aa.print(); bb.print();
 cin.get();          
 }
Error 1 error C2552: 'aa' : non-aggregates cannot be initialized with initializer list c:\documents and settings\valiko\my documents\visual studio 2008\projects\proba\proba\proba.cpp 16 proba



конструктор с параметрами тоже почему то не работает:

Код:
class Book
{public:
 char name[40];
 int x;
 //Book(); //с конструктором не работает :(
Book(char name, int x); //с конструктором не работает :(
 void print()  {cout<<' '<<x<<' '<<name<<endl;}   // вывод на экран
};
 void main()
  { 
setlocale(LC_CTYPE, "Russian");
	 Book aa = {"спасибо мама",200};
     Book bb;
     bb.x=50;
     strcpy(bb.name,"papa");
     aa.print(); bb.print();
 cin.get();          
 }
Error 1 error C2552: 'aa' : non-aggregates cannot be initialized with initializer list c:\documents and settings\valiko\my documents\visual studio 2008\projects\proba\proba\proba.cpp 17 proba

Последний раз редактировалось ACE Valery; 16.05.2011 в 01:41.
igor17 вне форума Ответить с цитированием
Старый 15.05.2011, 19:44   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
Book()
{
    do something;
}
Конструктор так записывается, а не как у вас, если правильно разобрал, используйте тег [CODE] (значек #).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.05.2011, 19:44   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Подскажите пожалуйста, что в ней неправильно?

неправильная инициализация

вызов конструктора с параметрами:

Book aa("спасибо мама", 200);
Rififi вне форума Ответить с цитированием
Старый 15.05.2011, 19:51   #4
igor17
Пользователь
 
Аватар для igor17
 
Регистрация: 02.06.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Код:
Book()
{
    do something;
}
Конструктор так записывается, а не как у вас, если правильно разобрал, используйте тег [CODE] (значек #).
При использовании do something; выдаёт такую ошибку:

Error 1 error C2065: 'something' : undeclared identifier
igor17 вне форума Ответить с цитированием
Старый 15.05.2011, 19:53   #5
Hemul
Форумчанин
 
Регистрация: 03.10.2010
Сообщений: 321
По умолчанию

do something - это сделать что-нибудь ,т.е. там могут быть ваши операторы
Hemul вне форума Ответить с цитированием
Старый 15.05.2011, 19:53   #6
igor17
Пользователь
 
Аватар для igor17
 
Регистрация: 02.06.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Подскажите пожалуйста, что в ней неправильно?

неправильная инициализация

вызов конструктора с параметрами:

Book aa("спасибо мама", 200);
Это не инициализация. Здесь создаётся объект аа класса Book.
igor17 вне форума Ответить с цитированием
Старый 15.05.2011, 19:55   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

omfg, do something переводится как делай что-то.
Загляните в документация\учебник все-таки. Не осилил весь ваш неотформатированный код, но вы:
1. Создаете конструктор без аргументов, а вызываете его с аргументами.
2. Неправильный синтаксис конструктора.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.05.2011, 19:57   #8
igor17
Пользователь
 
Аватар для igor17
 
Регистрация: 02.06.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Hemul Посмотреть сообщение
do something - это сделать что-нибудь ,т.е. там могут быть ваши операторы
Зачем операторы в конструктор по умолчанию? Он и без них должен работать. Интересно то, что если закоммментировать мои конструкторы
то программа работает корректно, вызывая собственный конструктор. Почему он работает а мои нет - мне неведомо.
igor17 вне форума Ответить с цитированием
Старый 15.05.2011, 20:00   #9
igor17
Пользователь
 
Аватар для igor17
 
Регистрация: 02.06.2010
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
omfg, do something переводится как делай что-то.
Загляните в документация\учебник все-таки. Не осилил весь ваш неотформатированный код, но вы:
1. Создаете конструктор без аргументов, а вызываете его с аргументами.
2. Неправильный синтаксис конструктора.
1. конструктор без аргументов и есть конструктор по умолчанию.
2. вероятно вы правы, но где же именно ошибка?

Правила оформления конструкторов:
1. Конструктор имеет то же имя что и класс;
2. Конструкторов в классе может быть несколько, отличных списком параметров;
3. К. никогда не имеет выходных значений;
4. К. может иметь входные параметры;
5. Если их нет, то К. называется К. по умолчанию;
6. К. по умолчанию может быть только один;
7. К. не наследуется;
8. Если К. не задан, то вызывается К. по умолчанию.
igor17 вне форума Ответить с цитированием
Старый 15.05.2011, 20:17   #10
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
1. Создаете конструктор без аргументов, а вызываете его с аргументами.
Ошибся, код трудночитаем.

; не нужна (т.е. Book() )
и
{}
даже если нет операторов.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Експеримент над конструктором Golovastik Общие вопросы C/C++ 1 03.06.2010 04:57
Что-то не так с конструктором Дырдин Общие вопросы C/C++ 7 26.03.2010 18:33
Помогите с конструктором girkoff Общие вопросы C/C++ 10 01.11.2009 16:01
Как проверить создан ли класс конструктором? Вадим Буренков Общие вопросы Delphi 10 01.07.2009 22:47
массив объектов с конструктором копии pu4koff Общие вопросы C/C++ 6 18.06.2008 17:33