0

比如说我在我的程序文件 main.cpp 的 4 个部分中有这行代码

ifstream fin; fin.open("filename.txt")

但我不想去更改所有这四个位置的所有这些文件名。

我怎么能为此创建一个全局变量名?它与 filenames.txt 的工作方式不同吗?

4

3 回答 3

2

也许您尝试过这样的全局变量:

const std::string filename = "filename.txt";

然后尝试用以下方式初始化ifstream

ifstream fin; fin.open(filename);

它对你不起作用。这可能是因为您没有支持 2011 标准的 C++ 编译器或库。如果你确实有这样的编译器,它会工作得很好。但是,如果不这样做,则需要将 C 样式字符串传递给ifstream构造函数。

ifstream fin; fin.open(filename.c_str());
于 2012-09-10T23:21:09.227 回答
1

这就是我将如何去做。

传递指定应用程序配置文件路径的命令行参数。当您的应用程序加载时,它会解析此配置文件并保存文件名等项目的所有值。有一个类或全局结构,可以根据请求存储和传递这些值。例如:

fin.open(AppConfig.get("filename")); // if the AppConfig is a class.
fin.open(AppConfig["filename"]); // if AppConfig was a map like structure.

这种数据驱动的开发是很好的做法。如果您只使用一个文件,您可能只想在文件开头定义一个常量名称:

const char* FILENAME = "my file.txt"; // or
#define FILENAME "my file.txt"

并且每次都使用常量:

fin.open(FILENAME); // use this repeatedly
于 2012-09-10T23:18:54.100 回答
0

您可以定义一个全局 const 变量

const char* fileName = "filename.txt";

或者

const std::string fileName = "filename.txt";

全局变量如果不能变异也不错。然后用法:

ifstream fin(fileName);
于 2012-09-10T23:17:27.603 回答