【初心者歓迎】C/C++室 Ver.105【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
2019/04/25(木) 06:54:38.08ID:6xUIrXDu
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
http://codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.104【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1545944692/
2019/08/20(火) 16:32:36.95ID:ixrUSoxU
c++17ならstd::variantが使えそうだけどね。
2019/08/20(火) 18:41:29.45ID:XxGMpj+X
>>232
std::unique_ptrだからうまくいかない
生ポインタにするだけで通る
2019/08/20(火) 19:03:13.66ID:KUiZK6p2
>>230
普通にとおるような
2019/08/20(火) 19:04:40.28ID:KUiZK6p2
https://wandbox.org/permlink/cnOTu7uhuEfon7Nv
2019/08/20(火) 19:05:34.46ID:PwBGX6fG
>>230
VS2019だと問題なくコンパイルできるけど。
Animalをpublic継承していないとかだったりして。
2019/08/20(火) 19:54:26.69ID:vf53Ia55
>>230
> push_backでエラーが出てコンパイル出来ませんが…
なぜエラーメッセージを貼らないの?
2019/08/20(火) 20:23:10.77ID:QkieET4w
つか、エラー貼るまでもないだろ

std::unique_ptr

コイツはmovしかできないから、コンテナに格納できる条件に合わない。

スマートポインタをコンテナに入れたかったらsharedポインタを使う

常識じゃなかったのか
2019/08/20(火) 20:36:33.84ID:rT2paKVb
unique_ptrはコンテナに格納可能という俺の常識とは違うようだな
2019/08/20(火) 21:46:43.07ID:vf53Ia55
>>239
>>235-237でエラーなくコンパイルできるのに何を言ってるんだよw
2019/08/20(火) 23:47:14.68ID:ehCs1rOT
>>239
std::unique_ptrはコンテナに入れられるぞ
std:auto_ptrをコンテナに入れた場合に起きるCOAPという問題は起きないんだぜ
243230
垢版 |
2019/08/21(水) 20:14:24.97ID:tFOQQ8LH
質問者です。すいません。
コンストラクタのエラーでした。
無事コンパイルできました。
ありがとうございました。
244デフォルトの名無しさん
垢版 |
2019/08/26(月) 16:42:54.84ID:LypwkFGf
人の書いたプログラム読んでるですが,#includeとclassの定義の間に入ってるclassの意味が分かりません.
下の例で言うとHogeのところです.
これは何ですか?

