我有一个班级:
class M {
public:
static std::string t[];
};
稍后会进行初始化。我想稍后在另一个类(头文件)中使用M :: t:
class Use {
public:
void f() { std::cout << M::t[0] << std::endl; }
};
有没有办法实现这一点而不包括使用头文件的整个类M?我知道前向声明不允许访问类成员,但是这种美观是静态的,所以它对于编译器来说应该不是一个大问题。
答案 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;
}
此外,你必须知道在头文件中编写代码是一个坏习惯,当然除了内联和模板。