質問です
質問です
前回は、ありがとうございました。
またboost::anyで分からないことが出てしまいました。
前回のを解決にしてしまったので新規に作りました。
すいません。
DXライブラリの
FileRead_open()
関数に、
boost::any
に入った文字列を渡したいのですが、エラーが出てしまいました。
FileRead_open(boost::any_cast<char>(aaa))
としてみたのですが、
DxLib::FileRead_open' : 1 番目の引数を 'char' から 'const char *' に変換できません。
とのことです。
どのようにしたら、正常に動いてくれるでしょうか?
またboost::anyで分からないことが出てしまいました。
前回のを解決にしてしまったので新規に作りました。
すいません。
DXライブラリの
FileRead_open()
関数に、
boost::any
に入った文字列を渡したいのですが、エラーが出てしまいました。
FileRead_open(boost::any_cast<char>(aaa))
としてみたのですが、
DxLib::FileRead_open' : 1 番目の引数を 'char' から 'const char *' に変換できません。
とのことです。
どのようにしたら、正常に動いてくれるでしょうか?
Re:質問です
char* tesuto(){
aaa[500] = "";
std::string deeta;
std::ifstream ofs( "tesuto.txt" );
getline(ofs,deeta);
strcpy(aaa,deeta.c_str());
return a
}
main(){
boost::any a;
a = tesuto();
FileRead_open(boost::any_cast<char *>(a)) ;
・
・
・
}
こんな感じになっってると思います。
すいません。元がぐちゃぐちゃしてるので抜き出してみたのですが、
どこか変になってるかもしれません。
aaa[500] = "";
std::string deeta;
std::ifstream ofs( "tesuto.txt" );
getline(ofs,deeta);
strcpy(aaa,deeta.c_str());
return a
}
main(){
boost::any a;
a = tesuto();
FileRead_open(boost::any_cast<char *>(a)) ;
・
・
・
}
こんな感じになっってると思います。
すいません。元がぐちゃぐちゃしてるので抜き出してみたのですが、
どこか変になってるかもしれません。
Re:質問です
とりあえず混乱しているようですから整理して見ましょう。
まず、問題が再現するコンパクトなソースコードを作って添付してみてください。
コンパクトにする場合、元の構造体やクラス?関数?の構造はできるだけ残してください。
前回のお話でC++的に作っているとの事でしたが、
http://www.play21.jp/board/formz.cgi?ac ... &rln=48867
char *型などメモリスコープをC言語的に管理なければいけないデータ型を使ってC++的なstd::string型を使わない理由を伺ってよろしいですか?
まず、問題が再現するコンパクトなソースコードを作って添付してみてください。
コンパクトにする場合、元の構造体やクラス?関数?の構造はできるだけ残してください。
前回のお話でC++的に作っているとの事でしたが、
http://www.play21.jp/board/formz.cgi?ac ... &rln=48867
char *型などメモリスコープをC言語的に管理なければいけないデータ型を使ってC++的なstd::string型を使わない理由を伺ってよろしいですか?

