1

我创建了一个指向特定目录的#define。然后我想将此定义与字符串文字结合使用:

#define PATH_RESOURCES "/path/to/resources/"
std::ifstream datafile(PATH_RESOURCES + "textures.dat");

但是,编译器抱怨使用 + 运算符添加 char 类型:

错误:“const char [11]”和“const char [13]”类型的无效操作数到二进制“operator+”</pre>


那么如何将#define 与字符串文字结合起来呢?或者,有没有更好的方法完全做到这一点?我想使用 const 变量将是另一种选择,但这意味着必须传递另一个参数,我宁愿将其保留为全局定义。

4

4 回答 4

5

您可以通过一个接一个地编写它们来组合两个字符串文字,它们+之间没有加号:

std::ifstream datafile(PATH_RESOURCES "textures.dat");

一个字符串文字恰好是通过预处理器定义的这一事实并没有太大变化:您也可以这样做:

std::ifstream datafile(PATH_"/path/to/resources/" "textures.dat");

这是关于 ideone 的演示

于 2013-04-17T19:58:57.010 回答
2

尝试

 std::ifstream datafile(PATH_RESOURCES "textures.dat");

相邻连接的两个字符串文字。

于 2013-04-17T19:59:09.263 回答
2

采用std::ifstream datafile(PATH_RESOURCES "textures.data");

请注意缺少 + 运算符。

你也可以做

std::ifstream datafile(std::string(PATH_RESOURCES) + std::string("textures.data"));如果你真的想要。

于 2013-04-17T19:59:14.500 回答
0

创建一个 std::string,将您的 #define 字符串分配给它并添加第二个文字。之后使用字符串。

std::string str(PATH_RESOURCES);
str = str + "textures.dat";
std::ifstream datafile(str);
于 2013-04-17T20:02:20.617 回答