1

特定のディレクトリを指す #define を作成しました。次に、この定義を文字列リテラルと組み合わせて使用​​したいと思います。

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

ただし、コンパイラは + 演算子を使用して char 型を追加することについて不平を言います。

エラー: バイナリ 'operator+' へのタイプ 'const char [11]' および 'const char [13]' の無効なオペランド</pre>


では、#define を文字列リテラルと組み合わせるにはどうすればよいでしょうか? または、これを完全に行うためのより良い方法はありますか? const 変数を使用することも代替手段になると思いますが、これは、グローバル定義として保持したいさらに別のパラメーターを渡す必要があることを意味します。

4

4 に答える 4

5

2 つの文字列リテラルを結合するには、+間にプラスを入れずに続けて記述します。

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

文字列リテラルの 1 つがたまたまプリプロセッサを介して定義されているという事実は、あまり変わりません。次のようにすることもできます。

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

これはideoneのデモです。

于 2013-04-17T19:58:57.010 に答える
2

試す

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

隣接する 2 つの文字列リテラルが連結されます。

于 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 文字列を割り当て、2 番目のリテラルを追加します。後は紐を使います。

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