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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2008, 21:32   #1
Nullator
 
Регистрация: 03.03.2008
Сообщений: 3
По умолчанию Ошибка при работе с структурой

Недавно начал изучать С++ и столкнулся с проблемой.

Код:
{
  struct base                         // Создаю структуру
  {
    String fname;
    int age;
  } ;
                                          
  base home;                         // Создаю переменную
  home.fname = "MyName";      // Ввожу данные
  home.age = 25;
}
Так все работает без ошибок.
Но в книге есть пример такого ввода данных:

Код:
{
  struct base                         // Таже структура
  {
    String fname;
    int age;
  } ;

  base home;
  home = { "MyName" , 25 };    // Вот тут появляется ошибка 
}
Что я делаю не так?
Nullator вне форума Ответить с цитированием
Старый 03.03.2008, 23:35   #2
alexx777
Пользователь
 
Регистрация: 20.02.2008
Сообщений: 75
По умолчанию

Чтобы инициализировать структуру с помощью фигурных скобок нужно записать:

base home = { "MyName", 25 };
alexx777 вне форума Ответить с цитированием
Старый 04.03.2008, 04:54   #3
Vincent
Пользователь
 
Аватар для Vincent
 
Регистрация: 02.02.2007
Сообщений: 29
По умолчанию

+1
Если хочешь инициализировать структуру уже после объявления, то пиши

home.fname = "MyName";
home.age = 25;
Быстро пойманный эксепшн исключением не считается
Vincent вне форума Ответить с цитированием
Старый 04.03.2008, 10:25   #4
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

Nullator, рекомендую выкинуть книгу (не удивлюсь, если это Подбельский )
тема про нормальную литературу в этой ветке наверху, вроде
Alek86 вне форума Ответить с цитированием
Старый 04.03.2008, 13:39   #5
Nullator
 
Регистрация: 03.03.2008
Сообщений: 3
По умолчанию

Книгу не выкину, мне она нравится (Автор - Р. Лафоре), и в книге написано иммено так как вы советуете, но так тоже не работает:

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  struct base
  {
    String fname;
    int age;
  } ;
  base home = { "MyName", 25 };   // Тут Builder находит ошибки
}
Пишу в C++ Buider 6, при попытке компилировать на этой строчке находит много ошибок.
Nullator вне форума Ответить с цитированием
Старый 04.03.2008, 13:59   #6
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

может, это из-за String...

а синтаксис абсолютно правильный
Alek86 вне форума Ответить с цитированием
Старый 04.03.2008, 14:15   #7
Nullator
 
Регистрация: 03.03.2008
Сообщений: 3
По умолчанию

Не знаю в чем точно была ошибка, но сначала я установил Update1 на Builder, а потом заменил строку

String fname;
на
Char fname [15];

и все заработало.

Поэтому всем спасибо за помошь, вроде со структурами разобрался.
Nullator вне форума Ответить с цитированием
Старый 04.03.2008, 14:23   #8
theos
Форумчанин
 
Аватар для theos
 
Регистрация: 10.12.2007
Сообщений: 158
По умолчанию

Надо писать что-то типа
Код:
base home = { String("MyName"), 25 };
Иначе ты присваиваешь переменной типа String значение char*. Странно, что не цепляется страндартный конструктор класса String. String(const char*) в любом подобном классе (строка) есть 100%, если ты конечно не сам его писал
theos вне форума Ответить с цитированием
Старый 05.03.2008, 23:58   #9
ag-moscow
Пользователь
 
Аватар для ag-moscow
 
Регистрация: 24.02.2008
Сообщений: 13
По умолчанию

Возможно стоит переопределить конструктор копирования для структуры
printf ("Hello, World!"), fflush (stdout);
std::cout << std::endl;
ag-moscow вне форума Ответить с цитированием
Старый 06.03.2008, 16:30   #10
alexx777
Пользователь
 
Регистрация: 20.02.2008
Сообщений: 75
По умолчанию

Цитата:
Сообщение от ag-moscow Посмотреть сообщение
Возможно стоит переопределить конструктор копирования для структуры
Если в классе (структуре) не обьявлен копирующий конструктор, компилятор создаст его автоматически.
alexx777 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при работе со структурой msvc vvviperrr Общие вопросы C/C++ 0 07.05.2008 20:34
Ошибка при работе с потоками vitalik007 Общие вопросы Delphi 6 09.03.2008 09:25
Ошибка при работе с файлом LeoN Общие вопросы Delphi 1 07.12.2007 15:21
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10