X



スレを勃てるまでもないC/C++の質問はここで 25 [隔離病棟]©2ch.net
0001 みんな空気読め©2ch.net
垢版 |
2016/08/14(日) 00:04:05.53ID:z6U1tRVC
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
01 http://pc11.2ch.net/test/read.cgi/tech/1167476845/
02 http://pc11.2ch.net/test/read.cgi/tech/1178503366/
03 http://pc11.2ch.net/test/read.cgi/tech/1187521676/
04 http://pc11.2ch.net/test/read.cgi/tech/1221633708/
05 http://pc11.2ch.net/test/read.cgi/tech/1230516307/
06 http://pc11.2ch.net/test/read.cgi/tech/1231564903/
07 http://pc11.2ch.net/test/read.cgi/tech/1232983248/
08 http://pc12.2ch.net/test/read.cgi/tech/1235921779/
09 http://pc12.2ch.net/test/read.cgi/tech/1240022781/
10 http://pc12.2ch.net/test/read.cgi/tech/1242300936/
11 http://pc12.2ch.net/test/read.cgi/tech/1245059383/
12 http://pc12.2ch.net/test/read.cgi/tech/1248010352/
13 http://pc12.2ch.net/test/read.cgi/tech/1260842197/
14 http://pc12.2ch.net/test/read.cgi/tech/1269273471/
15 http://pc12.2ch.net/test/read.cgi/tech/1273368706/
16 http://hibari.2ch.net/test/read.cgi/tech/1279285647/
17 http://hibari.2ch.net/test/read.cgi/tech/1285115590/
18 http://hibari.2ch.net/test/read.cgi/tech/1291571263/
19 http://hibari.2ch.net/test/read.cgi/tech/1308106024/
20 http://toro.2ch.net/test/read.cgi/tech/1316013463/
21 http://toro.2ch.net/test/read.cgi/tech/1342285511/
22 http://peace.2ch.net/test/read.cgi/tech/1399911167/
23 http://peace.2ch.net/test/read.cgi/tech/1420379468/
24 http://echo.2ch.net/test/read.cgi/tech/1448685034/
0101 ◆QZaw55cn4c
垢版 |
2017/05/06(土) 15:50:22.00ID:ZHaoNFoL
木構造のループですか‥やってできないことはないだろうけれどもめんどくさいね goto の連発だね
010297
垢版 |
2017/05/06(土) 16:02:38.76ID:3nLTZXlU
遅くなったけどideone用に書き換えたコードがこれです
http://ideone.com/nJqdHZ
やりたいことは単に階層構造のテキストデータを読み取って、置換したり変形することです。

Visual StudioでDebugビルドしたものを実行すると、id: 248 とか表示されるあたりでスタックオーバーフローが起きて停止します。
ちょっと調べたところだと再帰→ループへの展開は定番みたいですね。
そっちの方向で考えてみたいと思います。どうもありがとうございます。

(…でも、250程度の数の階層くらい頭を使わずに書いたコードでも動いてくれという気がスル)
0107デフォルトの名無しさん
垢版 |
2017/05/09(火) 04:51:17.39ID:CfLPAbNS
C.C++で初めて作ったのってみんな何?
0109デフォルトの名無しさん
垢版 |
2017/05/09(火) 13:14:48.03ID:ZO11Ha1i
>>105
gcc7.1.0だとdeleteがループ処理になってるな

Clang4.0.0でも同じ

VC2017でもスタックサイズ変更なしで行けた
0110デフォルトの名無しさん
垢版 |
2017/05/11(木) 17:34:15.21ID:9hjkljzx
ああ、独り言だしスレ違いだからスルーして。でも、どうしても言いたいし、雑談スレもないから
ここに書かせて。。

俺はC/C++が大好きなんだけど、GtkとかQtとか大好きなんだけど、Pythonが両方バインドしてるから
使ってみたんだけど、import文がある言語(Java、D言語、Python)って脳の向きと逆向きに設計されてね?

