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

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

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

前スレ
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/
2デフォルトの名無しさん
垢版 |
2020/07/13(月) 13:53:44.41ID:WBkWHxcT
C言語を256倍使うための本
ttps://www.%61mazon.co.jp/dp/4756100430
詳説 C++ 第2版
ttps://www.%61mazon.co.jp/dp/479732743X
2020/07/13(月) 14:08:11.33ID:p1lvDPnd
C++20
https://ja.cppreference.com/w/cpp/compiler_support
https://ja.cppreference.com/

http://www.open-std.org/
https://www.slideshare.net/KMC_JP/ss-45855264
https://ja.wikipedia.org/wiki/%E5%80%8D%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
https://ja.wikipedia.org/wiki/%E8%AA%A4%E5%B7%AE#%E8%A8%88%E7%AE%97%E8%AA%A4%E5%B7%AE%E3%81%AE%E7%A8%AE%E9%A1%9E
2020/07/13(月) 14:09:20.92ID:p1lvDPnd
禿
https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%A3%E3%83%BC%E3%83%8D%E3%83%BB%E3%82%B9%E3%83%88%E3%83%AD%E3%83%B4%E3%82%B9%E3%83%88%E3%83%AB%E3%83%83%E3%83%97
https://ezoeryou.github.io/cpp-intro/
https://ezoeryou.github.io/cpp17book/
https://ezoeryou.github.io/cpp14-appendix/
https://ezoeryou.github.io/cpp-book/C++11-Syntax-and-Feature.xhtml
2020/07/13(月) 14:14:23.03ID:+mCuetAH
https://boostjp.github.io/
https://cpprefjp.github.io/
2020/07/13(月) 14:17:35.80ID:+mCuetAH
Qt
https://www.qt.io/
https://www.slideshare.net/seanchas_t/qt-cpp-26692727
wxWidgets
https://www.wxwidgets.org/
https://github.com/wxWidgets
Tcl/Tk
http://www.tcl.tk/
2020/07/13(月) 16:28:13.78ID:srh9sya6
メンバに自クラスの配列を持つクラスのメンバ配列の初期化はc++ではどうやりますか?Javaでは下のように出来てます。

☆Javaでこうなっています
class A {
protected A[] node = new A[3];
}

☆c++でこうしたらエラーになりました。
@a.hpp
class A {
public:
static A node[];
};

@a.cpp
#include "a.hpp"
A A::node[] = new A[3];

ちなみに型Aを適当にintとかにしたらc++の方もいけました。
2020/07/13(月) 16:38:40.16ID:ny9O75E1
>>7
nodeは静的メンバ変数でいいの?
java同様、staticはすべてのクラスインスタンスで共通の変数って意味だけど。
2020/07/13(月) 16:41:24.41ID:srh9sya6
>>8
ダメだとは思ってましたが、つけないと不完全な型名は使用できませんと怒られました。
c++ではメンバに自クラスの変数がいるとダメなのですか?
10デフォルトの名無しさん
垢版 |
2020/07/13(月) 17:07:02.67ID:WBkWHxcT
うまくいく例
class A {
public:
static A *node;
};

A *A::node = new A[3];
2020/07/13(月) 17:22:15.52ID:ny9O75E1
staticにしない例
class A {
public:
A *node;
A();
};

A::A() {
node = new A[3];
}
2020/07/13(月) 17:27:36.45ID:ny9O75E1
あ、ループしちゃった
2020/07/13(月) 17:30:23.80ID:KVdg44rD
>>9
> c++ではメンバに自クラスの変数がいるとダメなのですか?
そりゃだめだよ、もしそんなのができたら
class A {
A a;
int b;
};
A x;
とした時に x.b; x.a.b; x.a.a.b; ... みたいに無限に int b; を作る羽目になるから。
Javaなどは
class A {
A *a;
int b;
};
みたいなのしかできないから問題ないだけ。
2020/07/13(月) 17:33:49.37ID:17o/9bhC
C++のクラス変数とJavaのクラス変数の違い、だっけ。
端的に「C++ではnewなしにクラス変数を宣言して使える」ようにするため。

