首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态函数中的静态变量?

静态函数中的静态变量?
EN

Stack Overflow用户
提问于 2012-10-05 07:26:42
回答 4查看 2.2K关注 0票数 2

Java字符串文字池的简单C++模拟

嗨,

我不能从MyString类中的私有静态变量进行调用。有什么想法吗?

代码语言:javascript
复制
static void displayPool() {
    MyString::table->displayAllStrings();
}
StringTable* (MyString::table) = new StringTable();

这两者都是在MyString类中声明的。table是私有变量。

谢谢。

编辑: headerfile

代码语言:javascript
复制
#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
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-05 07:44:16

在这种情况下,您需要的内容如下:

代码语言:javascript
复制
void MyString::displayPool() {
    MyString::table->displayAllStrings();
}
票数 1
EN

Stack Overflow用户

发布于 2012-10-05 07:51:27

代码语言:javascript
复制
static void displayPool() {
    MyString::table->displayAllStrings();
}

这不是在做你认为它在做的事情。它定义了自由函数displayPool。您需要的是定义静态成员函数MyString::displayPool()

代码语言:javascript
复制
void MyString::displayPool() {
    table->displayAllStrings();
}

displayPool之前的MyString::是必不可少的。这里不需要static关键字;添加该关键字将是错误的。最后,请注意,不需要MyString::来限定table。静态成员函数可以看到所有静态数据成员,而不需要进行限定。您需要限定table的唯一原因是,如果有一个名为table的全局变量;那么table将是不明确的。

票数 6
EN

Stack Overflow用户

发布于 2012-10-05 07:30:16

如果你想在你的静态函数中有一个静态变量,你应该这样做:

代码语言:javascript
复制
static void displayPool() {
    static StringTable* table = new StringTable();

    table->displayAllStrings();
}

然而,我有一种感觉,问题可能是要求您为某个类创建一个静态方法。你可能想要重读这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12737439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档