Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Двусмысленность перегрузки функции


Автор: Devourer 2.9.2009, 15:17
При компиляции выдаетсся ошибка: двусмысленный вызов конструктора pictureShow. Не понимаю почему не рботает перегрузка?
Помогите ПЛЗ.

Код

#include <QtGui/QApplication>
#include "pictureshow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    pictureShow *w = new pictureShow;
    w->show();
    return a.exec();
}



*cpp
Код

#include "pictureshow.h"
#include <QObject>
#include <QtGui>

pictureShow::pictureShow()
{
}

pictureShow::pictureShow(QString *path)
{
}


pictureShow::~pictureShow()
{
}




*h
Код

#ifndef PICTURESHOW_H
#define PICTURESHOW_H

#include <QDialog.h>

class pictureShow : public QDialog
{
    Q_OBJECT

public:
    pictureShow();
    pictureShow(QString *path = " ");
    ~pictureShow();

};
#endif // PICTURESHOW_H


Автор: 17dufa 2.9.2009, 15:20
Devourer, 

Автор: Cheloveck 2.9.2009, 15:38
так у тебя значение по умолчанию. Компилятор не знает, что вызвать, либо пустой, либо ты намеренно опустил дефолт значение.

Автор: andrew_121 2.9.2009, 15:41
во первых:
Цитата(Devourer @  2.9.2009,  15:17 Найти цитируемый пост)
pictureShow 

наследник от 
Цитата(Devourer @  2.9.2009,  15:17 Найти цитируемый пост)
QDialog



во вторых:
Код

pictureShow(); //  конструктор по умолчанию
pictureShow(QString *path = " "); // аргумент по умолчанию. какой из них использовать компилятору?

Автор: Devourer 2.9.2009, 15:41
А как сделать чтобы он вызывал тот который мне нужен? Тоесть пустой.

Автор: andrew_121 2.9.2009, 15:41
опоздал

Добавлено через 1 минуту и 32 секунды
Цитата(Devourer @  2.9.2009,  15:41 Найти цитируемый пост)
А как сделать чтобы он выхывал тот котрый мне нужен? 

убери значение по умолчанию

Добавлено через 4 минуты и 18 секунд
если объект наследник от QWidget, то нужно передавать указатель на объект предок.

Автор: Devourer 2.9.2009, 15:46
Тоесть? Я не совсем представляю как это сделать....

Автор: Alek86 2.9.2009, 15:47
потому что компилятор не знает, какой ты конструктор хотел вызвать: первый без парамера или второй с параметром по умолчанию
да и я, к примеру, не могу сказать точно, что ты хотел вызвать

лучше всего убрать во втором конструкторе умолчание

Автор: Devourer 2.9.2009, 15:51
сори за ленность но как это сделать?
Тут должен вызываться конструктор без стринга...

Автор: andrew_121 2.9.2009, 15:51
Код

class pictureShow : public QDialog
{
    Q_OBJECT
public:
    pictureShow(QWidget* w = NULL);
    pictureShow(QWidget* w, QString *path);
    ~pictureShow();
};


Добавлено через 1 минуту и 23 секунды
Цитата(Devourer @  2.9.2009,  15:17 Найти цитируемый пост)
QString *path = " "

так это еще и указатель на QString?! smile 

Автор: Devourer 2.9.2009, 16:01
если не лень напишите как это должно быть... smile 

Автор: andrew_121 2.9.2009, 16:12
.h
Код

class pictureShow : public QDialog
{
    Q_OBJECT
public:
    pictureShow(QWidget* w = NULL);
    pictureShow(QWidget* w, QString *path);
    ~pictureShow();
};


.cpp
Код

#include "pictureshow.h"
#include <QObject>
#include <QtGui>

pictureShow::pictureShow(QWidget* w):QDialog(w) {
}

pictureShow::pictureShow(QWidget* w, QString *path):QDialog(w) {
}

pictureShow::~pictureShow() {
}

еще не понятно зачем тебе указатель на QString ?

Автор: Devourer 2.9.2009, 16:15
СПС
Там дальше в коде используется, почему именно указатель указатель, наверно уже привычка...

Еще раз спс...

Автор: andrew_121 2.9.2009, 16:55
Devourer, Тему закрой.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)