Javaと対比しながら説明する能力がないんで中途半端で悪いけど。
1514
垢版 |
2020/07/13(月) 19:29:02.10ID:17o/9bhC
× 変数を宣言
○ 変数を定義

中途半端な上に間違っててすまぬ。
あまつさえ細かい訂正のために貴重な投稿枠の浪費までも。
2020/07/14(火) 08:27:52.03ID:bhhAeN2N
>>14
クラス変数の問題ではなく、クラスのメンバとして配列を宣言した場合にC++では配列の実体をメンバとして持つのに対し、Javaでは配列の実体は別のところに作られて参照だけを持つというところでないの?
2020/07/14(火) 08:30:26.07ID:5kZc9hZE
7の人です
みなさんありがとうございます
別のやり方考えます
2020/07/14(火) 09:28:38.75ID:PHX4w74f
>>16
配列は関係ない
C++はクラス型のクラス変数を定義すると実体を持つから自分自身を定義できないってだけ
JavaやC#は実体じゃなくてポインタを持つだけだから問題ないってこと
19デフォルトの名無しさん
垢版 |
2020/07/14(火) 12:52:08.42ID:Mma3I+br
C/C++ はヌルポを敢えて使う
2020/07/14(火) 20:49:37.52ID:M3PBKw+D
>>19
確かに仮想関数じゃなかったら普通に this に 0 を入れてもコールできますね…
https://ideone.com/C6Hkwy
2020/07/14(火) 23:49:13.61ID:PYLNqhFb
未定義動作
2020/07/15(水) 01:04:37.36ID:hr2ndtrb
>>20
わかりやすく変な挙動に突入する例。
https://wandbox.org/permlink/Olp5JUR1pg4MxBMd
23デフォルトの名無しさん
垢版 |
2020/07/15(水) 12:07:21.21ID:cL9c5hZ8
enum {hoge, fuga, hage};

hoge==0
fuga==1
hage==2
として使えるとして
0,1,2とかの数字から実行時にhoge,fuga,hageの名前を知りたい時って
何か便利なインターフェースありますか?
みんな毎回線形探索のコード描くみたいにやってる?
2020/07/15(水) 12:39:32.75ID:fkxllX2L
>>23
連番なら配列に入れときゃいい
番号飛んでいて…
・件数少ないなら線形サーチ
・件数多いならハッシュとかバイナリサーチとか
2020/07/15(水) 12:50:24.76ID:Gd6Zo+Db
>>23
VSだったらデバッガで名前表示されるけど
あれ列挙に名前までつけた時だけだっけな
26デフォルトの名無しさん
垢版 |
2020/07/15(水) 13:02:12.66ID:cL9c5hZ8
連番じゃないときとか
結構でかい番号だったりするときは困りますね
27デフォルトの名無しさん
垢版 |
2020/07/15(水) 13:08:43.15ID:ONqo+DKP
##演算子でどうにかなるんじゃね
28デフォルトの名無しさん
垢版 |
2020/07/15(水) 13:14:49.36ID:jM1x+GOc
IT掲示板群 ttp://x0000.net/forum.aspx?id=15

学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン(画像有り)
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0

