#c
#c
Вопрос:
Нам предоставляется этот заголовочный файл, который требует от нас перегрузки операторов =
и
, чтобы мы могли выполнить i3 = i1 i2
.
По какой-то причине мой
operator не возвращает полный объект… Он возвращает строки просто отлично, но целые числа возвращают -858993460. Что странно, учитывая, что я присвоил им значение.
Вот мой
оператор:
Image Image::operator (Image constamp; image)
{
return image;
}
В моем =
операторе, которому передается значение, он неправильно отображает int
s:
const Imageamp; Image::operator=(Image constamp; image)
{
cout << image.filename << endl; // Displays correctly
cout << "image x: " << image.size_x << ": " << image.get_size_x() << endl; // Displays incorrectly (-int)
Здесь я работал над новым объектом, но он не работал, поэтому я просто передал объект, которому, как я знал, были присвоены значения, и он по-прежнему сталкивается с проблемой uninit int. Независимо от того, какой объект я передаю, я сталкиваюсь с теми же проблемами. Строки в порядке, но целые числа, похоже, передаются неправильно
Комментарии:
1. Покажите ваш конструктор копирования, который используется вашей
return
инструкцией.2. Проблема почти наверняка в вашем конструкторе копирования
3. Спасибо, что заявили, что это домашнее задание. Я думаю, что больше людей помогут
4. Любопытно, что произойдет, если вы вообще не будете задействовать свой метод operator (), сбрасывая значение непосредственно с кодом? Изолируйте, действительно ли это оператор, класс или если вам нужно сделать что-то особенное с cout из-за типа элемента.
5. Немного больше корректности в const не повредит, но, скорее всего, ваш конструктор копирования неверно сформирован. Обратите внимание, что в вашем операторе присваивания нет присваивания, которое я вижу, либо только некоторые
cout
инструкции.
Ответ №1:
Так получилось, что это БЫЛ мой конструктор копирования. Сейчас я чувствую себя очень глупо.
Все, что мне нужно было сделать, это присвоить значение по умолчанию в моем операторе, который принимал изображение в качестве параметра.
ie:
Image::Image( Image amp; const img )
{
this->size_x = img.get_size_x();
}
Комментарии:
1. Обратите внимание, что вы также можете использовать нечто, называемое
ctor-initializer
вот так:Image::Image(Image amp; const img) : size_x(img.get_size_x()) {}
для инициализацииsize_x
элемента.2. хотя еще лучшим вариантом было бы просто позволить компилятору создать конструктор копирования по умолчанию. Конструктор копирования, который копирует целое число, довольно бесполезен.
3. верно, в нашей домашней работе нам приходилось выполнять другие операции, кроме этой, но это было причиной моих проблем.