在C ++中将DEFINE与Literal Strings混合使用

时间:2013-04-17 19:57:22

标签: c++

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

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

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

error: invalid operands of types ‘const char [11]’ and ‘const char [13]’ to binary ‘operator+’


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

4 个答案:

答案 0 :(得分:5)

您可以将两个字符串文字组合在一起,一个接一个地写入它们之间没有+加上:

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

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

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

这是demo on ideone

答案 1 :(得分:2)

尝试

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

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

答案 2 :(得分:2)

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

注意缺少+运算符。

您也可以

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

答案 3 :(得分:0)

创建一个std :: string,为其分配#define字符串并添加第二个文字。然后使用字符串。

std::string str(PATH_RESOURCES);
str = str + "textures.dat";
std::ifstream datafile(str);