c ++静态类成员的前向声明

时间:2013-04-04 08:39:20

标签: c++ forward-declaration

我有一个班级:

class M {
public:
    static std::string t[];
};

稍后会进行初始化。我想稍后在另一个类(头文件)中使用M :: t:

class Use {
public:
    void f() { std::cout << M::t[0] << std::endl; }
};

有没有办法实现这一点而不包括使用头文件的整个类M?我知道前向声明不允许访问类成员,但是这种美观是静态的,所以它对于编译器来说应该不是一个大问题。

3 个答案:

答案 0 :(得分:4)

不,你不能。您可以在标头中包含标头,也可以在实施文件中分隔实施Use::f,并在其中包含M的标头。

答案 1 :(得分:3)

C#中没有partial类,您可以在几个文件中定义一个类 既然你是一个public static成员,为什么不创建一个命名空间并将其嵌入那里呢?

namespace myns{

std::string t[];

}

您可以随时随地访问它,就像您使用public static班级成员一样。

答案 2 :(得分:1)

前向声明只允许使用前向声明的类指针或引用,而不是成员!如果你想在你的例子中使用类成员,你必须包括类头,即使它是静态的。

如果您不想在Use.h标头中包含M.h,那么这是解决方案:

<强> Use.h

class Use {
public:
    void f();
};

<强> Use.cpp

#include "M.h"
#include "Use.h"

void Use::f() {
    std::cout << M::t[0] << std::endl;
}

此外,你必须知道在头文件中编写代码是一个坏习惯,当然除了内联和模板。