すげえ、違和感あって、使ってるとキモくなってくる。その点、include文はいいわ・・。大好き。
0112デフォルトの名無しさん
垢版 |
2017/05/11(木) 19:46:38.79ID:9hjkljzx
クラスの構造とかどうしても合わんわ。。あと、普通に文書いてても違和感感じるw
0113デフォルトの名無しさん
垢版 |
2017/05/11(木) 20:44:47.50ID:r6M771XX
>>110
前方宣言自動でやってくれてるって思えば他はCと変わらない気がするけど。
どの辺が違うん?
0115デフォルトの名無しさん
垢版 |
2017/05/11(木) 23:24:48.41ID:1a/5L+8A
javaは知らないがCは制約ある
正確にはファイル名じゃなくてincludeで指定する文字列だけど
0119デフォルトの名無しさん
垢版 |
2017/05/12(金) 12:06:01.20ID:OCYL1E3A
>>114
Javaは何だっけ。。。
publicだかmainのあるクラスと同じファイル名じゃないととか、importの階層と同じだけフォルダ掘らないととかあった希ガス。
0120デフォルトの名無しさん
垢版 |
2017/05/12(金) 13:40:23.46ID:FoBe9UZW
C++から3年ほど遠ざかっていた俺に最近のC++の何か凄いテクニックを教えてくれ。
0121デフォルトの名無しさん
垢版 |
2017/05/12(金) 13:51:20.92ID:YITQwMx2
c++1zで使えるようになるvariantとかどうかね
(記述の見掛け上という意味で)継承を使わず 多態を実現できる
現状はboostでお試し可能
0123デフォルトの名無しさん
垢版 |
2017/05/12(金) 19:18:49.01ID:fokGnnSL
>>118
vcがそう実装してるだけで、他の処理系も同じようにエラーがでない保証はない
最低限のラインは、8文字+「.」+1文字で英数字のみ、ただし先頭は英字のみ、大文字小文字を区別する保証なし
規格上、inludeの文字列とファイル名が一致するかも定かでないから、気にしても無駄だけど
0126デフォルトの名無しさん
垢版 |
2017/05/13(土) 07:23:06.14ID:bjLbBbns
ファイル名に制約という提起で
まさかファイル名や#includeに使えない文字の話になるとは思ってなかった
0128デフォルトの名無しさん
垢版 |
2017/05/14(日) 16:50:22.30ID:gwLsZ5pp
あるアルゴリズムをメソッドとして実装したクラスがあって、
そのアルゴの中で20個くらいの定数を用いる。
そのアルゴリズムの亜種をサブクラスとして作りたいが、その亜種の中では定数の値を親クラスの値とは違う値にしたい。

こういう時、定数群はどうやって定義するのがいいでしょうか。
メンバ変数として全部const intで持っておいて、
コンストラクタの初期化の文法で各クラス固有の値を入れればいいでしょうか。
できれば外部ファイルにjasonとかで持たせられないかとも思ってもいますが、それだとコンストラクタ内のconst intの初期化より先には読み込めないですよね。
浅学で恐縮です。よろしくお願いします。
0129デフォルトの名無しさん
垢版 |
2017/05/14(日) 16:59:28.84ID:C90eDFbL
亜種が定数が違うだけならコンストラクタでええんでない?
アルゴリズムも似てるだけで少し違うとかなら使えんかも知らんけど
0130デフォルトの名無しさん
垢版 |
2017/05/14(日) 17:42:51.46ID:abQtpPi4
>>128
定数ではなくメンバ変数でいいじゃないの?
外部から変更されたくないなら読み取りプロパティにすればよいし
亜種はサブクラスのインスタンス作成時にファイルを読み込むようにして
親クラスのメンバ変数を上書きするようにする。
0131デフォルトの名無しさん
垢版 |
2017/05/19(金) 19:46:36.77ID:BDF1+v1a
コピーコンストラクタのところでエラーがでます。
>オブジェクトにメンバー 関数 "A::getFileName" と互換性のない型修飾子があります
>C2662 'const std::string &A::getFileName(void)': 'const A' から 'A &' へ 'this' ポインターを変換できません。
どう直せばいいのですか?


class A {
public:
 A() {}
 A(const A &a) {
  this->setFileName(a.getFileName());  //ここでエラー
 }
 void setFileName(const std::string& fn) {
  this->m_fileName = fn;
 }
 const std::string& getFileName() {
  return this->m_fileName;
 }
private:
 std::string m_fileName;
};
0132デフォルトの名無しさん
垢版 |
2017/05/19(金) 20:33:23.63ID:iLAnMNZa
linux mint18 32bit
python3をF5で実行できるエディターは無いでしょうか?
Geany 1.27ではpython2.7なので、python3.5を使用したいと思ってます

