Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 私有静态成员不能从公共静态成员函数访问?_C++_Scope_Visibility_Static Members - Fatal编程技术网

C++ 私有静态成员不能从公共静态成员函数访问?

C++ 私有静态成员不能从公共静态成员函数访问?,c++,scope,visibility,static-members,C++,Scope,Visibility,Static Members,假设我有以下代码: #define STACK_SIZE 5 class Stack { private: static int iStackPos; private: static void *rgpvStack[STACK_SIZE]; public: static void Push ( void *pvElem); }; int Stack::iStackPos = 0; void *rgpvStack[STACK_SIZE]; void

假设我有以下代码:

#define STACK_SIZE 5

class Stack {
    private: static int iStackPos;
    private: static void *rgpvStack[STACK_SIZE];

    public: static void Push (
        void *pvElem);
};

int Stack::iStackPos = 0;
void *rgpvStack[STACK_SIZE];

void Stack::Push (void *pvElem) {
    if (Stack::iStackPos < STACK_SIZE) {               // [1]
        Stack::rgpvStack[Stack::iStackPos++] = pvElem; // [2]
    }
}

如果编写函数的定义,如

void Push (void *pvElem) {
    if (Stack::iStackPos < STACK_SIZE) {               // [1]
        Stack::rgpvStack[Stack::iStackPos++] = pvElem; // [2]
    }
}
一定有

void * Stack::rgpvStack[STACK_SIZE];

在这方面,这些成员应该可以接触。这正是您试图编译的代码吗?为什么所有内容都是静态的?在添加
堆栈::
后为我编译,以获得
void*Stack::rgpvStack[Stack_SIZE](VC++)。在解决编译错误(我在您发布的代码中看不到)后,您将在
Stack::rgpvStack
中出现额外的链接错误。此代码会导致错误。匈牙利语前缀,定义常量的宏,
void*
,静态成员,哎哟!更不用说有
std::stack
时的DIY堆栈了。为什么?
void Stack::Push (void *pvElem) {
    if (Stack::iStackPos < STACK_SIZE) {               // [1]
        Stack::rgpvStack[Stack::iStackPos++] = pvElem; // [2]
    }
}
void *rgpvStack[STACK_SIZE];
void * Stack::rgpvStack[STACK_SIZE];