Re:質問です
softyaさんのいっているソースコードを作ってコンパイルしたら、リンクの時他のライブラリと競合しています。などとエラー大量に出てきてしまってもう分かりません。自分はいったい何をしたんでしょうか……
しかも、作っていたら明らかにおかしいところもりましたし。
もう自分が何したいのか分からなくなってきました。
頭が付いていけません。自分が今、何が分からないのか分かりません。
ここまで来て、申し訳ありませんが、質問を変える、というか、自分の聞きたいことを整理します。
本当にすいません。
関数の戻り値にstd::ifstreamで開いたファイルから読み込んだ文字列を指定して、その文字を構造体の中のboost::anyに代入したいのです。最終的にこの文字列をDXライブラリのFileRead_open()関数に渡したいのです。
なぜ、boost::anyかというと、これをプログラム内で使いまわしたいからです。あと、boost::anyの使い方の勉強も兼ねています。この場合、どのようにするのがいいでしょうか?
大まかな流れ的にはどのような処理になるのでしょうか?
ということを聞きたいです。
本当に申し訳ありません。
しかも、作っていたら明らかにおかしいところもりましたし。
もう自分が何したいのか分からなくなってきました。
頭が付いていけません。自分が今、何が分からないのか分かりません。
ここまで来て、申し訳ありませんが、質問を変える、というか、自分の聞きたいことを整理します。
本当にすいません。
関数の戻り値にstd::ifstreamで開いたファイルから読み込んだ文字列を指定して、その文字を構造体の中のboost::anyに代入したいのです。最終的にこの文字列をDXライブラリのFileRead_open()関数に渡したいのです。
なぜ、boost::anyかというと、これをプログラム内で使いまわしたいからです。あと、boost::anyの使い方の勉強も兼ねています。この場合、どのようにするのがいいでしょうか?
大まかな流れ的にはどのような処理になるのでしょうか?
ということを聞きたいです。
本当に申し訳ありません。
Re:質問です
>関数の戻り値に std::ifstreamで開いたファイルから読み込んだ文字列を指定して、その文字を構造体の中のboost::anyに代入したいのです。最終的にこの文字列をDXライブラリのFileRead_open()関数に渡したいのです。
なぜ、boost::anyかというと、これをプログラム内で使いまわしたいからです。あと、boost::anyの使い方の勉強も兼ねています。この場合、どのようにするのがいいでしょうか?
その説明だけだとstd::string型じゃなくて、boost::anyじゃないとダメない理由がわかりませんね。
たしか数値も代入するという所からboost::anyになったはずですが?
それと、関数の戻り値にchar *型を使う場合はローカル変数のスコープやメモリの動的確保をちゃんと理解していない使えないことを理解してください。今まで提示されたコートはfatensさんのサンプルコードが提示している問題を理解出来ないと直せませんよ。
なぜ、boost::anyかというと、これをプログラム内で使いまわしたいからです。あと、boost::anyの使い方の勉強も兼ねています。この場合、どのようにするのがいいでしょうか?
その説明だけだとstd::string型じゃなくて、boost::anyじゃないとダメない理由がわかりませんね。
たしか数値も代入するという所からboost::anyになったはずですが?
それと、関数の戻り値にchar *型を使う場合はローカル変数のスコープやメモリの動的確保をちゃんと理解していない使えないことを理解してください。今まで提示されたコートはfatensさんのサンプルコードが提示している問題を理解出来ないと直せませんよ。
Re:質問です
とりあえず、頭を冷やしてきてたつもりです。
>fatensさんのサンプルコードが提示している問題を理解出来ないと直せませんよ。
関数内で利用したint aのメモリ領域は、関数が終了すると自動的に解放されてしまうため、その領域のアドレスを返しても、指している場所にはもうデータは残っていないために、正常に動かないから間違っている。と解釈したのですが合っていますでしょうか?
>その説明だけだとstd::string型じゃなくて、boost::anyじゃないとダメない理由がわかりませんね。
たしか数値も代入するという所からboost::anyになったはずですが?
FileRead_open()だけでなく、他の部分でも使う予定でいます。その中には数値も入る場所があるのでboost::anyを使いたいのです。言葉が足りず、申し訳ありません。
>本人が分からなければ、他人はもっとわかりませんし、ついてもいけません。
小手先のテクニックではなく、そもそも何をしたいのかをもう一度整理してください。
その通りですね。本当に申し訳あしません。自分では、イメージできているのと思ったのに、実際は全然出来ていなかったです。
>fatensさんのサンプルコードが提示している問題を理解出来ないと直せませんよ。
関数内で利用したint aのメモリ領域は、関数が終了すると自動的に解放されてしまうため、その領域のアドレスを返しても、指している場所にはもうデータは残っていないために、正常に動かないから間違っている。と解釈したのですが合っていますでしょうか?
>その説明だけだとstd::string型じゃなくて、boost::anyじゃないとダメない理由がわかりませんね。
たしか数値も代入するという所からboost::anyになったはずですが?
FileRead_open()だけでなく、他の部分でも使う予定でいます。その中には数値も入る場所があるのでboost::anyを使いたいのです。言葉が足りず、申し訳ありません。
>本人が分からなければ、他人はもっとわかりませんし、ついてもいけません。
小手先のテクニックではなく、そもそも何をしたいのかをもう一度整理してください。
その通りですね。本当に申し訳あしません。自分では、イメージできているのと思ったのに、実際は全然出来ていなかったです。
Re:質問です
>関数内で利用したint aのメモリ領域は、関数が終了すると自動的に解放されてしまうため、その領域のアドレスを返しても、指している場所にはもうデータは残っていないために、正常に動かないから間違っている。と解釈したのですが合っていますでしょうか?
あっています。
だったら別の方法があるはずですよね。
>FileRead_open()だけでなく、他の部分でも使う予定でいます。その中には数値も入る場所があるのでboost::anyを使いたいのです。言葉が足りず、申し訳ありません。
私だったら型は、ポリモーフィズムでクラスに隠蔽しますね。boost::any_cast<>とかも表面に出てこなくなるので、扱いやすくなると思いますよ。とりあえず必要な型は、std::string型とint型だけですかね。
そう言えば、データと名前がセットになっているとか言ってませんでした?
あっています。
だったら別の方法があるはずですよね。
>FileRead_open()だけでなく、他の部分でも使う予定でいます。その中には数値も入る場所があるのでboost::anyを使いたいのです。言葉が足りず、申し訳ありません。
私だったら型は、ポリモーフィズムでクラスに隠蔽しますね。boost::any_cast<>とかも表面に出てこなくなるので、扱いやすくなると思いますよ。とりあえず必要な型は、std::string型とint型だけですかね。
そう言えば、データと名前がセットになっているとか言ってませんでした?