2016-05-30 9 views
0

ファイルからデータを読み込んだ後にemitResultを呼び出す関数があります。だからここQt非静的メンバー参照は特定のオブジェクトに関連している必要があります

bool IpResolver::ResolvedInfo::load(QTextStream &in) 
{ 
ResolvedInfo rf; 
while (!in.atEnd()) 
{ 
    QString line = in.readLine(); 
    QStringList list = line.split(' '); 
    list[0] = rf.country; 
    list[1] = rf.ip; 
    if (rf.ip.isEmpty() == false) 
    { 
     emitResult(rf); 
    } 
} 
} 

はemitResultの宣言です:

private: 
    void emitResult(const ResolvedInfo &data); 

をそして、それは私に、このエラーを与える: 非静的メンバ参照は、特定のオブジェクト 私が何をすべきか全くわからに対して相対的でなければなりません。

+1

「load()」のヘッダ宣言に関する情報を提供してもらえますか? '関数? –

答えて

1

emitResultは、非スタティックメンバー関数IpResolverです。しかし、あなたはサブクラスIpResolver::ResolvedInfoからインスタンスを一切持たずに呼び出しています。 ResolvedInfoがサブクラスであるという理由だけで、他の方法では特別なものにはなりません。具体的には、親クラスのインスタンスへの参照を保持していない場合、期待通りの動作をしません。

あなたの問題を解決するには、2つの一般的な方法があります。

あなたはResolvedInfoコンストラクタへIpResolverへの参照を渡すと、ResolvedInfoインスタンス内の参照を保持することができます

class IpResolver { 
    class ResolvedInfo { 
    IpResolver & q; 
    public: 
    ResolvedInfo(IpResolver & q) : q(q) { ... } 
    static bool load(QTextStream &in) { 
     ResolvedInfo rf; 
     while (!in.atEnd()) 
     { 
     QString line = in.readLine(); 
     QStringList list = line.split(' '); 
     list[0] = rf.country; 
     list[1] = rf.ip; 
     if (!rf.ip.isEmpty()) 
      q.emitResult(rf); 
     } 
    } 
    }; 
    void emitResult(const ResolvedInfo &); 
    ... 
}; 

それともあなたが作ることができますemitResult静的メソッド:

class IpResolver { 
    ... 
    static void emitResult(const ResolvedInfo &); 
}; 
関連する問題