Namespace / Einbinden von Header Dateien

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
mike
Beiträge: 7
Registriert: 31. Oktober 2016 19:18

Namespace / Einbinden von Header Dateien

Beitrag von mike » 25. Februar 2017 16:34

Hallo,

ich habe eine Frage bzgl. Namespace und das Einbinden von Header Dateien.

Beim Übersetzen eines Paketes tritt folgender Fehler auf:

Code: Alles auswählen

.../kdepim-noakonadi/knode/knconfigwidgets.cpp:454:34: Fehler: »setButtons« wurde in diesem Gültigkeitsbereich nicht definiert
   setButtons( Ok | Cancel | Help );
Anbei der Auszug aus dem Quelltext (knconfigwidgets.cpp):

Code: Alles auswählen

KNode::NntpAccountConfDialog::NntpAccountConfDialog( KNNntpAccount *a, QWidget *parent )
{
  if ( a->id() != -1 )
    setCaption( i18n("Properties of %1", a->name()) );
  else
    setCaption( i18n("New Account") );
  setFaceType( Tabbed );
  setButtons( Ok | Cancel | Help );
  setDefaultButton( Ok );
  ...
}
Es gibt die Datei knconfigwidgets.h wo NntpAccountConfDialog deklariert wird:

Code: Alles auswählen

class KNODE_EXPORT NntpAccountConfDialog : public KPageDialog, private Ui::NntpAccountDialogBase
{
   ...
}
NntpAccountConfDialog ist u. a. von KPageDialog abgeleitet.

https://api.kde.org/4.x-api/kdelibs-api ... ialog.html

KPageDialog ist von KDialog abgeleitet. Die Funktion setButtons() ist in der Klasse KDialog definiert:

https://api.kde.org/4.x-api/kdelibs-api ... ialog.html

In der Datei knconfigwidgets.cpp ist knconfigwidgets.h eingebunden:

Code: Alles auswählen

#include "knconfigwidgets.h"
In knconfigwidgets.h sind u. a. eingebunden:

Code: Alles auswählen

#include <kdialog.h>
#include <kpagedialog.h>
Dieser Fehler tritt erst auf seit ich versuche das Paket mit KF5/Qt5 zu bauen (mit KDELibs4Support).

Es wird die richtige kpagedialog.h von KF5 eingebunden (sie ist zwei mal vorhanden):

Code: Alles auswählen

/usr/include/KF5/KWidgetsAddons/kpagedialog.h
/usr/include/kde4/kpagedialog.h
Die Funktion setButtons() wird im Namespace KNode aufgerufen. Muß ich dadurch beim Einbinden der Header-Dateien
etwas beachten?


MfG

mike

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Namespace / Einbinden von Header Dateien

Beitrag von Christian81 » 27. Februar 2017 07:22

KDialog::setButtons() gibt es in KF5 ja auch nicht mehr, das muss ersetzt werden. Dazu gibt es in kde-dev-scripts sogar ein Script welches das für Dich erledigt
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

mike
Beiträge: 7
Registriert: 31. Oktober 2016 19:18

Re: Namespace / Einbinden von Header Dateien

Beitrag von mike » 27. Februar 2017 19:35

In den KDELibs4Support ist die Funktion meines Erachtens vorhanden.

Dazu habe ich auch die Header Datei kdialog.h eingebunden:

/usr/include/KF5/KDELibs4Support/kdialog.h

dort ist die Funktion vorhanden:

void setButtons(ButtonCodes buttonMask);

Sicher muß daß letztendlich angepasst werden, ich wollte das Paket erst mit KDELibs4Support bauen.


mike

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Namespace / Einbinden von Header Dateien

Beitrag von Christian81 » 27. Februar 2017 20:03

Da Du aber nicht von KDialog sondern von KPageDialog (und dieser von QDialog) ableitest ist es egal ob Du den kdialog.h - Header includierst oder nicht ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung

mike
Beiträge: 7
Registriert: 31. Oktober 2016 19:18

Re: Namespace / Einbinden von Header Dateien

Beitrag von mike » 27. Februar 2017 23:32

Ich bin aufgrund hiervon:

https://api.kde.org/4.x-api/kdelibs-api ... ialog.html

davon ausgegangen daß KPageDialog von KDialog abgeleitet ist. Das hat für KDE4 gestimmt. Außerdem bin ich davon ausgegangen daß dies bei KDELibs4Support auch so ist. Das ist aber nicht so.

Auf dem System gibt es die Datei kpagedialog.h für KDE4 und KF5:

/usr/include/KF5/KWidgetsAddons/kpagedialog.h
/usr/include/kde4/kpagedialog.h

Diese sind unterschiedlich:

Code: Alles auswählen

grep include /usr/include/kde4/kpagedialog.h
#include <kdialog.h>
#include <kpagewidget.h>

grep include /usr/include/KF5/KWidgetsAddons/kpagedialog.h
#include <QDialog>
#include <QDialogButtonBox>
#include <kpagewidget.h>
Jetzt ist klar wo das Problem liegt.

Da muß ich den Quelltext anpassen.

mike

Antworten