PC自体にはpytho3.5と2.7が入ってます
0136デフォルトの名無しさん
垢版 |
2017/05/25(木) 22:25:27.96ID:QzzPv//a
クラスのメンバ関数のポインタはすべてのインスタンスに共通で
例えばvectorに自作クラスを入れといてあとから要素の挿入・削除をして
インスタンスのメモリ上の位置が変わっても関数のポインタは変わらない
って理解であってますか?
0137デフォルトの名無しさん
垢版 |
2017/05/25(木) 23:22:02.15ID:WUcUkfwI
はい
関数の配置アドレスが実行時に変わるなんてことは起きないので

ちなみに同じインスタンスなのにメモリ上の位置が変わるなんてこともないと思うが
0138デフォルトの名無しさん
垢版 |
2017/05/28(日) 16:14:14.69ID:yvANlV24
Eigenに
operator*
でなくて逆向きかけ算の関数rdotを追加したい
つまり
some_object * eigen_matrix
するために
Eigen::EigenBase<Derived>::rdot
を追加して
eigen_matrix.rdot(some_object);
で計算できるようにしたい

しかし
no member function declared in class
というエラーになる

どうやったら後付けでmember function追加できるんだ?
Eigenの中はいじりたくない
0141デフォルトの名無しさん
垢版 |
2017/06/01(木) 07:42:47.62ID:SDX804Eo
Eigen3の実装みてるんだけど

class Matrix{
operator * const ...
}

