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];