1

次の C++ クラスがあります。

xyz.h

class xyz {
public:
    static int abc();
};

qwe.h

#include xyz.h

namespace xyz {

class qwe{
public:
    void bnm() {
        int value = xyz::abc();

    }
};

}

アクセス方法はxyz::abc()こちら。abcここで、 は のメンバーではないというコンパイル エラーが発生しますxyzabcこの名前空間内でメソッドを検索しようとしている理由を理解していxyzますが、理想的にはxyzクラス内の静的メソッドを取得する必要があります。

名前空間名を変更せずにこれを回避する方法はありますか?

4

4 に答える 4

3

名前空間 (またはそれ自体の名前空間) と同じ名前のクラスを作成しないでください。

于 2012-09-25T21:03:55.193 に答える
2

あなたの特定のケースでは、直接的な解決策はありません。C++ には の概念がありますがelaborated type specifier、特に:

xyz       ab;   // The defn is ambiguous.
class xyz ab;   // The ambiguity is resolved.

これを試すこともできます:

class xyz dummy;
int value = dummy.abc();

C++ では、インスタンス メソッドの構文を使用して静的メソッドを呼び出すことができます。

于 2012-09-25T21:14:39.943 に答える
1
namespace hack = xyz;
hack::abc();
于 2013-09-20T15:55:55.553 に答える
1

ファイルxyz.hが非常に単純で他にほとんど依存しないという特殊なケースでは、次のようにすることができます。

namespace othername {
   #include "xyz.h"
}

そして使用する

othername::xyz::abc();
于 2012-09-25T21:20:31.273 に答える