静态函数里面的静态变量?

daj*_*jee 2 c++ static

Java String Literal Pool的简单C++仿真

嗨,

我无法通过MyString类中的私有静态变量进行调用.任何的想法?

static void displayPool() {
    MyString::table->displayAllStrings();
}
StringTable* (MyString::table) = new StringTable();
Run Code Online (Sandbox Code Playgroud)

这两个都在MyString类中声明.table是一个私有变量.

谢谢.

编辑:头文件

#ifndef MYSTRING_H
#define MYSTRING_H

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
#define POOLSIZE 100

class StringTable {
 public:
    StringTable();
    int addString(const char *str);
    char* getString(int i);
    void deleteString(int i);
    void displayAllStrings();
    void addCount(int);
    void minusCount(int);
 private:
    char** array; //da pool
    int* count;
    int size;
    int numStrings;
};

class MyString {
 public:
   MyString(const char*);
   MyString(const MyString&);
   ~MyString();
   static void displayPool();
   MyString& operator=(const MyString &);
   char* intern() const;
 private:
   int length;
   int index;
   static StringTable* table;
   friend MyString operator+(const MyString& lhs, const MyString& rhs);
   friend ostream& operator<<(ostream & os, const MyString & str);
 }; 

#endif
Run Code Online (Sandbox Code Playgroud)

Dav*_*men 6

static void displayPool() {
    MyString::table->displayAllStrings();
}
Run Code Online (Sandbox Code Playgroud)

这不是你认为它正在做的事情.它定义了自由功能displayPool.关键字static所做的就是将函数保持在定义函数的源文件的本地函数中.你想要的是定义静态成员函数MyString::displayPool():

void MyString::displayPool() {
    table->displayAllStrings();
}
Run Code Online (Sandbox Code Playgroud)

MyString::之前displayPool是必不可少的.你不想在static这里使用关键字; 添加那将是一个错误.最后,请注意,没有必要MyString::符合资格table.静态成员函数可以查看所有静态数据成员,而无需进行限定.您需要符合条件的唯一原因table是是否存在名为的全局变量table; 那table会很暧昧.