静态类成员的前向声明
c++ forward declaration of a static class member
我有一个类:
class M {
public:
static std::string t[];
};
,稍后进行初始化。我想稍后在另一个类(头文件)中使用M::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
类成员所做的那样。
前向声明只允许使用前向声明的类指针或引用,而不允许使用成员!如果你想在你的例子中使用类成员,你必须包括类头,即使它是静态的。
如果你不想在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;
}
另外,您必须知道在头文件中编写代码是一个坏习惯,当然内联和模板除外。
相关文章:
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 如何使用模板声明成员函数?(不是模板类)
- 如何使用 Boost.Hana 声明成员变量
- 声明成员对象而不调用其默认构造函数
- 使用函数类型语法声明成员函数
- 尝试访问标头声明成员时出现隔离错误
- 根据二手构造函数声明成员
- C 模板明确声明成员函数值/避免了宏的问题
- 如何在基本模板类中声明成员,其中类型取决于派生类的类型
- 错误:类中没有声明成员函数
- 我可以使用相同的名称为周围作用域中的类型声明成员类型别名吗
- 从variadic模板参数声明成员变量
- 在类(C )中使用模板时未声明成员函数
- 错误:类中未声明 '' 成员函数
- 如何在指向常量地址时声明成员函数常量指针
- 何时以及为什么在堆C++上声明成员变量
- C++ 错误:未在范围内声明;成员函数
- 在不声明成员变量的情况下更改按钮颜色
- 错误 C2535:已定义或声明成员函数
- 当声明成员函数时,*New()是什么意思