【问题标题】:Mixing DEFINEs with Literal Strings in C++在 C++ 中将 DEFINE 与文字字符串混合
【发布时间】:2013-04-17 19:57:21
【问题描述】:

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

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

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

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


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

【问题讨论】:

    标签: c++


    【解决方案1】:

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

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

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

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

    这是demo on ideone

    【讨论】:

    • 谢谢,这成功了。我不知道字符串文字可以这样组合。
    【解决方案2】:

    试试

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

    相邻连接的两个字符串字面量。

    【讨论】:

      【解决方案3】:

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

      请注意缺少 + 运算符。

      你也可以

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-19
          • 1970-01-01
          • 1970-01-01
          • 2017-08-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多