でほとんどの関数がconstで統一されてるのに
transposeだけconstついたのと,ついてないの2つあるのは何故?
0142デフォルトの名無しさん
垢版 |
2017/06/01(木) 10:34:56.04ID:tub0QHg4
そのほうが便利だ(と作者が思った)からだろう
const版
返されたtransposeはconstで変更不能
非const版
返されたtransposeは変更可能
変更すると間接的に元のmatrixも変更される
0143デフォルトの名無しさん
垢版 |
2017/06/02(金) 21:10:48.66ID:hdQ1KfrD
プログラミング言語C++第4版の本を今頑張って読んでいます。
その中で、サンプルコードは著者のサイトでとURLが乗っているのですが、
これがトップページのURLしか書いてなくてどこからダウンロードできるかわからない状態です。
いろいろ調べたら、グーグルコードのサイトに飛ぶ場所を見かけたのでDLできるかと思いましたが、
グーグルコードは去年の一月には廃止されていて、ダウンロードができない状態です。
ほかにサンプルコードダウンロードできるような場所はあるのでしょうか。
色々と探しても同じような人は見当たりませんし、困っています。
どなたかご存知の方いらっしゃらないでしょうか。
0145デフォルトの名無しさん
垢版 |
2017/06/03(土) 13:03:58.47ID:7x/augC4
>>144さん
返信ありがとうございます。
ダウンロードばかり気にしていたのかソースというところに気が付きませんでした。お恥ずかしい。
普通にダウンロードできまして、ソースも確認できました。
testingのソースコードが本に書いてあるコードと大体同じように書かれてたのでこれだと思います。
ただ、入門書ってわけじゃないからなのか、洋書だからなのかわかりませんが、
本で書かれているコードだいぶ端折っているなっていう感じなので、正確にこのサンプルで問題ないのかがわからないです。
0146デフォルトの名無しさん
垢版 |
2017/06/03(土) 13:12:54.00ID:7x/augC4
143,145です。
すいません。145はなんか途中で書き込みをしてしまいました。
話を戻しまして、
でも、問題ないかがわからないのは、本もまだほとんど読めてないのと、C++も入門書を一回軽く読んだ程度の知識しかないので、わからないだけだと思いますので
本(サンプルも)を参考に自分でソースコードを記述していきたいと思います。
>>144さんのおかげで、ソースも手に入り、教えてもらったことで、モチベーションもあがりました(^^♪)
次に進めそうです。本当にありがとうございました。
0147デフォルトの名無しさん
垢版 |
2017/06/09(金) 00:20:22.42ID:8CSNtvHv
他の言語結構熟練してたらべつだけど、
cプラにほとんど慣れてない状態で
この本を読んでも効率わるいだけとおもうがねぇ。
0150デフォルトの名無しさん
垢版 |
2017/08/08(火) 00:05:19.81ID:O9M7bV7S
C言語の関数ポインタというものは関数ポインタとして作られたのか通常のポインタの改良なのかどちらなのでしょうか?
関数ポインタの引数の仕組みがよく分からなかったので質問してみました
よろしくお願いします
0151デフォルトの名無しさん
垢版 |
2017/08/08(火) 00:42:15.53ID:m8GLf68F
言ってる意味が良くわからないが
ポインタの性質は「型」で決まる
あるデータをどのように見なすか
それだけ
32bitだか64bitだかのデータを、文法上どう見なすかってだけ
関数ポインタの場合は関数のエントリーポイントと見なす
引数の数や種類や呼び出し方などは、型が知っている
型に基づいて呼び出すだけ
0152デフォルトの名無しさん
垢版 |
2017/08/08(火) 02:23:09.82ID:SgAIOr6T
>>150
極論言えば、配列のポインタも関数のポインタもただのポインタ。
対象が配列だから配列的にも振る舞える。
関数だから関数的にも振る舞える。
ただそれだけやね。
型は配列的とか関数的とかに振る舞う時のルール引数得るのに何回スタックからpushするかとかを教えるヒントにすぎない。
この辺はアセンブラ知ってると理解しやすいかもね。
0153デフォルトの名無しさん
垢版 |
2017/08/08(火) 02:24:25.91ID:SgAIOr6T
あ、スタック「から」だとpopやった。。。
0154デフォルトの名無しさん
垢版 |
2017/08/08(火) 22:52:38.23ID:O9M7bV7S
変数のポインタはint *i;でアドレスだけを保持していて
関数ポインタはint (*func)(int i);でアドレスと引数リストを保持しているように思えます
引数が必要なのは分かりますが(int i)を勝手に付け足しても良いものなのかなと思いまして
0155デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:34:37.02ID:fmd6E2St
>>154
関数ポインタは、関数を指すポインタという意味。
引数リストは保持していないが、関数ポインタがポイントしている関数のプロトタイプは
コンパイラなら知ってるかもしれない
0156デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:44:08.72ID:nf4ZHvzc
>>154
何したくて何ききたいのかさっぱりだな
アドレスだけ見せられても、それが変数のアドレスなのか、関数のアドレスなのか、変数なら型は何なのか、関数なら引数あるのかないのか、あるならその型は・・・
アドレスだけじゃ解決できないよ
0157デフォルトの名無しさん
垢版 |
2017/08/08(火) 23:55:54.36ID:rlbWG25h
>>154
住所だけ渡されても実際に行ってみたらわかるのと一緒で
ポインタはあくまでアドレスを格納してる

民家なのか病院なのか学校なのかは重要ではない
住所・アドレスの示す先にある情報を利用するだけ
0158デフォルトの名無しさん
垢版 |
2017/08/09(水) 00:47:51.09ID:hEgnFYnk
int *p;が逆参照したときにintとして扱えるように
int (*p)[10];が逆参照したときに配列として扱えるように
(君の言い分だと↑も[10]を勝手に付け足しているように見えるのかもしれないが)
型というものがあって、コンパイラは型を知っているから正しくアクセスできる
同じように
void (*p)(int i);としたとき、pはintを引数に取る関数のポインタという「型」になるから
その型をもってしてコンパイラは関数を呼び出せる
そう考えれば(int i)が付くのも当たり前、それが必要だからそういう文法になっている
「アクセスするときに必要となる情報を型として与えているのだよ」
特にCの場合は「そう見なしてくれ」という意味合いが強い
キャストして型を変えれば割とどうとでもなる面白い言語
単なるメモリブロックを配列や構造体と見なしてアクセスしたり
こういうことが出来る言語はあまりないので
低レベルでは未だにC系の言語が重宝されている
0159デフォルトの名無しさん
垢版 |
2017/08/09(水) 00:52:32.88ID:hEgnFYnk
ちなみに
>>157は間違ってるから気にしなくてよいよ
C言語は静的型だから「実際に行かなくても先にあるものが分かる」
というか、先に何があろうが、「型」の示すものがあるものとして扱う
だから、病院の型のポインタに君の家のアドレスを入れたら
君の家に病人が殺到してバグる
キャストしなければそういう代入は出来ないようになっているがな
0160デフォルトの名無しさん
垢版 |
2017/08/09(水) 01:02:42.02ID:hEgnFYnk
逆に、C言語は静的型だから、「実際に行ってみても、それが何であるか分からない」
住所に行ってみても、名札も無ければ看板も無いので、それが何なのか分からない
そういった情報は全部メタ的に「型」にしかない
そして型はコンパイル時のコンパイラしか知らない
コンパイル後のコードには型情報は綺麗さっぱり消えてなくなってる
C言語はデータになんであるかを示す型情報が無い
実行時にデータから型を取得することはできない
なんで、関数ポインタの型にはそれを通して関数を呼び出せるだけの情報が必要
そういうことが出来る文法になってる
0162デフォルトの名無しさん
垢版 |
2017/08/09(水) 01:31:24.27ID:6o6it4hw
ありがとうございます
質問が分かりづらかったようですみませんでした

