C++相談室 part165 (628レス)
上下前次1-新
1(2): (ワッチョイ efda-9b8G) 2023/10/31(火)07:37 ID:+ZyYyqMO0(1) AAS
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
↑同じ内容を3行貼り付けること
次スレは>>980が立てること
無理なら細かく安価指定
※前スレ
C++相談室 part164
2chスレ:tech VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
609: 青木康善 (アウアウウー Sa5b-8bf6) 11/30(土)13:56 ID:exhSsXMya(1) AAS
javaで、簡単なドラムマシン作りました。C++では、到底オツムが良く無い僕には無理です。皆さんの健闘を祈ります。
610(1): (JP 0Hf2-Dj8N) 12/01(日)18:28 ID:IuCKzQHfH(1/6) AAS
xxx.h で namespace A { size_t intval, count, itr; } を宣言。もちろん、インクルードガードしてる。
ところが、作ったライブラリをテンプレート対応に修正したら、「intval, count, itr」が2重定義されてます。」
という旨のLINK1169のエラー(Visual Stuio 2022)が突然出てきた。前のライブラリではこんなエラー出てなかった
のに...ナンデダロー、ナンデダロー♪と悩んでいたが、
namespace A { extern size_t intval, count, itr; }
を宣言したら解決した。extern_や外部リンケージのことがが良くわからない。調べたら通りいっぺんのことは
わかるけど。LINK1169のエラーが出たら、extern宣言してみてLINK1169を殺す、という対症療法だけ学習しました。
611: (JP 0Hf2-Dj8N) 12/01(日)18:28 ID:IuCKzQHfH(2/6) AAS
くそ!また改行がめちゃくちゃ
612: (ワッチョイ 0e62-jXfH) 12/01(日)18:31 ID:NWNsoufr0(1) AAS
MAPファイルの読み方を研究した方が良いかもな
613: (JP 0Hf2-Dj8N) 12/01(日)18:32 ID:IuCKzQHfH(3/6) AAS
それに誤字だらけだし。オワタ。高齢者の認知症検査試験大丈夫かな。5年後だけど。
614: はちみつ餃子◆8X2XSCHEME (ワッチョイ bd32-mEgI) 12/01(日)19:20 ID:rI1+OlKH0(1/2) AAS
>>610
定義はプログラム全体でひとつとする原則 (one definition rule) は診断不要な場合がある仕様になっていて処理系が問題を検出できなくてもかまわないことを意味する。
つまりエラーが出てなくても間違っている (未定義の挙動) かもしれないので理解せずにエラーメッセージに頼るのは悪い姿勢。
615(2): (JP 0Hf2-Dj8N) 12/01(日)19:34 ID:IuCKzQHfH(4/6) AAS
テンプレートにすると(implテクニックを使わなければ)、定義も実装も同じファイルに書かなければならないからそれが原因かなあ。とりあえず、厄介なLINKエラーは除霊されました。
616(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ bd32-mEgI) 12/01(日)20:25 ID:rI1+OlKH0(2/2) AAS
>>615
テンプレート内でグローバル変数にアクセスする箇所があるってこと?
それなら今はインライン変数を使うのが便利で行儀の良い作法のひとつだと考えられている。
インライン変数は C++17 からの機能なのでそれより古い規格しか使えないような事情があるなら仕方ないんだけど……
617: (JP 0Hf2-Dj8N) 12/01(日)20:32 ID:IuCKzQHfH(5/6) AAS
>>616
ありがとうございます。調べてみます。
ちなみに、>>615 定義も実装も → 宣言も定義も ええいくそっ! まーた間違えた
618: (JP 0Hf2-Dj8N) 12/01(日)21:38 ID:IuCKzQHfH(6/6) AAS
>>616
まーた、言い忘れました。まさにその状況でした。
619(3): (JP 0Hf2-Dj8N) 12/02(月)22:09 ID:/dQ47H+wH(1/2) AAS
[][]演算子のオーバーロードが欲しい。行列を1次元配列で実装する場合、C++は行主順(行列を行ベクトルの集まりとみなす)。Blas、lapackのライブラリをビルドしたfortran77は列主順(行列を列ベクトルの集まりとみなす)。()演算子のオーバーロードでは、行主順だろうが列主順だろうが、行列Aのi行j列の要素にはA(i,j)とアクセスできるが、列主順の場合には[]演算子のオーバーロードをどうやってもA[j][i]となってしまう。それでeigenは()演算子のみをサポートしている(本当か?)。だが、A(i,j)が添字0から始まるのが気に入らん。添字が0から始まるのはA[i][j]やろうもん。
[][]のオーバーロードがあったらなあ。
620: (ワッチョイ 00f0-X9QH) 12/02(月)22:22 ID:7rlMEi700(1) AAS
propertyなら簡単に多次元配列扱えそうなのに
propertyいつになったら実装されるのやら
621: (ワッチョイ b701-5W+W) 12/02(月)22:30 ID:6C6t/Sm50(1/2) AAS
>>619
O [][]演算子のオーバーロードが欲しい。
O 行列を1次元配列で実装する場合、C++は行主順(行列を行ベクトルの集まりとみなす)。
O Blas、lapackのライブラリをビルドしたfortran77は列主順(行列を列ベクトルの集まりとみなす)。
X ()演算子のオーバーロードでは、行主順だろうが列主順だろうが、行列Aのi行j列の要素にはA(i,j)とアクセスできるが、
X 列主順の場合には[]演算子のオーバーロードをどうやってもA[j][i]となってしまう。
O それでeigenは()演算子のみをサポートしている(本当か?)。
X だが、A(i,j)が添字0から始まるのが気に入らん。
X 添字が0から始まるのはA[i][j]やろうもん。
O [][]のオーバーロードがあったらなあ。
省1
622(1): (JP 0Hf2-Dj8N) 12/02(月)22:40 ID:/dQ47H+wH(2/2) AAS
ああ、そう。
ところで、A(i,j)が添字0から始まるのが気にならないんだ。じゃあ、もうええわ。
623: (ワッチョイ 0e62-jXfH) 12/02(月)22:51 ID:Fo02P0Bv0(1) AAS
msvc4.xxにoprater delete[]をoverideする機能が無い
所からCOMの仕様が策定されている所を考えると
面白いな
624: (ワッチョイ b701-5W+W) 12/02(月)22:58 ID:6C6t/Sm50(2/2) AAS
>>622
日本語の意味が分からんと書いている
0オフセットが嫌ならiやjから1引けば良かろうもん?
625(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ bd32-mEgI) 12/02(月)23:07 ID:5A4jg9rQ0(1/2) AAS
>>619
[] がカンマで区切られた複数の引数を受けとる機能は入る見込み。
そのための前準備として [] の中でカンマ演算子を使うのが C++20 から非推奨になってる。 必要なら括弧で囲めばいいだけだから深刻な互換性問題にもならんだろうし。
[][] をオーバロードするとなると辻褄合わせが難しいだろうから入ることは期待できないと思う。
626: はちみつ餃子◆8X2XSCHEME (ワッチョイ bd32-mEgI) 12/02(月)23:09 ID:5A4jg9rQ0(2/2) AAS
>>625
あ、アンカーを間違えた。 >>619 にすべきだね。
すまぬ。
627: (ワッチョイ c89a-+Y4l) 12/04(水)01:53 ID:DpkrBRqF0(1) AAS
結局はベクトルや行列の演算の何かなんだろうから
二重配列を直接操作するというよりベクトルや行列のオブジェクトの演算を
定義する、演算子オーバーロードする、とかそういうコードを一旦書くわけには
いかないのかな?
628: (オイコラミネオ MMdd-Qs+Z) 12/04(水)11:10 ID:1b6O8ksjM(1) AAS
[][]演算子が出来たら
[][][]の解釈に困るからできない
というより
[]が一つの演算子だから[][]はないし混乱のもと
[ , ]が正当
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 1.252s*