0

このネストされたクラスを転送しようとしていますが、すでに試しましたが、うまくいきませんでした。宣言を転送しようとすると、プライベートメンバーエラーにアクセスできないため、何か間違っていると思います。

#ifndef PLAYERHOLDER_H
#define PLAYERHOLDER_H

#include <QtCore>
#include <player.h>
#include <datasource.h>

class PLAYERHOLDER
{

private:
class CONTACTMODEL : public QAbstractTableModel
{
public:
    explicit CONTACTMODEL(PLAYERHOLDER* holder);

    int rowCount( const QModelIndex &parent ) const;
    int columnCount( const QModelIndex &parent ) const;
    QVariant data( const QModelIndex &index, int role ) const;
    QVariant headerData( int section, Qt::Orientation orientation, int role ) const;
    void update();


private:
    static PLAYERHOLDER* m_playerHolder;
};

public:
static PLAYERHOLDER* getInstance();
void createPlayer(PLAYER *player);
void updatePlayer(int id);
void deletePlayer(int id);
PLAYER* findPlayer(int id);
void loadPlayers(int teamid);

QAbstractItemModel* model() ;

private:
PLAYERHOLDER();
static PLAYERHOLDER *thePlayerholder;
QHash<int, PLAYER*> playerlist;
DATASOURCE *datasource;
mutable CONTACTMODEL *m_model;
};

#endif // PLAYERHOLDER_H

しかし、私はそれを行う方法がわかりません。私は周りを検索しましたが、まだ知りません:(これを前方宣言することは可能ですか?

4

1 に答える 1

12

ネストされた型は、外側の型の一部です。つまり、それ自体で前方宣言することはできませんが、囲んでいる型の定義で宣言してから、外側で定義することができます。

class enclosing {
   class inner;          // Forward declaration
};
// Somewhere else
class enclosing::inner { // Definition
   int x;
};

できないことは、囲んでいる型の定義の外側で内部型を前方宣言することです。

class enclosing::outer;  // Error
于 2012-08-08T20:42:56.303 に答える