QHash...eigene Kl.was not declared und argument 2 is inv?

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
strige
Beiträge: 36
Registriert: 27. Dezember 2009 19:37

QHash...eigene Kl.was not declared und argument 2 is inv?

Beitrag von strige »

Hi zusammen,
Ich bräuchte mal kurz eure Hilfe, sehe wohl vor lauter Bäumen den Wald nicht.
in MainWindow.h

Code: Alles auswählen

#include <QMainWindow>
#include <QHash>
#include <QString>
#include "player.h"
.....
.....
private:
QHash<QString, Player*> *hash;
C:..\mainwindow.h:27: Fehler: 'Player' was not declared in this scope
QHash <QString, Player *> *hash;
^
C:..\mainwindow.h:27: Fehler: template argument 2 is invalid
QHash <QString, Player *> *hash;
^
player.h:

Code: Alles auswählen

class Player
{

public:
    Player();
   
private:
    QString name;
    QList<QDateTime> dateTime;
};
Danke schonmal
Mfg
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QHash...eigene Kl.was not declared und argument 2 is inv

Beitrag von Christian81 »

Das ist sicher nicht die komplette Header-Datei. Ich schätze Player ist in einem namespace. Ansonsten: minimales, vollständiges Beispiel.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
strige
Beiträge: 36
Registriert: 27. Dezember 2009 19:37

Re: QHash...eigene Kl.was not declared und argument 2 is inv

Beitrag von strige »

Hallo,
nein war nicht die komplette:
player.h

Code: Alles auswählen

#ifndef PLAYER_H
#define PLAYER_H


#include <QDateTime>
#include <QString>
#include <QStringList>
#include <QRegExp>
#include <QFile>
#include <QTextStream>
#include <QStringList>
#include <QDebug>
#include <QHash>
#include <QList>
#include "mainwindow.h"






class Player
{

public:
    Player();
    void appendData(QDateTime dTime, QString pl, int u);
    void addData(QString na, QDateTime dTime, QString pl, int u);

private:
    QString name;
    QList<QDateTime> dateTime;
    QStringList pla;
    QList<int> un;


};

void parseTags(QHash<QString, Player *>*hash);


#endif // PLAYER_H

MainWindow.h:

Code: Alles auswählen

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtGui>
#include <QtWidgets>
#include <QHash>
#include <QString>
#include "addwidget.h"
#include "player.h"



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

signals:

public slots:
private:
  QDockWidget *dock;
  QListView *listView;
  AddWidget *addWidget;
  QHash <QString, Player*> *hash;


};

#endif // MAINWINDOW_H
mainwindow.cpp

Code: Alles auswählen

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    addWidget = new AddWidget(this);
    setCentralWidget(addWidget);

    dock = new QDockWidget("Spieler", this);
    listView = new QListView(this);

    dock->setWidget(listView);
    addDockWidget(Qt::LeftDockWidgetArea,dock, Qt::Vertical);
    

    
    hash = new QHash<QString, Player*>;

    parseTags(hash);
}
hab das Projekt gerade erst angefangen, ist noch nicht viel..;)
strige
Beiträge: 36
Registriert: 27. Dezember 2009 19:37

Re: QHash...eigene Kl.was not declared und argument 2 is inv

Beitrag von strige »

Komisch: in main.cpp Funktionierts..
verstehe nicht woran es liegt.

Code: Alles auswählen

#include <QApplication>
#include <QHash>
#include "mainwindow.h"
#include "player.h"

int main(int argc, char *argv [])
{
    QApplication a(argc, argv);

    //MainWindow w;
    //w.show();

    QHash<QString, Player*> *hash = new QHash<QString, Player*>;
    parseTags(hash);


    return a.exec();
}
strige
Beiträge: 36
Registriert: 27. Dezember 2009 19:37

Re: QHash...eigene Kl.was not declared und argument 2 is inv

Beitrag von strige »

und nachdem ich eben diese Änderung rückgänging machte und QtCreator neu startete, funktioniert alles Problemlos.
Keine Ahnung was los war. Aber es läuft nun.

Danke trotzdem;)
bis demnächst^^
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: QHash...eigene Kl.was not declared und argument 2 is inv

Beitrag von Christian81 »

Das Problem sind deine rekursiven include - Anweisungen. mainwindow.h includiert player.h und umgekehrt. Das ist zum einen Designtechnisch schlecht und zum anderen führt es eben zu solchen Fehlern: Wenn man player.h includiert, wird dort mainwindow.h includiert und dort wieder player.h. Durch das (nötige) '#ifndef PLAYER_H' gibt es die Klasse Player noch nicht wenn er bei QHash<QString, Player *> ist.
Warum player.h die mainwindow.h includieren muss ist nicht ersichtlich

--> C++ Grundlagen
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
strige
Beiträge: 36
Registriert: 27. Dezember 2009 19:37

Re: QHash...eigene Kl.was not declared und argument 2 is inv

Beitrag von strige »

Ahhh, Danke Dir für den Tipp. Werde in Zukunft besser darauf achten. Der Plan ist, dass ich die Klasse Player von QObject noch ableiten möchte um SIGNAL und SLOTS zu nutzen und hatte schon das MainWindow includiert um einen Zeiger für das Parent zu übergeben.
dabei geht es hauptsächlich um die Funktion parseTags(QHash *, MainWindow *) die später die Player objekte erstellt und denen auch ein parent zuweisen kann. Da es ja nur eine unabhängige Funktion ist sollte ich diese dann am besten mit in die mainwindow.cpp verschieben.
Danke
Antworten