☆ VMを書いた(C#) * x86ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
29デフォルトの名無しさん
垢版 |
2020/07/15(水) 13:38:14.90ID:cL9c5hZ8
線形探索するにしても enum 用に foreach もあるのかなと思ったのですが
http://sanichi999.hateblo.jp/entry/2014/12/19/011820
こんな感じですね
名前とか同じことを何度も書いてる気がしてしまうのと
割と定型な気がするのでコンパイラが提供してくれてないかなと思ったで質問しました
2020/07/15(水) 15:30:19.58ID:hr2ndtrb
実行時に列挙定数の名前の文字列が欲しいことがそんなにあるかな?
デバッグプリント用途くらいしか思いつかんのだけど。
2020/07/15(水) 16:14:13.34ID:LgiIyt9Z
vector<int> a = {8, 1, 9, 5, 7, 3};
があるときに例えば
vector<int> b = a{0, 2, 5};
とかしたら
b が {8, 9, 3} の配列みたいになってくれる書き方ってありますか?
2020/07/15(水) 16:43:08.71ID:stUpixMt
vector<int> b = {a[0], a[2], a[5]};
2020/07/15(水) 20:59:08.41ID:hr2ndtrb
>>31
そういう関数を書けばええだけちゃうの

https://wandbox.org/permlink/qzItmLsbnO6HlTqs
2020/07/15(水) 23:08:06.76ID:4eO2mC8f
>>31 for(int& e: b) e = a[e];
2020/07/16(木) 12:17:49.42ID:rBscjMJk
>>23
msvc/clangのc++17限定でよければ、nameof c++というライブラリがある。
2020/07/16(木) 12:58:54.15ID:Bj5j4Y6i
>>33
https://ideone.com/x0lKkD

for(auto t: {indices...}) std::cout << source[t] << std::endl;
だと動くのですが
for(T t: {indices...}) std::cout << source[t] << std::endl;
だとエラーになります
どうして?
2020/07/16(木) 13:49:08.52ID:MICl0UeU
>>36
エラーメッセージを見ればわかるやろ。
T はパラーメーターパックであって、展開せずに使うということはできへんのや……。
2020/07/16(木) 15:12:49.52ID:sYAaUXpT
>>36
memo
https://ideone.com/DZFPxq
https://theolizer.com/cpp-school2/cpp-school2-16/
2020/07/17(金) 13:55:06.86ID:xXsIieN6
テンプレートが型付マクロにしかみえません
眼科に行った方が良いですか?
2020/07/17(金) 14:44:53.44ID:p55TjBUs
型付であることこそ重要です
2020/07/17(金) 17:27:51.73ID:LIcKojh8
マクロといってのcのマクロではなくlispのマクロ的な機能
まあコンパイル時の制限はあるけど
42デフォルトの名無しさん
垢版 |
2020/07/18(土) 01:05:56.87ID:vSXqjqjP
Win32APIでコンボボックスの値をオーナードローしているんですが、wchar_tで項目追加すると文字の描画ができるんですが、
c_str()だと文字化けします。何故ですか?

・WM_INITDIALOG
 文字化けしないケース
  const wchar_t *a = L"あいうえお";
  SendMessage(hForeColor, CB_ADDSTRING, 0, LPARAM(a));

 文字化けするケース
  std::wstring b = L"あいうえお";
  SendMessage(hForeColor, CB_ADDSTRING, 0, LPARAM(b.c_str()));

・WM_DRAWITEM
 DrawText(lpDraw->hDC, (wchar_t*)lpDraw->itemData, -1, &r2, DT_LEFT | DT_VCENTER | DT_SINGLELINE);
2020/07/18(土) 01:43:29.19ID:2xoJksuz
表示する時にはbが解放されてるんじゃないの?
2020/07/18(土) 02:35:10.07ID:IdAxqtyn
オーナードローの時、CBS_HASSTRINGSスタイル指定しないと、そんな感じになるっぽいね
CB_ADDSTRINGメッセージに書いてあるね
45デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:25:54.56ID:94poIsAY
1つの言語をある程度やりこまないと能力値がリセットされますか?
46デフォルトの名無しさん
垢版 |
2020/07/18(土) 13:38:50.50ID:uRU3MGLx
理解する能力と
使いこなす能力と
創造する能力は
全部別
47デフォルトの名無しさん
垢版 |
2020/07/18(土) 15:42:57.82ID:94poIsAY
理解力のことです
ごめんなさい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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