静态成员声明c ++ 11

Ant*_*ton 0 c++ inheritance static-members c++11

我创建了一个带有静态字段的基本IBasic接口

class IBasic
{
public:
    IBasic();
    virtual ~IBasic();

    static std::vector< std::vector<char> > Field;
};
Run Code Online (Sandbox Code Playgroud)

从哪个继承类继承:

class Inherit : public IBasic
{
public:
    Inherit(int);
    ~Inherit();
    void Foo();
};
Run Code Online (Sandbox Code Playgroud)

Inherit类使用构造函数/或成员函数中的Field静态成员进行一些操作.为了创建Inherit类的实例,我们需要在main函数之前在main.cpp中显式声明一个静态字段:

#include "Basic.h"
#include "Inherit.h"

std::vector< std::vector<char> > IBasic::Field;

int main()
{
    Inherit(10);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

问题是:

  1. 静态方法实际存在于什么名称空间中(全局?)?因为我知道静态字段/函数实际上不是类成员.
  2. 是否有另一种方法来声明这个静态方法,例如,在类文件中,在main函数内,还是通过创建未命名的命名空间?它只是一个正确的变体吗?
  3. 怎么样对吗?首先应该考虑什么?

n. *_* m. 5

类的静态成员是其类的成员(这是一个重言式)及其类命名空间(类是命名空间).它不是任何其他命名空间的结构.

一个类的非const静态数据成员必须在程序中完全定义一次,在任何类之外,在其定义的同一名称空间中(在您的情况下为全局名称空间).头文件不适合此类声明.它通常放在与头文件一起的实现.cpp文件中.

话虽如此,界面不应该有任何静态数据成员,更不用说公共成员了.这很可能是一个严重的设计错误.