- 1 名前:デフォルトの名無しさん mailto:sage [2020/07/13(月) 13:51:48.09 ID:WBkWHxcT.net]
- エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう 半角空白やタブでのインデントはスレに貼ると無くなります コードを貼れる所 codepad.org/ https://ideone.com/ 前スレ 【初心者歓迎】C/C++室 Ver.105【環境依存OK】 https://mevius.5ch.net/test/read.cgi/tech/1556142878/
- 859 名前:デフォルトの名無しさん [2021/08/25(水) 19:02:32.36 ID:s4ke0ECA.net]
- C++を勉強しているんだけど難しすぎる。
目標は研究に使う数値計算ライブラリを作ることでそのために、 オブジェクト指向とテンプレートプログラミングとSTLを勉強しているんだけど量が多すぎて発狂しそう。 本当にC++を仕事で使っている人はこの量の仕様を覚えて使いこなしてるのか・・・
- 860 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 19:16:48.44 ID:I0Do+yHA.net]
- 基本的に自分がよく使う範囲だけ覚えて
必要があればそれ以外の範囲を調べて使う 膨大なようで、所詮言語だから使ってれば覚える
- 861 名前:デフォルトの名無しさん [2021/08/25(水) 19:55:14.87 ID:s4bO6YKI.net]
- 生半可に上辺だけ触って判った気になって
コード描けますとかいうやつと仕事したくないわ
- 862 名前:デフォルトの名無しさん [2021/08/25(水) 21:53:18.83 ID:gHVAu5z0.net]
- >>827
>>828 言葉足らずですみません。 CentOS7のdevtoolのg++はABI互換性の関係から古いlibstdc++としかリンクできないようにされていて つまるところC++11の機能はほとんど使えなくなっている、ということでした。 本来ver8.3ならC++17にも対応しているはずなのにほとんど意味ないわけです…。 だったら-std=c++11とかつけたときに警告してくれとでも思わないわけもないですが。
- 863 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 23:11:46.20 ID:3/bOIe3o.net]
- >>829
もしEigenとかみたいなメタプログラミング使った数値計算ライブラリを考えてるならやめとけ 無駄に開発期間が数倍から10倍程度に膨れ上がるだけ とりあえずテンプレートとか使わずに(あるいはメタじゃないレベルにおさえて)普通に書いたら?
- 864 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 06:13:02.19 ID:H9rsGF96.net]
- >>829
仕事をすると言っても、他の人がこさえたライブラリを使う場合はそこまでは求められんだろう。 反対に根っこ部分のライブラリとか、チーム内でのルールに関わると知識と経験がいるんじゃないかな? よく理解できている方法でしっかり組み立てられるようになってから、徐々に細かい話に手を出したらいいと思う。 他の方法は解ってるし悪いわけでもないが、記述が気に入らないので延々とtemplate弄り倒す沼もあるから注意してね。
- 865 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:00:20.61 ID:b62pz5ME.net]
- 数値計算に使うのならまずはSTL抑えておくだけでいいんじゃね?
C++言語自体の習得より、GPGPU、分散処理、SIMD、メモリ管理とかのノウハウ習得にまずは時間を割り当てるほうがよいと思う
- 866 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 09:28:17.30 ID:eI1EN0aq.net]
- 物理の計算とか、いろんな数学的な量が出てくる
- 867 名前:ッど、そういうのの演算がすべて
プログラム上では同じ形で書ければかっこいいなあと思ったり。 例えば、(スカラー)積なら、オペランドが実数、虚数、ベクトル、行列、テンソル....等々どれでも 乗算オペレーターで扱えるとか。 「普通」の数値ライブラリだとオペランド毎に積を扱う関数がうんざりするほどあってそれを適切に 選ばないといけなかったりするので。 [] - [ここ壊れてます]
- 868 名前:デフォルトの名無しさん [2021/08/26(木) 12:08:14.60 ID:p2DPtxMk.net]
- 829です。
皆さんいろいろとアドバイスありがとうございます。 自分が作ろうと思っているのは、Eigenを用いた金融系の数値計算ライブラリなのですが、テンプレートを用いたらいろいろな型を代入できて便利かな〜くらいの感じで作ろうとしていました。 templateの使い方自体は少し勉強してみましたが、メタプログラミングの概念自体もよくわかっていないので、ひとまずtemplateは後回しにしようかと思います。 オブジェクト指向で書くかどうかは実際にコードを書いてみてから考えてみたいと思います。
- 869 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 16:35:43.38 ID:9wBQWoih.net]
- Eigen利用するだけか
それならまぁ無駄に時間かかるということも無いと思う(変なとこに拘らなければ
- 870 名前:デフォルトの名無しさん [2021/08/26(木) 16:43:57.74 ID:WPRv8+9f.net]
- >>836
コンピューターというか主要な高級プログラミング言語が出来て50年以上経つが だれもそういうことをやってないのは何故だと思う?
- 871 名前:デフォルトの名無しさん [2021/08/26(木) 16:45:12.60 ID:WPRv8+9f.net]
- ちなみに SciPy とか SymPy は良く出来てる方
- 872 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 14:40:33.39 ID:RrJjtAzF.net]
- >>839
template使ったらもう型にとらわれなくていいんじゃね?はC++学習者の必ず通る道やからしゃーない
- 873 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 15:05:57.44 ID:nK81wxcE.net]
- で、結局なんでできないの?
C APIのほうが汎用性が高いから? 行列やテンソルは乗算方法が複数あるから? 結果の表現形式も有理数とか複数あるから? 結果をエレベーションする必要があるから?
- 874 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 17:44:56.54 ID:LFMqkLz6.net]
- extern "C" 使ってる?
- 875 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 17:53:48.43 ID:nK81wxcE.net]
- >>843
Cで開発するときに、常にヘッダファイルに書いておく必要があるかどうかって話なら、将来c++から呼び出す可能性があるなら書いておけば? 最悪なくてもインクルードする側でどうにかなる
- 876 名前:デフォルトの名無しさん mailto:sage [2021/08/27(金) 19:22:59.35 ID:ghUXxVcH.net]
- >>843
32bitとはいえマイコンで-std=gnu++17とか指定するのは微妙な背徳感を感じてしまうチキンだが、 Cのライブラリも一緒に使うから、普通に使ってるな。基本ヘッダファイルでほとんど事足りるんだけど、 weak指定のCの割り込みハンドラとか再定義するときは混乱しないように明示的にextern "C"付けてる。
- 877 名前:デフォルトの名無しさん [2021/08/29(日) 01:50:34.33 ID:TPHdi4yb.net]
- >>841
operator置き換えまくりとかな
- 878 名前:デフォルトの名無しさん mailto:sage [2021/08/29(日) 10:17:41.53 ID:sPGAkNt4.net]
- >>841
設定読み込みの部分でお世話になったわ
- 879 名前:デフォルトの名無しさん [2021/08/30(月) 14:54:09.69 ID:a7szkEqk.net]
- C++17は甘え
- 880 名前:デフォルトの名無しさん mailto:sage [2021/08/30(月) 20:54:03.52 ID:i7moqIxZ.net]
- 甘えてもいいぜ
- 881 名前:デフォルトの名無しさん mailto:sage [2021/09/08(水) 21:07:44.76 ID:QZMwNs5W.net]
- C99で良いです……
- 882 名前:デフォルトの名無しさん [2021/11/24(水) 18:53:15.36 ID:ONXwk6fD.net]
- void *q = (void*)p;
void *r = reinterpert_cast<void *>(p); void *s = static_cast<void *>(p); どっちが良い?
- 883 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 22:24:01.60 ID:7YsOMgZx.net]
- p の型によるんじゃね?
- 884 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 14:45:18.21 ID:Ts2h3uwp.net]
- >>838
Eigen の MatrixXtype と Matrix<type, Dynamic, Dynamic> が便利なのは判ったが 自分でそいつらを引数に持つテンプレート関数書こうとして template <typename T, int R, int C> void func(Matrix<T, R, C>&m){ ... } で定義したら a が Matrix3d a; とか RC 固定されてるときは func(a) で問題無いが a が Matrix<type, Dynamic, Dynamic> a(3, 3); だと 実際に func(a) とかで呼ばれるときに Matrix<type, -1, -1> で呼ばれてて Row 数も Column 数も判らないので 結局呼ぶときに func<type, 3, 3>(a) みたいに確定して呼ぶことになるんだが そういうもの?
- 885 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 19:09:15.51 ID:ZkEvf+9l.net]
- Eigen使ったことないけど、それ多分動的なサイズ指定だよね
コンパイル時にサイズ分かってない奴じゃね
- 886 名前:デフォルトの名無しさん [2021/11/27(土) 15:14:48.94 ID:dxTMcmeT.net]
- fstream で open するオプションで
ios:in ios:out ios:binary とかと ios_base:in ios_base:out ios_base:binary とかと 何が違うのでしょう?
- 887 名前:デフォルトの名無しさん mailto:sage [2021/11/29(月) 16:58:44.62 ID:Afxc3rI9.net]
- おなじ
:: だろうけど
- 888 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 10:19:18.78 ID:aQJDsz9k.net]
- 一般的にプリプロセッサのビットシフトに制限てありますか?
#define HOGE (1<<27) だとダメで #define HOGE (0x8000000) だとOKだとかありますかね?
- 889 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 10:50:06.54 ID:7ju/18KI.net]
- >>857
プリプロセッサはその define値をその記述通りの文字列(というか文)としか見てなくて、単にその定義名の所へはめ込むだけじゃない? あとは嵌め込まれた後の文脈でコンパイラが解釈するんじゃないかな。
- 890 名前:デフォルトの名無しさん mailto:sage [2021/12/06(月) 12:49:27.90 ID:T2nrofKv.net]
- >>858
そう言われてみればそうですよね トンチンカンな質問失礼しました
- 891 名前:はちみつ餃子 mailto:sage [2021/12/06(月) 13:31:07.92 ID:Fu08U5Ef.net]
- >>857
定義での制限はないが、マクロの制御定数式として表れる場合、 つまり #if HOGE > 0 みたいな前処理指令があった場合に全ての符号付整数型が intmax_t 、 全ての符号無し整数型が uintmax_t と同じ表現を持つというルールがあるので 通常の式とは解釈が違う。 (大抵の場合に intmax_t は long long int と同じ大きさだと思う。) つまり普通の式としてならオーバーフローする場合でもプリプロセッサではオーバーフローしないこともあるので、 制限としてはむしろ緩い。 https://wandbox.org/permlink/Ns4Qt2xG3wj1WVBH
- 892 名前:デフォルトの名無しさん [2021/12/08(水) 17:56:15.71 ID:ouf8qdPn.net]
- std::listのsortを使ってるのですが
同値だった場合の順序が維持されず困ってます。 何かよい手はないですか? 比較関数を渡してるのですがその中で何とかならないでしょうか?
- 893 名前:はちみつ餃子 mailto:sage [2021/12/08(水) 18:22:21.80 ID:cTje1973.net]
- >>861
言語仕様上は std::list::sort は安定ソートなので そうなってないなら標準ライブラリの実装が間違っているか使い方が間違っている。
- 894 名前:デフォルトの名無しさん mailto:sage [2021/12/08(水) 18:28:56.67 ID:ouf8qdPn.net]
- >>862
そうなんですね。ありがとうございます。 調べてみます。
- 895 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 05:48:07.42 ID:4Thv0Igk.net]
- 純粋仮想関数の通知メソッドの中から他所のアドレスを知りたい時C++だとどう書くのが一般的ですか?
- 896 名前:デフォルトの名無しさん mailto:sage [2021/12/09(木) 07:40:39.36 ID:bGgqEdHH.net]
- 日本語でおけ
- 897 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 05:24:10.27 ID:pHnakqcn.net]
- 私の同僚のプログラマがC++で、あるソフトのプラグインをdll形式で作成しており
そのdllファイルは6割くらいの環境では問題なく動作しています。 しかし、ユーザーの環境次第で動かないことがあり dllをインストールした状態でソフトウェアを起動しようとすると、ソフトウェア自体が起動しないというバグを抱えており この問題の解決方法は数か月以上、見つかっていません。 そのdllはWindowsのみで動作するものであり、MacやLinuxには対応していません。 Windowsの何らかの設定に関係するバグなのでしょうか…? バグの原因が一切分からず、彼の作業が進まないので私の作業も進まず、困っています。 私自身はC++でそのソフトのプラグインを作成したこともないですし、彼に何のアドバイスもできないので このスレッドのお力をお借りしたいです。 dllを作成する際にユーザー環境でデバッグしてログを取得する方法など 何でも良いのでアドバイスがあったら教えてください。 エスパーを求めています。
- 898 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 05:56:13.12 ID:6fha5luI.net]
- printfデバッグをファイルに書くとか
- 899 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 06:41:07.66 ID:9Wj0xfjq.net]
- 64bitと32bitの違い・・・ではないか
それかintel/amdどちらかにしかない命令使ってるとか、何か依存する部分があるとか??
- 900 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 08:10:32.07 ID:o0cf+I8x.net]
- まずはエラーメッセージをだな
でもランタイムライブラリのオプションがMTじゃなくてMDになってると予想
- 901 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 08:23:33.51 ID:T7uEaOwT.net]
- >>866
例外で落ちたりもせず、ただ起動しないの? 起動しない環境の特徴も分からない? なにかしらのセキュリティソフトが入ってるとか。
- 902 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 10:16:08.28 ID:e0HER7LA.net]
- >>866
>6割くらいの環境では問題なく動作 落ちる環境のPCで開発させてみるといいんじゃね
- 903 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 11:09:39.54 ID:RuQEsKMi.net]
- そのプラグイン dll が vcのランタイムを要求してて 実行環境にvcのランタイムが入っていない
プラグインdllの性質上 ソフトが自前で LoadLibary するが、そこで失敗する この際何が主因なのかわからないまま 静的なリンクなら ○○が見つかりませんdialog がでてすぐわかる プラグインdll を Dependency Walker なりで そのDLLが必要としてる DLL を確認してみたら?
- 904 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 11:37:46.60 ID:zJGtuVBB.net]
- >>872
ソフトの仕様や実装次第だけど、プラグイン読み込みに失敗して起動しないアプリもちょっと手抜き過ぎだよね
- 905 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 11:41:07.01 ID:RuQEsKMi.net]
- >>873
わかったとしても、「モジュール <プラグイン>.dll が見つからない」 としか書きようがなくてややこしい ※ 本当に見当たらないのは <プラグイン>.dll がさらにロードしようとしてる MSVCR○○.dll とかだから
- 906 名前:デフォルトの名無しさん mailto:sage [2021/12/14(火) 11:43:56.15 ID:RuQEsKMi.net]
- プラグインのロード失敗で 即exit するのも不親切かもね
- 907 名前:デフォルトの名無しさん mailto:sage [2021/12/18(土) 10:46:11.74 ID:RFbyER+p.net]
- グローバル変数かstatic変数使ってないか?
昔他所のモジュールと変数の書き換え合戦が起きて正常に動作しない事があった
- 908 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 15:15:53.34 ID:bLFtEsOT.net]
- >>876
static なら他所と競合しないんじゃない? あとグローバル変数が仮に extern だったとしても、意図的にエクスポートしてなければ他所の DLL と競合はしないような。
- 909 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 17:40:07.63 ID:150MzqYw.net]
- 拡張子dllでも独自の実装してるホストプログラムあるからなぁ…
それこそホストの開発者に
- 910 名前:キくしかない []
- [ここ壊れてます]
- 911 名前:デフォルトの名無しさん mailto:sage [2021/12/19(日) 23:17:52.32 ID:mIjShW6/.net]
- 自前でできることは
1) DllMain の DLL_PROCESS_ATTACH、 DLL_PROCESS_DETACH に printf を仕込んで 最低限 load がなされてるかを確認 2) load されてるのなら 最初に呼ばれるであろうexportしてる関数にがんがん printf を仕込んで 何処で死んでるかを確認
- 912 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 03:18:25.98 ID:pnvTuQZD.net]
- 規格厨ほど仕事ができなくね
どうでもいいようなことにこだわってないで さっさと仕事終わらせろよ
- 913 名前:デフォルトの名無しさん mailto:sage [2021/12/24(金) 10:00:30.81 ID:YmgFPSRd.net]
- またお前か
何年立ったらルール覚えられるんだよ つかえねーな
- 914 名前:デフォルトの名無しさん [2022/01/17(月) 19:13:47.29 ID:Xn5FtFWo.net]
- メンバ関数へのポインタで質問なのですが
class MyClass { public: void (MyClass::*p)(); void func(); }; int main() { MyClass obj; このようなクラスがあったとして main関数でobjのメンバの関数ポインタpへfuncのアドレスを入れる書き方と pを使ってfuncを呼ぶ書き方を教えて下さい
- 915 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 19:29:52.39 ID:pwXKfNQA.net]
- >>882
obj.p = &MyClass::func; (obj.*(obj.p))();
- 916 名前:デフォルトの名無しさん [2022/01/17(月) 20:40:50.75 ID:iHDNpEw/.net]
- C++でオブジェクト指向を学びたいなと思ってるのですが、みなさんはどのように学びましたか?
既存のゲームの機能追加などをサークルでやっていて、C++自体には慣れてきて次のステップに進みたいと思いました.
- 917 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 20:47:51.30 ID:h5bglXe3.net]
- ただただ自分でクラス設計考えて実際に書いて、さらにそれをあちこちで使ってみるだけ
実際に書く、利用する、をサボると机上の空論しか語れない頭でっかちになる
- 918 名前:デフォルトの名無しさん [2022/01/17(月) 20:50:24.57 ID:Xn5FtFWo.net]
- >>883
ありがとうございます
- 919 名前:デフォルトの名無しさん [2022/01/26(水) 21:23:31.72 ID:HoA8G4VO.net]
- 初心者です。
自作クラスをVector型に押し込めようとしたのですが、そこで発生したエラーの解決方法を2時間くらい調べたのですが分かりませんでした。 class myClass { myClass(int A){num = A;} void show() { cout << "" << "="<<num<<endl;} ~myClass(){} int num; }; int main() { myClass a1(1), a2(2), a3(3), a4(4), a5(5); vector<myClass> myClassList; myClassList.push_back(a1); //中略 //削除するオブジェのインデックス番号を記録 vector<int> delList; for (int i = 0; i < myClassList.size(); ++i) { if (myClassList[i].num == 2 || myClassList[i].num == 4) { cout << "i" << "=" << i << endl; delList.push_back(i); } } cout << "削除開始" << endl; for (int i = 0; i < delList.size(); ++i) { std::erase(myClassList, delList[i]);//コイツでエラー } return 0; } 二項演算子 '==': 'myClass' は、この演算子または定義済の演算子に適切な型への変換の定義を行いません。
- 920 名前:蟻人間 mailto:sage [2022/01/26(水) 21:34:31.80 ID:bGQQ0+uk.net]
- >>887
myClass::operator==を定義してみ。
- 921 名前:デフォルトの名無しさん [2022/01/26(水) 22:43:54.69 ID:HoA8G4VO.net]
- >>888
オペレータに何を定義すれば良いか分かりません
- 922 名前:蟻人間 mailto:sage [2022/01/26(水) 22:53:20.32 ID:bGQQ0+uk.net]
- >>889
eraseの仕様を見れば内部で要素を比較していることがわかる。 そこでmyClassとintの比較を定義する必要がある。 bool operator==(int n) const { return n == num; }
- 923 名前:蟻人間 mailto:sage [2022/01/26(水) 22:55:52.03 ID:bGQQ0+uk.net]
- あるいは
friend bool operator==(const myClass& my, int n) { return my.num == n; }
- 924 名前:デフォルトの名無しさん [2022/01/26(水) 23:02:17.85 ID:HoA8G4VO.net]
- 蟻人間さん、ご丁寧に教えてくださり、本当にありがとうございます。
無事問題が解決しました
- 925 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 07:58:45.49 ID:Fon8EKoL.net]
- delListはインデックスだからvector::eraseではなかろーか
https://ideone.com/jnELhK
- 926 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:24:34.96 ID:HENDwGdD.net]
- msvcのコンパイルが遅いのとメモリ大量に使うのとで大変辛いのですが、コンパイルだけ別の端末で出来たりしませんか?
- 927 名前:はちみつ餃子 mailto:sage [2022/01/28(金) 15:33:38.19 ID:hT9TavA0.net]
- >>894
GitHub Actions
- 928 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:19:19.11 ID:gre2uKRK.net]
- VARIANT型をログ出力したいときはどうしたらよいでしょうか?
- 929 名前:はちみつ餃子 mailto:sage [2022/01/28(金) 16:23:28.54 ID:hT9TavA0.net]
- >>896
std::variant (C++17 以降) のこと? それとも COM で使う VARIANT のこと? それとも特定の実装 (または規約) ではなく動的型一般のこと?
- 930 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:59:31.61 ID:gre2uKRK.net]
- >>897
Comのです
- 931 名前:はちみつ餃子 mailto:sage [2022/01/28(金) 17:44:30.90 ID:hT9TavA0.net]
- 何がわからないの?
基本的な数値型や配列以外の場合にどう文字列化すればいいかわからないってこと?
- 932 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:57:24.82 ID:gre2uKRK.net]
- VARIANT.ToString的なのないかな?的な
みんな自分で作ってるの?
- 933 名前:はちみつ餃子 mailto:sage [2022/01/28(金) 23:10:21.87 ID:hT9TavA0.net]
- >>900
VARIANT は基本的な型だけでなく COM のオブジェクト (を指すポインタ) を含むこともある。 COM におけるオブジェクトは「少なくとも IUnknown インターフェイスは実装されている」という保証 (規約) があるだけで、 それをどのように表示できるのかは汎用的には決めようがない。 基本的な型だけでも簡易的に文字列化するものがあるとちょっとしたデバッグ用途などでありがたいというのはわからんでもないけど。
- 934 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 23:24:19.57 ID:A8Zj7Ozq.net]
- >>901
オブジェクトはそのポインタ値を表示とかよくある
- 935 名前:はちみつ餃子 mailto:sage [2022/01/28(金) 23:39:29.92 ID:hT9TavA0.net]
- ログ用途だとアドレスだけでは意味が薄そうに思うけど……
(実行のたびに値は変わるだろうし、検証に使えない。) 少なくとも整数などではないという区別が出来れば十分ということはあり得るかな。 タイプライブラリがちゃんと用意されているなら型名などが取得できる場合もあるので可能ならそういう情報も欲しいけど、 いずれにしても「文字列にする」という要求はユースケースが多用すぎて標準的な機能として決め打ちはしづらい。
- 936 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 23:47:34.07 ID:Bry4gZCu.net]
- >>903
Aのルーチンで使ってるオブジェクトとBのルーチンで使ってるオブジェクトが同じかどうかはわかる それ以上のことを知りたいなら個別に表示ルーチンを組むしかない
- 937 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:18:19.62 ID:F6gMvu/h.net]
- ガチガチの初心者です
#include<iostream> double func(double x){ if (x>0) return x; else return 0; } double dfunc(double x){ if (x>0) return 1; else return 0; } int main(){ for (double x=-1.0; x<1; x+=0.1){ std::cout << std::scientific; std::cout << x << ","; std::cout << func(x) << ","; std::cout << dfunc(x) << std::endl; } return 0; } を分割コンパイルするためにmain.cpp、func.cpp、func.fにソース分割したいのですがどのようにすればよいでしょうか
- 938 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:41:33.39 ID:LNIGuTho.net]
- >>905 その3つファイル作って切り貼りして保存すればいいんじゃね。
- 939 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:44:31.98 ID:F6gMvu/h.net]
- >>906
すみません、書き方が悪かったです。分割の仕方?切り貼りして保存する3つのファイルの中身の書き方が知りたいです。
- 940 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:47:36.64 ID:3ZSK4aSw.net]
- >>907
なぜ調べもしない? 「C言語 分割コンパイル」でググりゃ
- 941 名前:あ出てくるっしょ []
- [ここ壊れてます]
- 942 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:48:20.54 ID:LNIGuTho.net]
- >>907 自分でやった結果を見せてもらわないと何に困ってるのかわからない。
- 943 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:08:03.21 ID:fQ9LbNHB.net]
- >>905
とりあえず func.f はやめとけ
- 944 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:27:29.71 ID:54L0j00R.net]
- ふぉーとらんらんらん
- 945 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:27:47.66 ID:CzloZbS7.net]
- >>905
どんな入門書にも書いてあるようなことを質問するのは嫌がられる。 学ぶ気がなく代わりにやらせようとしているように見えるので。 そんで関連する事柄が多いので質問が具体的でないと単純に情報量的にとてもここには書けない。 細々としたところで引っかかるのは当然あることだしそういうのは喜んで回答するから 何がわからずに引っかかってるのかもうちょっと具体的にして欲しい。 わからないことをまとめられないなら とりあえず自分なりにやってみたらどうなったのか見せれば、 何がわかってないかこっちで推測できる可能性がある。
- 946 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 00:03:59.30 ID:9peRckoc.net]
- if (fp = fopen("file.txt", "W+"))
って書くと↓が出るんだけど? warning: suggest parentheses around assignment used as truth value
- 947 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 00:50:39.94 ID:5Jw8HjAD.net]
- まあ気に食わないが括弧でくくってやってる
- 948 名前:蟻人間 mailto:sage [2022/02/02(水) 00:57:41.77 ID:gV8dH/Sr.net]
- if文では、代入と比較の混乱が深刻で、警告を出さなければいけなかったと聞いてるが。
- 949 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 08:17:16.11 ID:BmWHIg0d.net]
- 論理型を省略した代償は高くつきすぎたな。
- 950 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 10:18:30.37 ID:l1cc3wPX.net]
- 0とヌルの違いも曖昧な部分があったな
- 951 名前:はちみつ餃子 mailto:sage [2022/02/02(水) 11:07:29.08 ID:5i7w7V2o.net]
- >>913
強めの警告オプションを付けてたら言語仕様上の問題がないものでも良くない作法に対しては警告が出ることはある。 a && b || c とかいう式でも (人間が) 優先度を勘違いしやすいから括弧を付けることを勧められるし、 インデントの付け方がずれてる場合とかも警告は出る。 余計なお世話だと思うなら大抵はオプションで抑制できるよ。
- 952 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 16:52:47.21 ID:Os1L/Ifx.net]
- 括弧でくくっただけじゃ文句いわれたこともあるので二重否定しとく
if (!!(fp = fopen("file.txt", "W+")))
- 953 名前:はちみつ餃子 mailto:sage [2022/02/02(水) 17:18:37.99 ID:5i7w7V2o.net]
- C++17 以降では if 文の括弧の中に初期化を書けるようになった。
初期化の内容と判断に使う式をセミコロンで区切って書ける。 if (fp = fopen("file.txt", "W+"); fp) このとき変数の宣言を書いてもよく、 if (FILE* fp = fopen("file.txt", "W+"); fp) というようにすると、この変数のスコープを if 文の内側だけに制限できるので便利。 便利だから C にも導入して欲しい。
- 954 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 17:39:51.00 ID:il4bRKm2.net]
- if括弧中で初期化なんて前からやってたことだし
今じゃ代入も初期化になったのか
- 955 名前:はちみつ餃子 mailto:sage [2022/02/02(水) 18:18:35.55 ID:5i7w7V2o.net]
- >>921
以前は「条件が宣言でもよい」だったところに あらたに「初期化文と条件のふたつを書ける」「初期化文は式、もしくは単純宣言である」というルールが追加された形。
- 956 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 08:24:13.76 ID:vXrgdSa9.net]
- デストラクタだけ書いてあってムーブできないクラスをメンバ変数にすると色んな所でコンパイルエラーが出て困りました
値ではなくポインタで持つか、自分のクラスででムーブコンストラクタを書いたらとりあえずはエラーが出なくなったのですが、 こういうクラスは一体どう使われるのを想定して実装したんでしょうか?
- 957 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 18:34:16.03 ID:SQWxHGFm.net]
- 基底クラスからたくさん派生クラスを作りました。
基底クラスの1つのvirtualメソッドを、各派生クラスでoverrideしました。 基底クラスを指す箱から、派生クラスのメソッドを呼ぶ方法を教えてください。 多少スタイルを変えても実現する方法があればお願いします。 ただし、場合分けやインデックスで対応するのは(派生クラスが増えたときに修正箇所が分散するので)厳しいです。 コンパイラは最近のvisual studioのC++を使っています。 struct Basic{ virtual void work(){cout<<"Basic";} }; struct B1:public Basic{ void work()override{cout<<"B1";} }b1; struct B30:public Basic{ void work()override{cout<<"B30";} }b30; void main(){ Basic basic_array[9]; basic_array[0]=b30; basic_array[0].work();//基底クラスのメソッドが呼ばれて Basic と表示されてしまう。 }
- 958 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 19:25:55.42 ID:WarIH046.net]
- Basicの配列にはBasicのオブジェクトしか入らないから、b30もコピーしたときにBasicになってしまったからだよ
Basic*の配列にするかvector<uniq_ptr<Basic>>を使えば
- 959 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 19:56:37.56 ID:SQWxHGFm.net]
- >>925
ポリモーフィズム成功しました。基底クラスのポインタを使って解決しました。 また、基底クラスの変数にコピーすると派生クラス独自のメンバが全て無くなることが理解できました。 ありがとうございました。 void main(){ Basic*basic_array[9]; basic_array[0]=&b30; basic_array[0]->work();//B30のメソッドが呼ばれた。 }
|

|