问题是这样的,我正在写一个文件系统模拟器,允许使用 cd 命令修改当前的工作目录,为此我添加了一个私有的名称为 workingDir 的 string 类型的数据成员,并有两个相关的函数:
bool Filesystem::changeWorkingDir(const string &path) {
if (!existPath(path)) {
cerr << "cd: No such directory " << path << endl;
return false;
}
workingDir = path;
return true;
}
string Filesystem::getWorkingDir() {
return workingDir;
}
但是出现了一个很玄学的问题,每当我调用 changeWorkingDir
函数修改 workingDir 后它自动的变为初始值。
如下图所示,workingDir 确实被修改了:
但是马上就又变了回去。。
程序中除了这两个函数,就只有构造函数和另外一个函数访问了 workingDir:
Filesystem::Filesystem() {
fsFilename = "data";
workingDir = "/";
// 略
}
bool Filesystem::list(string &path) {
if (path.empty()) path = workingDir;
// 略
}
编译好程序后,输入 mkdir home 随便创建一个文件夹,使用 cd home 修改工作目录,之后使用 pwd 打印工作目录发现其值依然是之前构造函数中初始化时给赋的值,即 "/"。
希望大家能帮忙看一下
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.