Всем hi! Посмотрите плиз мою программу, хотел сделать, чтобы несколько объектов в виде string можно было сложить. То есть string1 = string12+ string3 + string4 и так далее. При string1 = string12+ string3 работает нормально, если слаживаю больше двух объектов, тогда вылетает. Заранее спасибо.
Здравствуйте, alexneta! Твоя ошибка в том, что ты возвращаешь ссылку на временный объект: перепиши оператор + таком образом: String operator + (const String & s) const; сам оператор тоже объяви константным так как он не изменяет твой объект - а с другой стороны оптимизация. И для полного удовольствия напиши конструцтор копирования String(const String & str); Ответ отправлен: 04.05.2003, 10:27 Отправитель: vitya Отвечает Ramzes
Приветствую Вас, alexneta! Ну естесственно... Все потому, что вы в операторе String &String::operator +(const String &Right) определили переменную- TmpStr как static. А как известно static переменные при повторном вызове функции не инициализируются. Добавьте в код copy constructor и сделайте так, как показано в приложении в этом случае при возврате из функции будет вызываться copy constructor, и все будет нормально. пока
Приложение: Ответ отправлен: 04.05.2003, 15:26 Отправитель: Ramzes
Вопрос № 749
Как я могу определить двух мерный массив с помощью new? В приложении пример, который не проходит компиляцию. Заранее благодарю.
Добрый день, alexneta! Делается таким образом int **arr; arr = new int*[ROW]; for (int i = 0; i < ROW; i++) { arr[i] = new int[COL]; } Удачи Ответ отправлен: 06.05.2003, 18:20 Отправитель: xiron Отвечает vitya
Добрый день, alexneta! Есть два варианта:
Приложение: Ответ отправлен: 04.05.2003, 10:23 Отправитель: vitya Отвечает Yuri Gordienko
Приветствую Вас, alexneta! В языке С/С++ нет понятия двумерный массив. Используй при задании оператора [] не int, а какой-либо тип с двумя параметрами в конструкторе, например struct SIndex{ int x,y; SIndex(int x1,int y1):x(x1),y(y1){} }; class Arr { int& operator[](SIndex si){ /*si.x,si.y*/ } }; int main() { Arr ar; ar[SIndex(0,1)] = 10; } Удачи Ответ отправлен: 04.05.2003, 11:36 Отправитель: Yuri Gordienko Отвечает Ramzes
Здравствуйте, alexneta! Во первых если у вас двухмерный массив, то и указатель должен быть двойным. сдлелайте так int** ptr; // указатель на массив указателей (строк) ptr = new int* [Row]; for(int i = 0; i < Row; i++) ptr[i] = new int[Col]; // инициализируем строку Ответ отправлен: 04.05.2003, 15:30 Отправитель: Ramzes
Форма отправки вопроса
Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook"
и "Microsoft Outlook Express". В программе The Bat!
подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте,
что в некоторых браузерах могут стоять запреты на открытие других
окон, а также "чрезмерное" кэширование данных,
при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet
Explorer 5.0+ или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.