0

私はこのチュートリアルに従っていました:

bit.ly/SBMmwp

そして、最初の行で次のエラーが発生しました。

エラー: 'const char [26]' から非スカラー型 'KAuth::Action' への変換が要求されました

KAuth::Action readAction = "org.kde.auth.example.read";

KAuth::ActionReply reply = readAction.execute();
if (reply.failed())
{
    QMessageBox::information(this, "Error", QString("KAuth returned an error code: %1").arg(reply.errorCode()));
}
else
{
    QMessageBox::information(this, "Done!", QString("Successfully authenticated!"));
}

エラーは最初の行にあります: KAuth::Action readAction = "org.kde.auth.example.read";

なぜこうなった?これは KAuth API の誤用に関連するエラーですか、それとも一般的な C/C++ エラーですか。そのconst char[26]非スカラー型に変換する方法さえわかりません。





@nm いいえ。これは、メイン ウィンドウ (GUI) が作成されるイベントに関するものです。完全なコードは次のようになります。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <kauth.h>
#include <QMessageBox>
#include <kauthaction.h>

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

    KAuth::Action readAction = "org.kde.auth.example.read";
    KAuth::ActionReply reply = readAction.execute();
    if (reply.failed())
    {
        QMessageBox::information(this, "Error", QString("KAuth returned an error code: %1").arg(reply.errorCode()));
    }
    else
    {
        QMessageBox::information(this, "Done!", QString("Successfully authenticated!"));
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}
4

2 に答える 2

0

私は基本的にそれがどのように行われたかという顔に平手打ちされました。それはクリスチャンが書いたように行われますが、私が未定義の参照を取得した理由は、KDECoreライブラリにリンクする必要があったためです。QTを使用している場合は、.proファイルがあります。あなたがしなければならないのはそれに書くことだけです:

LIBS += -lkdecore

ただし、プロジェクトにCMakeを使用している場合は、CMake.txtに次の行が必要です。

find_package(KDE4 REQUIRED)
target_link_libraries([name_of_application] kdecore)

または:

find_package(KDE4 REQUIRED)
target_link_libraries([name_of_application] ${KDE4_KDECORE_LIBS})

ここで、[name_of_application]は、ビルドするアプリケーションの名前(通常はプロジェクト名)です。覚えておくべきことの1つは、CMakeを使用している場合は、アプリケーションの必要に応じて他のライブラリを追加する必要があるということです。そうしないと、アプリケーション内の他のコンポーネントへの未定義の参照が増えることになります。たとえば、QT GUIコンポーネントを使用していて、アプリケーションで使用している場合は、CMake.txtで実行します。

find_package(KDE4 REQUIRED)
target_link_libraries(My_Application_Name kdecore ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY})
于 2012-08-31T22:44:33.813 に答える
0

私は KDE に詳しくありませんが、http: //www.purinchu.net/kdelibs-apidocs/kdecore/html/classKAuth_1_1Action.html は、「アクション」に文字列を割り当てることはできないことを示唆しています。'QString' が "const char*" (文字列クラスでは珍しいことではありません) から作成できると仮定して、行を次のように変更します。

KAuth::Action readAction("org.kde.auth.example.read");

それを修正するかもしれません。

注: チュートリアルは必ずしも正しいとは限りません。それらの作成者は、常に変更についていくわけではありません。

于 2012-08-19T07:11:23.283 に答える