Seite 1 von 1

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

Verfasst: 11. Oktober 2014 09:38
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

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

Verfasst: 11. Oktober 2014 11:41
von Christian81
Das ist sicher nicht die komplette Header-Datei. Ich schätze Player ist in einem namespace. Ansonsten: minimales, vollständiges Beispiel.

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

Verfasst: 11. Oktober 2014 12:57
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..;)

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

Verfasst: 11. Oktober 2014 14:08
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();
}

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

Verfasst: 11. Oktober 2014 14:19
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^^

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

Verfasst: 11. Oktober 2014 14:51
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

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

Verfasst: 11. Oktober 2014 15:01
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