#include <string>
class Hoge;
class Foo : public Bar
{
protected:
...
2019/08/26(月) 16:47:52.57ID:goJw/KBc
前方宣言
246デフォルトの名無しさん
垢版 |
2019/08/26(月) 17:01:32.76ID:LypwkFGf
ありがとうございます.ググって勉強しまう.
247デフォルトの名無しさん
垢版 |
2019/08/26(月) 19:18:54.68ID:YVFaeJ51
class TA{
 static public int a;
}
があって、

int b = TA::a ;
のようにするのと、

TA A;
int b = A.a;
のようにするのは、bに読み込む速度は違うんですかね。
2019/08/26(月) 19:30:09.75ID:doK8kIo2
>>247
後者はAの実体を作るから遅いかも。まあ多分、最適化で変わらないと思う。
249デフォルトの名無しさん
垢版 |
2019/09/08(日) 17:10:16.42ID:eAq/jxOF
wavファイルなどの外部の別ファイルを読み込んで使いたいのですが、どのようにやればいいのでしょうか…?
バイナリデータにして読み込む、みたいな方法を見かけたのですがファイルのサイズが大きすぎるとヒープの領域を使い果たしました的なエラーが出てしまって行き詰まっています
2019/09/08(日) 17:38:17.62ID:46Wp6heU
mallocを使う
まずは音ではなく画像、bmp読み込みから練習する

数百MBの音声ファイルよか数MBのbmp画像読み込みの方が気がラク
2019/09/08(日) 19:18:59.59ID:MtO5EQx1
>>249
一度に全データを読み込むのでなく、固定サイズのバッファに、必要な分だけ少しずつ読み込めばいい。
読み込み済みデータを再生するスレッドとは別に、もう一つのスレッドで再生にあわせてデータを先読みで読み込んでいけばいい。途切れなく再生するにはリングバッファとかを使う。
252デフォルトの名無しさん
垢版 |
2019/09/08(日) 21:28:55.65ID:eAq/jxOF
malloc・リングバッファ、詳しく調べて挑戦してみようと思います!
あとスレッドの概念もちゃんと理解できてない気がするのでそこも勉強しようと思います。
ありがとうございます!
2019/09/09(月) 10:46:06.36ID:QoBVzNSJ
>ファイルのサイズが大きすぎると
積んでるメモリぐらいでかいファイルなのかな?
どういった読み込みで失敗してるんだろう?
2019/09/09(月) 10:54:14.51ID:MF4WMKe5
> ヒープの領域を使い果たしました的なエラー

これからまず連想したのは、VCで巨大ファイルをリソース化しようとしたときに出るコンパイルエラーだな
どのタイミングで出たエラーか書いてないからわからんけど
2019/09/09(月) 11:17:30.78ID:QoBVzNSJ
実行ファイル中にリソースとして埋め込み
リソースからバイナリ列を引き出して(読み出して)
再生コードに渡す

音声を実行ファイルに埋め込みたかったのかな?
256249
垢版 |
2019/09/09(月) 13:17:02.59ID:4LFzbPos
もう少し詳しく書くと、とあるプラグインを作りたくて、それ用のプロジェクトファイルのジェネレーターとVisual studio 2019 を使っています。

そのジェネレーターを通してwavファイルをバイナリデータ化しているのですが、wavファイルのサイズが一定以上になると「error C1060 ヒープの領域を使い果たしました」っていうエラーが出てビルドが通らない状態です。

10MBぐらいのwavファイルだと普通に通って、18MBぐらいになるとエラーが出ます。
257デフォルトの名無しさん
垢版 |
2019/09/09(月) 13:19:41.05ID:By40c52C
ソース貼れ
2019/09/09(月) 13:27:07.20ID:8EKyQA8Q
企業秘密な秘伝のタレかもしれません
259デフォルトの名無しさん
垢版 |
2019/09/09(月) 13:27:52.11ID:FLVXg6p/
タレこめ
2019/09/09(月) 14:06:32.05ID:QoBVzNSJ
プラグイン本体にバイナリデータ埋めまず、エンドユーザーにはプラグインと音声ファイルを配布
音声ファイルのパスだけうまく帳尻あわせてファイル開いて、メモリ確保して、ファイル読んで、etc
って設計するかな
2019/09/09(月) 15:35:47.49ID:4OXc+RTk
>>256
そのジェネレータとやらがエラー吐いたという話ならスレ違いだろう。
2019/09/09(月) 16:07:02.52ID:aCapJVZa
>>256
その秘伝のジェネレーターとやらがどんなコード吐いてるのか見当もつかないがとりあえず
https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/fatal-error-c1060?view=vs-2019
の対策を片っ端からやればいいんじゃね?
263デフォルトの名無しさん
垢版 |
2019/09/12(木) 12:49:41.16ID:J5GPib5U
スレチのような気もするんですが,ここが一番適切な回答がありそうなんで,質問させて下さい.
iPadでc++のコード(複数のファイルでつくられている)を読みたいんですが便利なビューワーありますか?
関数名やクラス名クリックしたら定義してるところまでジャンプしてくれるようなやつを探してます.
emacsで言うetagsみたいな機能のことです.
2019/09/12(木) 13:17:15.41ID:FruSebPm
「ipad emacs」 でぐぐったら iPad用の emacs そのものがあるようだけど
265263
垢版 |
2019/09/12(木) 13:56:43.03ID:Ng4JTS7f
>>264
後出しですいません.キーボードは使わないのでemacsはないです.あと,iPadのemacsはけっこうがっかりだった記憶が….
タッチでジャンプできると嬉しいのですが….
便利そうなエディタは何個かあるみたいなんですが,ジャンプ機能がないんですよね.
266225
垢版 |
2019/09/17(火) 22:40:09.17ID:iQJ8U52u
以前 >>225 で質問させてもらったものです。
>>230 で書いたようなプログラムを作ってるんですが、
DogやCatだけでループを回したいんですがどうしたら良いですか?
Dogだけの配列とCatだけの配列作ってから、Animalのポインタでそれらの配列を
参照すれば出来るのかなと思ってるんですが、考え方はあってますか?
2019/09/17(火) 22:42:37.60ID:cgXPZZnO
MZうyちゃーーーん♪こんなとこにいたのかw
2019/09/17(火) 22:52:04.49ID:vrvr50SL
>>266
ポリモーフィズムがうまくできていればAnimalのポインタの配列にDogやCatのポインタを突っ込めるはず。
2019/09/17(火) 22:54:48.57ID:cgXPZZnO
>>268
んでサウンドは使えるようになったか?w
270デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:00:14.32ID:iQJ8U52u
>>268
ポインタ突っ込む方法を具体的に教えてくれませんか?
ポインタがよく分からないです…。
2019/09/17(火) 23:04:06.26ID:vrvr50SL
Animal *array[10] = {NULL};
array[0] = new Cat(2, 3);
array[0]->walk();
delete array[0];
2019/09/17(火) 23:08:52.42ID:4Zel//hf
>>270
一旦オブジェクト指向のことは忘れてポインタを先にしっかり学んできた方が近道かもよ。ここで小さなサンプル教えてもらって真似しても近い将来嵌まって行き詰まりそう。
オブジェクト指向の勉強が目的なら他の言語で始めた方が余計なところで躓かないと思う。
2019/09/17(火) 23:08:55.80ID:cgXPZZnO
DIM MZUY(0)
2019/09/17(火) 23:10:14.52ID:cgXPZZnO
>>272
MZうyちゃーーーん♪はBASICで充分w
275デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:12:50.50ID:iQJ8U52u
DogやCatのインスタンスも複数あって、
Dog だけでループとかCatだけでループとかしたいんです。
animalだけでループするなら書いていただいたので良さそうなんですが。
2019/09/17(火) 23:15:14.33ID:vrvr50SL
>>275
目標の設定と要件定義が先
2019/09/17(火) 23:18:18.48ID:f5N3Fp86
目標の設定と要件定義が先だってよ(ゲラゲラ
2019/09/17(火) 23:19:18.73ID:Ps8IF7R/
DogやCatに自身のタイプを返す機能をつけるか、typeidを使ってループをフィルタすればいい
2019/09/17(火) 23:20:21.52ID:vrvr50SL
dynamic_castでダウンキャスト失敗すればNULLが買える。一個800円。
2019/09/17(火) 23:20:27.62ID:f5N3Fp86
それで完成品は100年後か?
281デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:20:52.26ID:iQJ8U52u
初心者スレだし、解答欲しいです。
2019/09/17(火) 23:21:58.70ID:f5N3Fp86
バカのうんちくは回しコピペと同じw
283デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:22:25.46ID:iQJ8U52u
>>278
何言ってるか不明ですがキーワードありがとうございます。
とりあえずググります。
2019/09/17(火) 23:23:03.14ID:Ps8IF7R/
for(auto a : animals){
if(typeid(a) == typeid(Dog*){
}
}
2019/09/17(火) 23:23:37.07ID:f5N3Fp86









2019/09/17(火) 23:24:00.17ID:vrvr50SL
dynamic_cast<Cat>(array[0]) == NULLだったらarray[0]はネコではない
2019/09/17(火) 23:24:31.61ID:f5N3Fp86
          || ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄||
          ||. =ねらー三原則=  ||
          || 1.助けない      ||
          || 2.教えない 。    ∧_∧  いいですね。
          || 3.関わらない\ (゚Д゚,,)
          ||________⊂⊂ |
  ∧ ∧    ∧ ∧    ∧ ∧    | ̄ ̄ ̄ ̄|
  (  ∧ ∧ (   ∧ ∧ (  ∧ ∧ |      |
〜(_(  ∧ ∧ __(  ∧ ∧__(   ∧ ∧ ̄ ̄ ̄
  〜(_(  ∧ ∧_(  ∧ ∧_(   ∧ ∧  は〜い、先生。
    〜(_(   ,,)〜(_(   ,,)〜(_(   ,,)
      〜(___ノ  〜(___ノ   〜(___ノ
2019/09/17(火) 23:24:40.10ID:vrvr50SL
dynamic_cast<Cat*>(array[0]) == NULLだったらarray[0]はネコではない
289デフォルトの名無しさん
垢版 |
2019/09/17(火) 23:27:47.60ID:iQJ8U52u
>>284
理解しました。
そのif文つかうとOpenMP使うときにロードが均等に分散されないので、
dogだけの配列欲しいですね。
2019/09/17(火) 23:41:03.11ID:4Zel//hf
>>289
それなら条件に該当するエントリのポインタを抜き出した配列を作ってループすればいいんじゃないか?
ループ内の処理が並列化する価値があるくらいコストかかるなら、ポインタを抽出してコピーするコストは無視できるかと思われる。
291デフォルトの名無しさん
垢版 |
2019/09/18(水) 00:08:00.90ID:yNiXaOMn
>>290
ありがとうございます。
それやってみます。
292デフォルトの名無しさん
垢版 |
2019/09/18(水) 12:06:57.92ID:L8SHYgAR
>>266
C#スレでマルチしてないかお前
293デフォルトの名無しさん
垢版 |
2019/09/18(水) 20:26:23.65ID:yNiXaOMn
>>292
してないやでー
2019/09/22(日) 11:43:54.30ID:LQCFANDg
> Animal *array[10] = {NULL};

20年以上前に配列要素を一つ以上書かないといけない処理系があったな
タイムスリップでもしてきたか
295デフォルトの名無しさん
垢版 |
2019/09/22(日) 11:53:00.80ID:y42gsAly
Animal *array[10] = {p0, p1, p2};
だとすると
array[0] 〜 array[2] は p0〜p2 になるが
array[3] 以降は全部 NULL で FA?
2019/09/22(日) 16:44:01.11ID:dRs63Jnx
>>295
引数の無いコンストラクター呼ばれる
297デフォルトの名無しさん
垢版 |
2019/09/22(日) 16:45:05.27ID:zrmuC8G0
char *array[10] = {p0, p1, p2};
だとすると
array[0] 〜 array[2] は p0〜p2 になるが
array[3] 以降は全部 NULL で FA?
2019/09/22(日) 17:27:15.07ID:kTa1SMwh
>>296
ポインタだぞ?
2019/09/22(日) 18:52:04.08ID:9/tlWbjv
>>294
Cだと今でもダメだから、それ見たんじゃないの?
2019/09/22(日) 19:39:28.11ID:KmeF3kAh
>>298
ポンタってローソンのカード?
2019/10/01(火) 17:46:09.39ID:yQHk6Pyq
Windows の普通のソフトのインストーラは Program Files 以下に適当なフォルダを作ってそこにファイルをまとめて入れるけど、
コマンドラインアプリの場合ってどうしてる?
GUI アプリと同じようにフォルダに突っ込んで環境変数 PATH を設定するってのが標準的なやり方だと思うけど、
そういうのが増えてくると PATH が長大になって嫌な感じなので、なんかうまい方法ってないもんかな?

C/C++ とは直接の関係がなくてスマソ。 どのスレがベストかわからんかったもんで。
2019/10/01(火) 19:01:46.51ID:HsilaFth
環境変数なんて入れずに叩くときにフルパス入れりゃいいだけでは?
2019/10/01(火) 19:48:41.05ID:yQHk6Pyq
>>302
フルパスを前提にすると連携しづらい場合が出てくるんよ。
「このバッチファイルを実行するにはこのソフトとこのソフトを入れてね!」
みたいなことをやろうとすると、想定してたのと違うフォルダにインストールしてるだけで破綻してしまう。

32bit のアプリケーションって 32bit 版の Windows だと Program Files に入るけど
64bit 版の Windows だと Program Files (x86) 入るようにするのが基本的な作法じゃん?

それだけでも違ってしまうけど
システムドライブとは違うドライブにアプリケーションをインストールしたりする運用をやってる人は意外にいるので、
インストール先を選択させずに固定するってのも縛りが強いかなぁと思うし。

どこにインストールしてでも同じように使えるようにするには PATH くらいしか選択肢がなくなる。
でも嫌。 っていう話。
2019/10/01(火) 20:00:47.20ID:gawiB1ps
20年以上前からある問題だな
Windowsではその辺は未だにグダグダだと認識している
2019/10/01(火) 22:13:00.30ID:sghBprd5
>>303
設定でその外部アプリへのパス指定できるようにすれば?
インストール先固定、環境変数追加、レジストリ追加よりユーザーに指定させるほうが個人的には好き
というかこの三種のような方法をとるアプリはそもそもインストールを躊躇する
2019/10/01(火) 23:27:11.07ID:D6lr/hhZ
コマンドラインアプリでコンソールから起動 バッチファイルから呼び出し etc
実行ファイルの検索順位に依存しまくるからにゃぁ
2019/10/01(火) 23:54:08.52ID:yQHk6Pyq
app paths をコマンドラインでも適用してくれよって思ってる。
308デフォルトの名無しさん
垢版 |
2019/10/02(水) 12:47:26.92ID:55+aQRnY
>>301 >>303
C:\bin
309デフォルトの名無しさん
垢版 |
2019/10/02(水) 12:49:56.03ID:55+aQRnY
> 32bit のアプリケーションって 32bit 版の Windows だと Program Files に入るけど
> 64bit 版の Windows だと Program Files (x86) 入るようにするのが基本的な作法じゃん?

> それだけでも違ってしまうけど

違わない
32bitアプリケーションからは
Program Filesしか見えない
実際はProgram Files (x86)をアクセスしてる訳だが
そんなことは32bitアプリケーション側は知らなくて良いし知らない方が良い
310デフォルトの名無しさん
垢版 |
2019/10/16(水) 18:22:59.77ID:imXCztCz
class A{
public:
B b
}

class B{

}

の時、Aのコンストラクタなどで b = new B; とすると、
このbはAのクラス内で使えますが、Aのデストラクタが走る時に、
bも一緒に消えるのでしょうか。
それとも別途に delete b が必要なのでしょうか。
2019/10/16(水) 18:24:40.90ID:uv22jov9
Aのデストラクタにdelete bを書く
312デフォルトの名無しさん
垢版 |
2019/10/16(水) 18:27:03.37ID:imXCztCz
一緒に消えないのですか。どうもありがとうございました。
2019/10/16(水) 18:36:34.82ID:d1R3XcHH
>>310-312
A のコンストラクタ内で例外が送出されると delete b が実行されない可能性があるのでなるべくならスマートポインタを使うのが望ましいし楽。
2019/10/16(水) 18:43:49.83ID:6mvmnwRf
B b; と定義したなら、b = new B;が不要で、Aのデストラクタ実行時にbも一緒に消える。
B* b; と定義したなら >>311 だが、わざわざポインタで定義するのは
コピーコンストラクタ等々自前で定義しなきゃならんのでお勧めしない。
スマポならAのデストラクタ実行時にbも一緒に消えるけど、
shared_ptrはコピー時に共有されてしまうし、unique_ptrはコピーできなくなる。
315310
垢版 |
2019/10/16(水) 18:53:13.17ID:imXCztCz
なるほど。B* bで書いたつもりが間違ってました。
しかしA内でbを使い回すなら、B b の方が良さそうですね。
どうもありがとうございました。
2019/10/22(火) 20:10:13.74ID:+0Lq2R8m
C++相談室 part145
https://mevius.5ch.net/test/read.cgi/tech/1568362404/
から移住しました。
YappyCamという録画ソフトを作っています。
https://github.com/katahiromz/YappyCam
よろしくお願いします。
2019/10/23(水) 00:02:04.30ID:FSIo0WLO
多分スレチな話題だけど
高速化目的で固定小数点数クラス作って満足してた所に、コンパイラの設定で浮動小数点モデルをfastにしたら何倍も速度差つけられたんだが
どういう原理でそうなるのかわからない 調べても中々資料出てこないし
誰か教えて下しい
2019/10/23(水) 01:44:13.82ID:GER+FSVM
>>317
現代では浮動小数点はハードウェア (CPU) のサポートがあるので丸め方の一貫性とか捨ててめいっぱいに CPU の機能を利用したら速いよ。
2019/10/23(水) 02:19:12.55ID:DFr4VJRt
昔、インテルの一部のCPUにfloating pointの処理に不具合があって、それで高い精度が求められるプログラムでは、ソフトで対応できるようなコンパイラが作られたらしい(要出展?)。
2019/10/23(水) 02:24:10.56ID:DFr4VJRt
これだ。
https://ja.m.wikipedia.org/wiki/Pentium_FDIV_%E3%83%90%E3%82%B0
2019/10/23(水) 07:13:23.64ID:chxy1JWV
ARMのEABIとは逆方向の流れだな
2019/10/23(水) 09:00:32.48ID:FSIo0WLO
>>318-320
thx!
2019/10/23(水) 12:36:36.18ID:bxABcYeD
記憶媒体の性能を計測してみた。
https://github.com/katahiromz/YappyCam/blob/master/tests/diskrate/diskrate.cpp
SSDでデータを取得。
https://twitter.com/katahiromz/status/1186558848393285633
HDDでデータ取得。
https://twitter.com/katahiromz/status/1186848186737905664
https://twitter.com/5chan_nel (5ch newer account)
2019/10/23(水) 13:01:09.43ID:bxABcYeD
SSDは早い。400MB/sec近い。
HDDは遅い。100MB/secくらい。
音声に加えて画像も出力することを考慮すると、音声出力の実際の性能は50MB/sec以下だろう。
音声を最高の品質にすると、10msecごとに音声データがおよそ3900バイトあるようだ。1秒では390000バイト、390KB/secになる。余裕のよっちゃんだ。
2019/10/23(水) 13:08:27.27ID:DFr4VJRt
記憶媒体やOSはときどきフリーズすることがある。0.5秒フリーズしても耐えられるようにするには、390KB*0.5==195KB。
少なくともこれだけのバッファが必要になる。余裕を持って事前にリングバッファ400KBを用意することにする。
2019/10/23(水) 13:12:48.38ID:DFr4VJRt
一度にファイルに書き込むデータは100KBにする。このデータ量は小さすぎても性能が下がるし、大きすぎると流れが止まってしまう。
2019/10/23(水) 13:25:45.62ID:bxABcYeD
アプリ起動時に音声消費スレッドを起動する。イベントハンドルで音声データが車で待つ。イベントが来たら、音声データを少しずつファイルに吐き出して、消費する。全部消費したら再びイベントを待つ。これの繰り返し。
2019/10/23(水) 13:37:23.16ID:bxABcYeD
(間違いがあったら指摘してね、よろぴく)
329デフォルトの名無しさん
垢版 |
2019/10/23(水) 14:54:53.56ID:JzA6/vMp
引っ越したんなら質問も引っ越せよ
2019/10/23(水) 15:27:52.17ID:dG0kuu8/
>>328
ここはお前のメモ帳ではなく掲示板だ
2019/10/24(木) 20:49:36.30ID:hL+vNXS/
長く録画してると、画像と音声のタイミングがずれる。
WM_TIMERのせいか?
2019/10/24(木) 21:21:54.34ID:ZzyW2UAB
WM_TIMERの精度が低いから音ずれが起きている。
QPCと別スレッドで書き直し。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況