C++类的静态成员
问题描述:
的提前声明我有一个类:C++类的静态成员
class M {
public:
static std::string t[];
};
与后来来初始化。我想在不同的类(头文件)后用动感:: T:
class Use {
public:
void f() { std::cout << M::t[0] << std::endl; }
};
有没有办法实现这个不包括使用的头文件中的整个M级?我明白前向声明不允许访问类成员,但是这种美是静态的,所以编译器应该不是一个大问题。
答
不,你不能。您可以将标题包含在标题中,也可以将执行文件Use::f
分隔为一个实现文件,并在其中包含M
的标题。
答
在C#中没有类似partial
的类,您可以在其中定义一个类在多个文件中。
由于您正在使其成为public static
成员,因此您为什么不创建名称空间并在其中嵌入它?
namespace myns{
std::string t[];
}
您可以从任何地方然后访问它,就像你会用public static
类成员来完成。
答
前向声明只允许使用forward-declared-class指针或引用,而不是成员!如果你想在你的例子中使用类成员,你必须包含类头,即使它是静态的。
这里是解决办法,如果你不希望包括MH在Use.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;
}
另外,你必须知道在头文件中编写代码是一个坏习惯,除了内联和模板之外。
不错。你实际上回答了我的递归包含的另一个问题:-) – arthur 2013-04-04 08:42:57