我创建了一个带有静态字段的基本 IBasic 界面
class IBasic
{
public:
IBasic();
virtual ~IBasic();
static std::vector< std::vector<char> > Field;
};
Inherit类继承自:
class Inherit : public IBasic
{
public:
Inherit(int);
~Inherit();
void Foo();
};
Inherit 类在构造函数/或成员函数中对 Field 静态成员进行一些操作。 为了创建 Inherit 类的实例,我们需要在 main.cpp 中在 main 函数之前显式声明一个静态字段:
#include "Basic.h"
#include "Inherit.h"
std::vector< std::vector<char> > IBasic::Field;
int main()
{
Inherit(10);
return 0;
}
问题是:
- 静态方法实际存在于哪个 namespace (全局?)?因为我知道静态字段/函数实际上不是类成员。
- 是否有另一种方法来声明这个静态方法,例如,在 类文件,主函数内部,还是通过创建未命名的命名空间?它只有一个正确的变体吗?
- 怎样才是对的?首先应该考虑什么?
最佳答案
类的静态成员是其类的成员(这是重言式)及其类命名空间(类是命名空间)。它不是任何其他 namespace 的成员。
类的非 const 静态数据成员必须在程序中定义一次,在任何类之外,在定义其类的同一命名空间中(在您的情况下为全局命名空间)。头文件不适合放置此类声明。它通常放在与头文件一起的实现 .cpp 文件中。
话虽如此,接口(interface)不应该有任何静态数据成员,更不用说公共(public)数据成员了。这很可能是一个严重的设计错误。
关于c++ - 静态成员声明 c++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46884960/