gpt4 book ai didi

c++ - 静态函数中的静态变量?

转载 作者:搜寻专家 更新时间:2023-10-31 00:00:37 25 4
gpt4 key购买 nike

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

你好,

我无法从我的 MyString 类中的私有(private)静态变量进行调用。有什么想法吗?

static void displayPool() {
MyString::table->displayAllStrings();
}
StringTable* (MyString::table) = new StringTable();

这两个都在 MyString 类中声明。表是私有(private)变量。

谢谢。

编辑:头文件

#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

最佳答案

static void displayPool() {
MyString::table->displayAllStrings();
}

这不是你认为它在做的事情。它正在定义自由函数 displayPool。关键字 static 所做的只是将函数保留在定义该函数的源文件中。你想要的是定义静态成员函数MyString::displayPool():

void MyString::displayPool() {
table->displayAllStrings();
}

displayPool 之前的MyString:: 是必不可少的。您不需要在此处使用 static 关键字;添加那将是一个错误。最后,请注意 MyString:: 不需要限定 table。静态成员函数无需限定即可查看所有静态数据成员。您需要限定 table 的唯一原因是是否有一个名为 table 的全局变量;那么 table 就会有歧义。

关于c++ - 静态函数中的静态变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com