LINUX.ORG.RU

Шаблон класса 2


0

0

Здравствуйте. Тут проблемка:
template <class T> class Konteiner{
private:
QVector <T> vect;
public:
void locate(T &x){
cout << vect.indexOf(x) << endl;
}
};

Вызываю так:
Kombi_figure cir_tr(cir_z,tr);
Konteiner<Kombi_figure> kon;
kon.locate(cir_tr);

Ругается так:
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qvector.h: In member function ‘int QVector<T>::indexOf(const T&, int) const [with T = Kombi_figure]’:
src/konteiner.h:19: instantiated from ‘void Konteiner<T>::locate(T&) [with T = Kombi_figure]’
src/main.cpp:20: instantiated from here
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qvector.h:648: ошибка: no match for ‘operator==’ in ‘* n == t’
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qglobal.h:1627: замечание: претенденты: bool operator==(QBool, bool)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qglobal.h:1628: замечание: bool operator==(bool, QBool)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qglobal.h:1629: замечание: bool operator==(QBool, QBool)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qchar.h:383: замечание: bool operator==(QChar, QChar)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qbytearray.h:494: замечание: bool operator==(const QByteArray&, const QByteArray&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qbytearray.h:496: замечание: bool operator==(const QByteArray&, const char*)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qbytearray.h:498: замечание: bool operator==(const char*, const QByteArray&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:857: замечание: bool operator==(QString::Null, QString::Null)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:858: замечание: bool operator==(QString::Null, const QString&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:859: замечание: bool operator==(const QString&, QString::Null)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:885: замечание: bool operator==(const char*, const QString&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:898: замечание: bool operator==(const char*, const QLatin1String&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:911: замечание: bool operator==(const QLatin1String&, const QLatin1String&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:1107: замечание: bool operator==(const QStringRef&, const QStringRef&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:1110: замечание: bool operator==(const QString&, const QStringRef&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:1113: замечание: bool operator==(const QStringRef&, const QString&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:1117: замечание: bool operator==(const QLatin1String&, const QStringRef&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:1120: замечание: bool operator==(const QStringRef&, const QLatin1String&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:1141: замечание: bool operator==(const char*, const QStringRef&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qstring.h:1143: замечание: bool operator==(const QStringRef&, const char*)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qpoint.h:148: замечание: bool operator==(const QPoint&, const QPoint&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qpoint.h:302: замечание: bool operator==(const QPointF&, const QPointF&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qsize.h:156: замечание: bool operator==(const QSize&, const QSize&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qsize.h:312: замечание: bool operator==(const QSizeF&, const QSizeF&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qrect.h:497: замечание: bool operator==(const QRect&, const QRect&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qrect.h:834: замечание: bool operator==(const QRectF&, const QRectF&)
/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qhash.h:193: замечание: bool operator==(const QHashDummyValue&, const QHashDummyValue&)


Подскажите, что делают не так? Заранее благодарю.

★★

/usr/local/Trolltech/Qt-4.4.1/include/QtCore/qvector.h:648: ошибка: no match for ‘operator==’ in ‘* n == t’

Нужно переопределить оператор == для вашего класса.

Legioner ★★★★★
()

Из документации по QVector::indexOf :

This function requires the value type to have an implementation of operator==()

Неужели это из сообщения об ошибке не очевидно?

anonymous
()
Ответ на: комментарий от anonymous

Ну просто в примере не было переопределение. Эм а как тут переопределить(точнее на что именно ее надо переопределить)? Я эту ф-цию пытаюсь юзать для поиска объекта в контейнере.
Да я только учусь и это лаба, поэтому задаю глупые вопросы:(

DDR ★★
() автор топика
Ответ на: комментарий от DDR

>точнее на что именно ее надо переопределить

Очевидно, на что-то, что имеет смысл для Kombi_figure

anonymous
()
Ответ на: комментарий от DDR

>А можно пример какой-нить я по примерам лудше понимаю:):):):):)

class Quad {
  private:
    int width;
    int height;

  public:
   
   bool operator==(const Quad &op){
     return op.width == width &&
            op.height == heigth;
   }

   ... что-то там ещё ...

};

ЗЫ:
И с чего это я такой добрый?

anonymous
()
Ответ на: комментарий от anonymous

>И с чего это я такой добрый?
Спс за доброту:)
Просто я догнать не могу сам явно я не юзаю нигде ==, это где то там indexof юзает. Не до конца догоняю чо ему конкретно надо.
Спасибо, попробуй тогда почитать про этот метод у квектору в русских манах.

DDR ★★
() автор топика
Ответ на: комментарий от DDR

Конечно юзает, он же не телепат, откуда ему знать, как сравнивать два объекта вашего класса. Вот он просто и вызывает operator==, наивно веря, что пользователь его определил.

Legioner ★★★★★
()
Ответ на: комментарий от DDR

Ну да. А может вообще не по свойству, например у объекта есть плотность и объём, а сравнивать хочется по массе, т.е. по некой функции от совокупности полей, и т.д.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

>Legioner
Угу, всем спасибо!:)

DDR ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.