intとして扱えるポインタの型や配列として扱えるポインタの型、関数として扱えるポインタの型と言うようにポインタにも幾つかの型があるんですね
ようやく皆さんの言っていることが分かりました
他にもどんな型があるのか知りたいのですが、こういったことはどこに書いてあるのでしょうか?
0163デフォルトの名無しさん
垢版 |
2017/08/09(水) 10:28:38.52ID:RdtvDY+v
>>159
あぁ型を除いてあくまで「ポインタ」だけに言及しただけだ
「型に家だの病院だのの情報が含まれている」と言っておけばよかったか
0164デフォルトの名無しさん
垢版 |
2017/08/09(水) 13:08:26.15ID:FEqENNu4
>>162
なんか勘違いしてる。
ポインタはポインタが指す先のデータ型をポインタの型と言ってるだけで、
ポインタに根本的に異なる種類があるわけじゃない。

たまに見る「ポインタはアドレスだ」っていうのはそういう意味だけど、
アドレスという言い方は初心者には分かりやすいかもしれないけど
不正確なので、そういうレスは要注意
0165デフォルトの名無しさん
垢版 |
2017/08/09(水) 17:47:06.00ID:Nvjd+alY
もう面倒だから void *p
0168デフォルトの名無しさん
垢版 |
2017/08/11(金) 12:03:58.06ID:Ca8C76qb
日下部さんだね、一連の馬鹿吊り上げの手法はたいしたものだ
彼にかかると面白いように釣れるんだね
0170デフォルトの名無しさん
垢版 |
2017/08/22(火) 14:42:32.63ID:a5iq0eNT
>>166
++演算子使ったときとか
ヌルポインタとか
0171デフォルトの名無しさん
垢版 |
2017/09/09(土) 17:22:28.03ID:ua/r5C7o
ヌルポはアドレス0を示すポインタと区別が付かない。
ポインタ演算はアドレス計算で間違いないと思うが。
0172デフォルトの名無しさん
垢版 |
2017/09/10(日) 01:13:46.17ID:kRb3fDCd
0を示すものに1を加えたとき、1になって欲しいのがアドレス
そうとは限らないのがポインタ
0173デフォルトの名無しさん
垢版 |
2017/09/10(日) 01:41:24.87ID:ZBmzdD/d
なら、そこまで言うなら
アドレスには型が無い、あっても整数型、intptr_tとか
ポインタには型があって、*や->や()を使って指し示すものにアクセスできる
という大いなる違いがある
アドレスを静的型でラップしたものにポインターという名前を付けた、程度
0177 ◆QZaw55cn4c
垢版 |
2017/09/17(日) 13:05:36.48ID:bgx1+MxI
アドレスとポインタは一緒だとおもうよ,ポインタに型がある,とかいうのはCコンパイラ言語仕様側の都合にすぎないし
アドレスの整数値とポインタの表現する整数値が食い違う例(ただし NULL とか far/near はわかっているから除く:−)ってそんなにないんじゃないの?
0178デフォルトの名無しさん
垢版 |
2017/09/17(日) 14:44:48.15ID:qULdwsa1
アドレスとポインタは違うと思うけどなあ
アドレスは数値そのもの、ポインタはその入れ物
だから「int型のアドレス」とは言わないし、「ポインタ0x12345678番」とは言わないし
0181デフォルトの名無しさん
垢版 |
2017/09/17(日) 15:45:07.67ID:iyMogwhx
>Cコンパイラ言語仕様側の都合にすぎないし

