Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Call of overloaded class is ambiguous 
:(
    Опции темы
kefir01
Дата 12.5.2011, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



День добрый!
Есть такой класс...

Код

#ifndef QGSRECT_H
#define QGSRECT_H

#include <QObject>
#include <QPointF>

class QGSRect
{
public:
    QGSRect()
    {
        QGSRect(0.0, 0.0, 0.0, 0.0);
    }

    ~QGSRect()
    {
        xmin = NULL;
        xmax = NULL;
        ymin = NULL;
        ymax = NULL;
    }

    QGSRect(QString xMin = "0", QString yMin = "0", QString xMax = "0", QString yMax = "0")
    {
        this->xmin = xMin.toDouble();
        this->xmax = xMax.toDouble();
        this->ymin = yMin.toDouble();
        this->ymax = yMax.toDouble();
    }

    QGSRect(double xMin = 0.0, double yMin = 0.0, double xMax = 0.0, double yMax = 0.0)
    {
        this->xmin = xMin;
        this->xmax = xMax;
        this->ymin = yMin;
        this->ymax = yMax;
    }

    QGSRect(int xMin = 0, int yMin = 0, int xMax = 0, int yMax = 0)
    {
        this->xmin = (double)xMin;
        this->xmax = (double)xMax;
        this->ymin = (double)yMin;
        this->ymax = (double)yMax;
    }


    double xMin();
    double xMax();
    double yMin();
    double yMax();

    QPointF center();
    void clearPlus();


signals:

public slots:

private:

    double xmin;
    double ymin;
    double xmax;
    double ymax;

};

#endif // QGSRECT_H
#ifndef QGSRECT_H
#define QGSRECT_H

#include <QObject>
#include <QPointF>

class QGSRect
{
public:
    QGSRect()
    {
        QGSRect(0.0, 0.0, 0.0, 0.0);
    }

    ~QGSRect()
    {
        xmin = NULL;
        xmax = NULL;
        ymin = NULL;
        ymax = NULL;
    }

    QGSRect(QString xMin = "0", QString yMin = "0", QString xMax = "0", QString yMax = "0")
    {
        this->xmin = xMin.toDouble();
        this->xmax = xMax.toDouble();
        this->ymin = yMin.toDouble();
        this->ymax = yMax.toDouble();
    }

    QGSRect(double xMin = 0.0, double yMin = 0.0, double xMax = 0.0, double yMax = 0.0)
    {
        this->xmin = xMin;
        this->xmax = xMax;
        this->ymin = yMin;
        this->ymax = yMax;
    }

    QGSRect(int xMin = 0, int yMin = 0, int xMax = 0, int yMax = 0)
    {
        this->xmin = (double)xMin;
        this->xmax = (double)xMax;
        this->ymin = (double)yMin;
        this->ymax = (double)yMax;
    }


    double xMin();
    double xMax();
    double yMin();
    double yMax();

    QPointF center();
    void clearPlus();


signals:

public slots:

private:

    double xmin;
    double ymin;
    double xmax;
    double ymax;

};

#endif // QGSRECT_H


При использовании типа:
Код

    QGSMapInfo(QString name, QGSRect boundingBox)
    {
        mapName = name;
        mapBoundingBox = boundingBox; //QGSRect mapBoundingBox
    }


выдает следующую ругань:
Код

qgsmapinfo.h:15: error: call of overloaded 'QGSRect()' is ambiguous


Не подскажете в чем дело?
PM MAIL   Вверх
borisbn
Дата 12.5.2011, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(kefir01 @  12.5.2011,  16:59 Найти цитируемый пост)

QGSRect()
    {
        QGSRect(0.0, 0.0, 0.0, 0.0);
    }

1. Так нельзя. Нельзя вызывать один конструктор из другого. Это можно только в новом стандарте, и то там синтаксис вызова другой.
2. 
Цитата
QGSRect()

и
Цитата
QGSRect(QString xMin = "0", QString yMin = "0", QString xMax = "0", QString yMax = "0")

при таком вызове
Код
QGSRect x;

не будут отличаться. Что вызывать компилятору ? 1-ю форму или 2-ю ? Он не знает, вот и сообщает об этом

Цитата(kefir01 @  12.5.2011,  16:59 Найти цитируемый пост)
call of overloaded 'QGSRect()' is ambiguous

т.е. не понятно какой конструктор вызывать


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Sartorius
Дата 12.5.2011, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: нет
Всего: 37



Конструкторы не смущают?  smile  Хотя бы один параметр должен быть обязательным чтобы компилятор мог их различить.
PM MAIL ICQ   Вверх
math64
Дата 13.5.2011, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 23
Всего: 72



А зачем нужен конструктор по умолчанию? Конструктор, у которого всем параметрам заданы значения по умолчанию может работать за него.
PM   Вверх
kefir01
Дата 13.5.2011, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: 1
Всего: 2



Ну насчет конструктора по умолчанию - да лажанулся. А про остальные понял не до конца - т.е. у одного из них должен быть один параметр без умолчания?
PM MAIL   Вверх
borisbn
Дата 13.5.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 48
Всего: 135



Цитата(kefir01 @  13.5.2011,  14:50 Найти цитируемый пост)
А про остальные понял не до конца - т.е. у одного из них должен быть один параметр без умолчания?

не обязательно. просто при наличии таких двух конструкторов
Код

QGSRect()
// и
QGSRect(QString xMin = "0", QString yMin = "0", QString xMax = "0", QString yMax = "0")

компилятор не может выбрать какой из них использовать.
Оставь только второй (пусть все параметры имеют умолчания) и ты не оставишь компилятору выбора. соответственно он перестанет ругаться.

Кста, то же самое применимо не только к конструкторам, но и к обычным ф-циям:
Код

void foo( int x, int y = 0 );
void foo( int x );
...

foo( 42 ); // ошибка. какой вариант вызывать ?


Это сообщение отредактировал(а) borisbn - 13.5.2011, 15:08


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.1261 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.