簡體   English   中英

C ++中的全局類

[英]Global Classes in C++

我試圖創建一個全局類,所以我可以在任何地方訪問它,但它不工作,我收到錯誤:

a storage class can only be specified for objects and functions

有誰知道我哪里出錯了?

這是我的h文件:

extern class Payments : public QObject
{
Q_OBJECT
public:
    Payments(QObject *parent = 0);
    virtual ~Payments();
    void purchase(const QString &id, const QString &sku, const QString &name, const QString &metadata);
    void getExisting(bool refresh);
    void getPrice(const QString &id, const QString &sku);

public slots:
    void purchaseResponse();
    void existingPurchasesResponse();
    void priceResponse();

signals:
    void purchaseResponseSuccess(const QString &receiptString);
    void existingPurchasesResponseSuccess(const QString &receiptsString);
    void priceResponseSuccess(const QString &price);
    void infoResponseError(int errorCode, const QString &errorText);


private:
    bb::platform::PaymentManager *paymentManager;

};

存儲類關鍵字extern會導致問題。 您不能為類定義指定它。 而且你無論如何都不需要它:你的類定義可以從任何地方訪問(假設你#include它定義的文件)。

你不需要extern ,在C ++中將類聲明為extern是不合法的。 只要您不使用特定於編譯器的可見性標志和多個共享對象(即GCC可見性 ),並且不創建嵌套,受保護或私有類,任何類都可以從其他任何位置訪問。

C++允許僅將extern用於對象或函數。

對於類而言,“全局”的概念並沒有多大意義:類被聲明在它們聲明的任何地方,就是這樣。 因此,在定義類時不允許存儲分類:您需要刪除extern

要使類定義普遍可用,您需要在要訪問類的每個轉換單元中包含其定義。 執行此操作的方法是將其放入頭文件中,並在需要該類時包含該文件:

#ifndef INCLUDED_PAYMENTS
#define INCLUDED_PAYMENTS

// headers needed to define Payments

class Payments : public QObject
{
    ...
};

#endif INCLUDED_PAYMENTS

為了避免命名沖突,您應該考慮在命名空間內聲明您的類:C ++程序中的類定義必須是唯一的。 也就是說,如果不包括上述標題的另一個文件也在全局命名空間中定義了一個類Payments但在某種程度上有所不同,那么這些將是相互沖突的定義。 但是,編譯器不需要檢測不同的用途,這可能導致難以診斷問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM