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不是xyz. 我理解它试图abc在这个xyz命名空间内搜索方法的原因,而理想情况下它应该得到的是xyz类中的静态方法。

有没有办法在不更改命名空间名称的情况下解决这个问题?

4

4 回答 4

3

不要创建与命名空间(或它自己的命名空间)同名的类。

于 2012-09-25T21:03:55.193 回答
2

在您的特定情况下,没有直接的解决方案。Altough 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

在文件xyz.h非常简单并且几乎不依赖其他文件的特殊情况下,您可以这样做:

namespace othername {
   #include "xyz.h"
}

然后使用

othername::xyz::abc();
于 2012-09-25T21:20:31.273 回答
1
namespace hack = xyz;
hack::abc();
于 2013-09-20T15:55:55.553 回答