あほだなぁと思うのは、ここで言うポインタというのは
C言語の仕様で定められたポインタのことじゃないのか?
C言語の仕様として「ポインタ」が定められていて
それに関してどうこうって時に
C言語の仕様の都合だから〜とかイミフ
C言語のポインタにC言語の仕様以外の意味なんかないだろ
0184デフォルトの名無しさん
垢版 |
2017/09/17(日) 16:52:30.92ID:nfmsAfUe
>>178の例えだと中身はアドレスってことになるが、ポインタのインクリメントは
アドレスのインクリメントとは違うだろう。
0185デフォルトの名無しさん
垢版 |
2017/09/17(日) 17:01:41.39ID:qULdwsa1
「アドレス0x12345678番をインクリメントする」のだから間違いでは無いと思うよ
ただ数値をいくつ増加させるかはポインタの型(つまり入れ物の型)に依存する
0186デフォルトの名無しさん
垢版 |
2017/09/17(日) 17:24:14.07ID:nfmsAfUe
だからそれがポインタのインクリメントだろう。
わざわざ入れ物だ中身だと意味がよくわからない例えは余計。
0188デフォルトの名無しさん
垢版 |
2017/09/17(日) 17:30:33.37ID:qULdwsa1
何が言いたいのか良く分からないんだが
アドレスとポインタは違うものでポインタはアドレスを入れるものってだけの話だよ
アドレスそのものに型はないがポインタには型がある
ポインタのインクリメントとは、ポインタの型に従ってアドレスをインクリメントする
0190デフォルトの名無しさん
垢版 |
2017/09/17(日) 17:34:55.50ID:qULdwsa1
>>188>>186宛ね

>>187
表現が悪かったね
「アドレスが指すデータをインクリメントする」じゃなくて「アドレスそのものをインクリメントする」だよ
4バイト長のデータなら「アドレス0x12345678番を0x1234567C番にインクリメント(増加)する」
0192デフォルトの名無しさん
垢版 |
2017/09/17(日) 18:45:32.71ID:dEX9B4aF
ポインタ型変数がポインタなのか?それに入っているのがポインタなのか?

もしかしたらポインタというのは存在しないのではないか?
0193デフォルトの名無しさん
垢版 |
2017/09/17(日) 18:58:47.30ID:iyMogwhx
何を訳の分からないことを言ってるんだ?
Cの規格書に出てくるんだからあるに決まってるだろ

当たり前だがポインタ型変数に入っているものはポインタだ
多くの処理系で機械語レベルでは単にアドレスというだけ
同じように浮動小数点型変数に入っているものは浮動小数点だ
これも多くの処理系で機械語レベルではIEEEのホゲホゲというだけ
0195デフォルトの名無しさん
垢版 |
2017/09/17(日) 21:07:31.82ID:53PrWSTF
基本的にポインタの値は低レベルではアドレス値だけど
機械語レベルではアドレスと言うものがCではポインタと言われているとは限らない
0198デフォルトの名無しさん
垢版 |
2017/09/17(日) 22:25:24.89ID:iyMogwhx
AならBだけど、BならAとは限らないってだけ
これぐらいは高校の数学で習うだろ
もしくはアップキャストは常に成功するけど
ダウンキャストは成功するかわからない、といったところか
0199デフォルトの名無しさん
垢版 |
2017/09/18(月) 02:34:06.85ID:5sYblZKp
char *p のとき、
p はポインタ?それともポインタ型変数?
pに入っているのはポインタ?それともアドレス?
ポインタってどれ?
0200デフォルトの名無しさん
垢版 |
2017/09/18(月) 02:55:32.19ID:dIhl3VcQ
>>199
pは(char)ポインタ型変数で、入っているのは(char)ポインタ値
ポインタ値の実態はアドレスでかつ整数値のことが多いってかそれ以外の環境は見たことも聞いたこともないな
レスを投稿する


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