0

Qtに問題があります。

クラス「コア」があります

class Core {

   public:

        static QString get_file_content(QString filename);
        static void setMainwindow(Ui::MainWindow const *w);

   private:
        static MainWindow *main_window;
};

名前空間 Ui のクラス 'MainWindow':

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
};

MainWindow コンストラクターで作成する

 MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Core::setMainwindow(this);
}

エラーが発生します

mainwindow.cpp:8: error: no matching function for call to 'Core::setMainwindow(MainWindow* const)'

もちろん、「Core」クラスの宣言で core.h をインクルードします。

これは setMainwindow メソッドでのみ発生します。

質問は、コア クラス メソッド setMainwindow() が MainWindow クラスで見えないのはなぜですか?

4

3 に答える 3

4

問題は、Core::setMainwindowメソッドが を受け取り、Ui::MainWindow*を渡していることMainWindow*です。投稿したコードから、名前空間に 1 つ、最上位のMainWindow名前空間に 1 つの 2 つのクラスがあります。これはあなたが意味することですか、それともおそらくUi1 つだけであるべきですか?Ui

于 2010-03-29T19:59:00.077 に答える
1

クラスが名前空間MainWindow内にネストされていません。Uiクラスを前方宣言しましたUi::MainWindowが、別::MainWindowのクラスを (グローバル名前空間で) 実装しました。このため、あなたCore::setMainwindowは を受け取りますが、Ui::MainWindowを渡しています::MainWindow

この入れ子の欠如は正しいと推測しています。これUi::MainWindowは Qt Designer によって生成され、MainWindowすべてのカスタム コードを含む実装クラスです。その場合は、コードを次のように変更します。

class Core {

   public:

        static QString get_file_content(QString filename);
        static void setMainwindow(MainWindow const *w);

   private:
        static MainWindow *main_window;
};
于 2010-03-29T20:08:26.430 に答える
1

MainWindow の cpp/h ファイルに「Core.h」を追加しましたか?

関連するものではないかどうかを確認するためだけに、setMainWindow でパラメーターを指定せずに試しましたか?

編集:ええ、Ui::MainWindowではなく、MainWindowがパラメーターとして必要なようですよね?

于 2010-03-29T19:57:01.423 に答える