スレを勃てるまでもないC/C++の質問はここで 15
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/05/09(日) 10:31:46過去ログ
スレを勃てるまでもないC/C++の質問はここで
http://pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
http://pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
http://pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
http://pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
http://pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
http://pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
http://pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
http://pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
http://pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
http://pc12.2ch.net/test/read.cgi/tech/1245059383/
スレを勃てるまでもないC/C++の質問はここで 12
http://pc12.2ch.net/test/read.cgi/tech/1248010352/
スレを勃てるまでもないC/C++の質問はここで 13
http://pc12.2ch.net/test/read.cgi/tech/1260842197/
スレを勃てるまでもないC/C++の質問はここで 14
http://pc12.2ch.net/test/read.cgi/tech/1269273471/
0002デフォルトの名無しさん
2010/05/09(日) 10:34:37janeの隠し機能を発見したぞ!
1.まず半角入力に切り替える
2.Wキーを押しっぱなしにする
3.Wキを押しっぱなしにしながらsageのチェックするところをおもむろにクリック
0003デフォルトの名無しさん
2010/05/09(日) 14:15:160004デフォルトの名無しさん
2010/05/09(日) 16:10:46現状、
enum TEX_ID{
TEX_A,
TEX_B,
TEX_C,
TEX_NUM
}
char* TexTbl[] = {
("tex/a.bmp"),
("tex/b.bmp"),
("tex/c.bmp"),
}
と、別々に定義して、
TexTbl[TEX_B]
のように呼び出していますが、これだと2つの順番を意識的にあわせる必要があります。
そうではなく、
enum TEX_ID{
(TEX_A, ("tex/a.bmp")),
(TEX_B, ("tex/b.bmp")),
(TEX_C, ("tex/c.bmp")),
TEX_NUM
}
のようにひとまとめにしたいのですが・・・(上のような記述はありえませんが)
00054
2010/05/09(日) 16:11:540006デフォルトの名無しさん
2010/05/09(日) 16:17:130007デフォルトの名無しさん
2010/05/09(日) 16:20:05ただ、色々犠牲になるけど。
C99なら要素番号を指定して初期化とかできるするけど
これも同じく犠牲になるものはある。
両方に共通して言える犠牲は、全要素が初期化されてるか判断が面倒という点。
普通に配列を初期化すれば、要素数とTEX_NUMを比較するassertを書けば済む。
mapにするとこれは解決できるが、今度はコストが気になると思われる。
一旦mapで初期化して、配列に移す、とまでやれば大丈夫だろうが・・・。
00084
2010/05/09(日) 16:27:35mapだと、
enum TEX_ID{
TEX_A,
TEX_B,
TEX_NUM
}
map<int, string> names;
names.insert( map<int, string>::value_type( TEX_A, "a.bmp" ) );
names.insert( map<int, string>::value_type( TEX_B, "b.bmp" ) );
こんな感じになってしまい、利用する側は登録するときに
enumと、insert部分の2箇所を記述する必要がでてきてしまいます。
TEX_AやTEX_Bのかわりに0や1を使ってdefineを取り除くと、
今度は利用するときにわかりにくいです。
0009デフォルトの名無しさん
2010/05/09(日) 16:28:370010デフォルトの名無しさん
2010/05/09(日) 16:31:500011デフォルトの名無しさん
2010/05/09(日) 16:36:230012デフォルトの名無しさん
2010/05/09(日) 16:37:5600134
2010/05/09(日) 16:59:49それらをどう使って、どういう形になるのかが想像できません(;´д`
struct MEDIA_INFO{
int id;
char* filename;
};
enum TEX_ID{
MEDIA_INFO(TEX_A, "a.bmp")
MEDIA_INFO(TEX_B, "b.bmp")
MEDIA_INFO(TEX_NUM, "")
};
TEX_ID aaa;
aaa[TEX_A].filename
うーん
0014デフォルトの名無しさん
2010/05/09(日) 17:43:36MEDIA_INFO(TEX_A, "a.bmp")
MEDIA_INFO(TEX_B, "b.bmp")
MEDIA_INFO(TEX_NUM, "")
media.h:
enum TEX_ID{
#define MEDIA_INFO(a,b) a,
#include "data.h"
#undef MEDIA_INFO
};
media.c:
const char* TexTbl[] = {
#define MEDIA_INFO(a,b) b,
#include "data.h"
#undef MEDIA_INFO
};
0015デフォルトの名無しさん
2010/05/09(日) 17:47:19それいいな
0017デフォルトの名無しさん
2010/05/09(日) 23:34:07Visual C++で開発していますが、JavaのLinkedListのような仕組みを使ったリストに
ソートをかけたいです。
一度コピーでもしない限り、インデックス指定でリストにアクセス出来ないので、
使用できるアルゴリズムが限られそうです。データ型はfloatです。
0018デフォルトの名無しさん
2010/05/09(日) 23:42:160019デフォルトの名無しさん
2010/05/10(月) 06:59:52std::listにstd::sort()は使えない。
まぁ、std::listのメンバにsort()があるけど。
>>17
つーことで、先ずはstd::list<type> fooしてfoo.sort()だね。
0020デフォルトの名無しさん
2010/05/10(月) 10:03:19int fibonacci(int n)
{
if (n == 1 || n == 2)
return 1;
else
return fibonacci(n - 1) + fibonacci(n - 2);
}
の結果が
1=1
2=1
3=2
4=3
5=5 ってなるのが分からんのですけど、n=3の時は3−1+3−2ですよね?
nが−1で減るとして3−1+2−2とも考えたんですけどそれだと4の答えは4になるんじゃないでしょうか?
0021デフォルトの名無しさん
2010/05/10(月) 10:14:09fibonacci(3 - 1) + fibonacci(3 - 2)
つまり
fibonacci(2) + fibonacci(1)
だから
n=2とn=1
のときの結果を足し合わせるの
それはどっちも1だろ?
0022デフォルトの名無しさん
2010/05/10(月) 10:16:290023デフォルトの名無しさん
2010/05/10(月) 10:36:50速レス感謝です、if (n == 1 || n == 2) のリターン1が評価されてn(3)は1+1は2ということでしょうか?
そうすると4は3+1?だとやはり4になってしまうような?できれば4の場合も教えていただけないでしょうか
0024デフォルトの名無しさん
2010/05/10(月) 10:41:000025デフォルトの名無しさん
2010/05/10(月) 10:54:57n = 4のときは
fibonacci(4 - 1) + fibonacci(4 - 2)
で
fibonacci(3) + fibonacci(2)
だから
n=3のときの結果とn=2の時の結果を足すんだよ!
0026デフォルトの名無しさん
2010/05/10(月) 11:27:41fibonacci(2)が1?で3+1?
そうすっと4=3てのは…
>>24
本の少し後ろの頁みたら解説してました
if (n == 0)
return 1;
else
return n* kaijo(n - 1); で4を入れると4*(3*(2*(1*1)))で24となるてやつでしょうか
これを>>20に当てはめろということでしょうか
0027デフォルトの名無しさん
2010/05/10(月) 11:38:270028デフォルトの名無しさん
2010/05/10(月) 11:40:58fibonacci(1) == 1
fibonacci(2) == 1
fibonacci(3) == 2
fibonacci(4) == 3
fibonacci(5) == 5
と書けばわかるか?
fibonacci(4)
== fibonacci(3) + fibonacci(2)
== 2 + 1
== 3
0029( ● ´ ー ` ● )
2010/05/10(月) 11:51:200030デフォルトの名無しさん
2010/05/10(月) 11:58:304の一つ前のn(3)が=2だったからfibonacci(3)が2になるということでしょうか?
例えばfibonacci(6)だとfibonacci(5)+fibonacci(4)で5+3でfibonacci(6)=8
0031デフォルトの名無しさん
2010/05/10(月) 12:17:120032デフォルトの名無しさん
2010/05/10(月) 12:23:05http://www.suguru.jp/Fibonacci/
0033デフォルトの名無しさん
2010/05/10(月) 12:50:50よくわかりました、正直フィボナッチの意味がわかってませんでした
0034デフォルトの名無しさん
2010/05/10(月) 12:56:290035デフォルトの名無しさん
2010/05/10(月) 13:14:10そのtxtの文字コードを メモ帳から文字コードをUnicodeに変更して保存しなおすと、Unicodeの文字を書き込むと表示できました。
手動ではなくプログラム中でtxtファイルの保存形式を指定したいのですがどうすれば良いのでしょうか?
0036デフォルトの名無しさん
2010/05/10(月) 13:16:50文字コード変換すれば?
0037デフォルトの名無しさん
2010/05/10(月) 13:22:47003835
2010/05/10(月) 13:43:12特殊文字を記録したいのでUnicodeで保存しようと思ってます。
>>37
BOMって文字の前に付けて、その文字のコードを宣言するもので合ってましたっけ。
出力する文字はUnicodeで出ました。
CreateFileで作られたtxtがAnsiで保存されてるらしく駄目でした。
Unicodeで保存したファイルに出力するとOkでした。
メモ帳からAnsiでUnicodeを保存する時に「Unicodeの文字です。保存形式をUniCodeにしないとデータは失われます〜」
って表示がでたんで、Textファイル自体をUnicodeで保存させる設定がいるのかなと思いまして。
0039デフォルトの名無しさん
2010/05/10(月) 13:59:39根本的に勘違いしてるみたいだな
テキストファイルに文字コードがなんであるかを記録する方法はない(エディタの方言としてはあるが)
読み取るソフトが内容から自分で判断してる
だから
>Textファイル自体をUnicodeで保存させる設定がいるのかなと思いまして。
そんな設定は無い、
>CreateFileで作られたtxtがAnsiで保存されてるらしく駄目でした。
これも勘違いだろうな、メモ帳で開いて保存する時のダイアログでAnsiだと思ったんだろ?
0040デフォルトの名無しさん
2010/05/10(月) 14:28:33エディタは高確率でエンコード誤認するぞ。
C文字列にBOMは含まれないから、保存時にどうするかはプログラマの責任。
004135
2010/05/10(月) 15:05:43メモ帳はBOMを見て文字を判断してる。メモ帳にUnicode貼り付け時
[メモ帳に元からあったデータ] 続いて [UnicodeのBOM(0xEF, 0xBB, 0xBF) 2byte×文字数]
でUnicodeを表現。
指定した文字コードで保存しようとすると、全ての文字のコードを一括変換してくる?
[File_Beginに保存形式のBOM 以下→?byte×メモ帳の文字数]
今までBOM無しのデータでもきちんと表示されていたのはCharだったから。
TcharならBOM付けないとエンコードに失敗するから駄目だって事でしょうか?
0042デフォルトの名無しさん
2010/05/10(月) 15:12:04メモ帳で確認するのではなく、ファイルを1バイトずつダンプするツールで確認することも覚えましょう。
004335
2010/05/10(月) 16:00:16確認してみた所、UnicodeのBOM(0xFF,0xFE) ANSIのBOM(無し) UTF-8のBOM(0xEF, 0xBB, 0xBF)でした。
BOMの記入後はちゃんと表示できました、ありがとうございます。
0044デフォルトの名無しさん
2010/05/10(月) 19:43:54ペラン数wwwどうしてこうなった
0045デフォルトの名無しさん
2010/05/10(月) 19:51:440046デフォルトの名無しさん
2010/05/10(月) 19:59:440047デフォルトの名無しさん
2010/05/10(月) 23:11:39普通に書くなら
hoge = (hoge<10?hoge+1:10);
だが、hogeを何度も書いてて冗長な気がする。
もっといい書き方ない?
0048デフォルトの名無しさん
2010/05/10(月) 23:39:56if (hoge < 10)
hoge++;
else
hoge = 10;
1行にするとこうなる。でもこれじゃわかりづらい
if (hoge++ >= 10) hoge = 10;
0049デフォルトの名無しさん
2010/05/11(火) 00:01:43hoge = hoge-hoge*(hoge>=10)+(hoge<10)-(hoge<10)*(hoge>=10)+10*(hoge>=10);
0050デフォルトの名無しさん
2010/05/11(火) 00:11:00if (look(hoge) < 10) set(hoge, +1); else set(hoge, 10);
0051デフォルトの名無しさん
2010/05/11(火) 00:20:050052デフォルトの名無しさん
2010/05/11(火) 00:20:080053デフォルトの名無しさん
2010/05/11(火) 07:39:09ありがとうございました
0054デフォルトの名無しさん
2010/05/11(火) 08:32:03そんな保守もへったくれもないようなコード、冗談だよな?
つーか、間違ってるじゃん。
0055デフォルトの名無しさん
2010/05/11(火) 09:16:400056デフォルトの名無しさん
2010/05/11(火) 12:02:50で十分。
これがわかりにいくとかいう初心者の意見は聞かない。
0057デフォルトの名無しさん
2010/05/11(火) 12:46:040058デフォルトの名無しさん
2010/05/11(火) 13:00:590059デフォルトの名無しさん
2010/05/11(火) 13:17:360060デフォルトの名無しさん
2010/05/11(火) 13:20:470061デフォルトの名無しさん
2010/05/11(火) 14:45:000062デフォルトの名無しさん
2010/05/11(火) 15:30:17短絡評価が規格に明記されてる言語は多いけど、
論理演算子とみてるからこそ「短絡評価」という表現が使われる。
0063デフォルトの名無しさん
2010/05/11(火) 16:06:00>普通は制御構文とはみないで論理演算子とみるわな。
普通なら論理演算子の評価で制御機能が働くことは重々承知してるはず
初心者は知らんが
0064デフォルトの名無しさん
2010/05/11(火) 18:12:27hoge operator+(hoge&);
のように宣言しているのはhogeクラスそのものを引数にしているということであってますか?
0065デフォルトの名無しさん
2010/05/11(火) 18:30:40hogeクラスへの参照を引数としている
これが君の言っていることと同じかはこっちにはわからん
0066デフォルトの名無しさん
2010/05/11(火) 18:55:26hoge hoge::operator+(hoge &h){
0067デフォルトの名無しさん
2010/05/11(火) 18:56:52途中送信してしまいました
hoge hoge::operator+(hoge &h){
なんとかかんとか
}
こうゆうhへの参照という意味なのでしょうか?
宣言では型だけ書いているという意味で
0068デフォルトの名無しさん
2010/05/11(火) 19:04:54引数の(型の)話しかしてないよ
引数の型がhogeへの参照だということ
0069デフォルトの名無しさん
2010/05/11(火) 20:53:580070デフォルトの名無しさん
2010/05/11(火) 23:44:40あるプッシュボタンを押すとWM_KEY系を処理してくれなくなるバグが発生してしまいました。
ボタンを押す前はきちんと処理をしてくれるのですが、
ボタンを押すとその後メッセージボックスが表示されるまで
キーを押しても反応しなってしまいます。(ほかのメニューなどはきちんと処理されているようです)
ちなみにほかのボタンではこのような不具合は起こりませんでした。
どなたか、ご教授お願いいたします。
0071デフォルトの名無しさん
2010/05/12(水) 01:25:16C++言語でデストラクタを再起させても良いのでしょうか?
木構造の全ノードをデストラクタで開放したいです。
0072デフォルトの名無しさん
2010/05/12(水) 01:26:320074デフォルトの名無しさん
2010/05/12(水) 14:37:410075デフォルトの名無しさん
2010/05/12(水) 19:19:580076デフォルトの名無しさん
2010/05/12(水) 19:48:20それなら再帰とはいわん
0077デフォルトの名無しさん
2010/05/12(水) 20:58:09まあ普通は再帰と言わないだろうけど
木構造で考えるとそうなってんだろうなあ、とは思うが
0078デフォルトの名無しさん
2010/05/12(水) 22:52:24デストラクタが直接にでも間接にでも自身を呼び出す再帰関数であって全く問題ない。
0079デフォルトの名無しさん
2010/05/13(木) 02:14:33きちんと調べてないけど
0080デフォルトの名無しさん
2010/05/14(金) 15:37:180081デフォルトの名無しさん
2010/05/15(土) 13:47:37うんだろうね。
規格は知らないけど、デストラクタの二重呼び出しという不正なコードになるね。
引数も無いから再帰の終了条件も無いし意味の無いコードだな。
0082デフォルトの名無しさん
2010/05/15(土) 13:49:470083デフォルトの名無しさん
2010/05/15(土) 13:58:530084デフォルトの名無しさん
2010/05/15(土) 14:20:36「できますよ」って答えるにはどのくらいの知識が必要?
0085デフォルトの名無しさん
2010/05/15(土) 14:24:17知識は関係ないよ。やる気を試しているだけ。
仕事が欲しくないなら「できません」って言えばいい。
0086デフォルトの名無しさん
2010/05/16(日) 02:36:53>>84はあれだよ。つまり『やらないか』って言われたんだと思うよ。
「はじめてだけど……がんばりますっ!」って言えば高ポイントだったに違いない。
0087デフォルトの名無しさん
2010/05/16(日) 14:52:120088デフォルトの名無しさん
2010/05/16(日) 22:45:27あるオブジェクトを登録できる管理クラスを用意し、
オブジェクトを登録後、オブジェクトが削除されたら登録も
自動的に解除するという機能を入れようと考えています。
管理クラスからもオブジェクトメソッドにアクセスできるようにしたいのですが、
この場合単純に相互参照を使用するのが一番良い方法なのでしょうか?
現状ではこのような形を考えています。
class Child{
private:
Controller* m_pController; // Controller::register時に入る
public:
~Child(){ m_pController->unregister( this);}
void setControllerPointer( Controller* pController){ m_pController = pController;}
void update( void); // Controllerから呼びたい
};
class Controller{
private:
Child* m_pChild[6];
public:
void redister( Child* pChild, unsigned int slot);
void unredister( Child* pChild);
};
よろしくお願いします。
0089デフォルトの名無しさん
2010/05/17(月) 01:10:41相互参照は後々トラブルの元だから避けるのが一番良い方法。
登録解除でオブジェクトを削除にするのが無難。所有者をはっきりさせるように設計しよう。
俺も昔そういう構造を作ることもあったけど今は作らないようにしている。
0090デフォルトの名無しさん
2010/05/17(月) 15:16:12#include <iostream>
#include <string>
using namespace std;
int main()
{
string org = string("org");
string org2 = string("org2");
string org3 = string("org3");
string &str = org; // コピーコンストラクタで初期化
string &str2 = org2;// コピーコンストラクタで初期化
string &str3(org3);// コピーコンストラクタで初期化
str2 = org; // コピー代入
str3 = org; // コピー代入
return 0;
}
コメントの理解で良いのでしょうか。
string &str2 = org2;がよくわかりません。
0091デフォルトの名無しさん
2010/05/17(月) 15:32:17>// コピーコンストラクタで初期化
というのは3つとも全部間違い
参照をセットしているだけで、コンストラクタが呼び出されたりはしない
0093デフォルトの名無しさん
2010/05/17(月) 21:31:04ありがとうございます!
やはり方向ははっきりさせないとあかんのですね
0094デフォルトの名無しさん
2010/05/20(木) 23:52:460,1,2,
3,4,5,
6,7,8,と番号をつけるとします。
各番号のブロックにある数字を足し、1次元の配列にブロック内の数の合計を保存したいです。
以下のプログラムを書いた場合、1次元の配列の添え字を工夫すると簡単にプログラミングできる
と聞いたのですが、どうしても思いつきません。アドバイスお願いします。
(i=0;i<10;i++)
(j=0;j<10;j++)
total[ここの添え字を工夫]=data[i][j];
totalを2次元配列にする方法は思いつくのですが、1次元に保存する方法がどうしてもわかりません。
よろしくお願いします。
0095デフォルトの名無しさん
2010/05/20(木) 23:55:180096デフォルトの名無しさん
2010/05/21(金) 00:05:07int total[3][3];
for(n=0;n<3;n++)
for(m=0;m<3;m++)
for(j=0;i<9;i++)
for(i=0;j<9;j++)
total[n][m] = data[m*3+i + (n*3+j)*9];
0097デフォルトの名無しさん
2010/05/21(金) 00:13:43total[i] = 0;
for(i = 0; i < 9; i++)
for(j = 0; j < 9; j++)
total[(i / 3) * 3 + j / 3] += data[i][j];
0098デフォルトの名無しさん
2010/05/21(金) 03:23:12GDBでのデバッグ時に各CPUのプロセスで
set debug_flag2 = 0x00008040
set test_flag5 = 0x00802020
などとと入力したい。
これを8回も入力するのが大変なので
一つのCPUで入力すれば各CPUでも設定されるようにしたいのですが
そういう処理って可能ですかね?
(第一引数をデバッグフラグ名の文字列, 第二引数をフラグ値
のような関数を作成したい)
0100デフォルトの名無しさん
2010/05/21(金) 23:36:590101デフォルトの名無しさん
2010/05/21(金) 23:43:35int data[M*N];
int total[q][p];
int t,i,j,m,n;
for(n=0;n<N;n++)
for(m=0;m<M;m++) {
for(j=0;j<q;j++)
for(t=i=0;i<p;i++)
t = data[m*p+i + (n*q+j)*M];
total[n][m] = t;
}
0102デフォルトの名無しさん
2010/05/21(金) 23:50:13Nはqの整数倍なのか?
0103デフォルトの名無しさん
2010/05/21(金) 23:50:300104デフォルトの名無しさん
2010/05/21(金) 23:55:100106デフォルトの名無しさん
2010/05/22(土) 00:06:05int total[q*p];
int t,i,j,m,n;
for(n=0;n<N;n++)
for(m=0;m<M;m++) {
for(j=0;j<q;j++)
for(t=i=0;i<p;i++)
t = data[m*p+i + (n*q+j)*M];
total[n*M+m] = t;
}
0107デフォルトの名無しさん
2010/05/22(土) 00:12:180108デフォルトの名無しさん
2010/05/22(土) 00:30:51for(n=0;n<M*N;total[n++] = t)
for(t=i=0;i<p*q;i++, t=data[n%M*p+i%p + (n/M*q+i/p)*M]);
0109デフォルトの名無しさん
2010/05/22(土) 00:55:57for(i=0; i<M; i++) for(j=0; j<M; j++) total[i/p*(N/q)+j/q] += data[i][j];
0110デフォルトの名無しさん
2010/05/22(土) 01:26:27for(i=0; i < M*N; i++)
total[i/(M/p)%(M/p) + (i/M)/(N/q)*(M/p)] += data[i];
0111デフォルトの名無しさん
2010/05/22(土) 01:33:470112デフォルトの名無しさん
2010/05/22(土) 01:36:340113デフォルトの名無しさん
2010/05/22(土) 01:49:250114デフォルトの名無しさん
2010/05/22(土) 01:59:550115デフォルトの名無しさん
2010/05/22(土) 02:08:28>for(j=0; j<M; j++)
じゃなくてfor(j=0; j<N; j++) じゃね?
>>110
pとqを勘違いしてね?
0116デフォルトの名無しさん
2010/05/22(土) 02:41:150117デフォルトの名無しさん
2010/05/22(土) 02:55:31> pとqを勘違いしてね?
そう?
0118デフォルトの名無しさん
2010/05/22(土) 03:03:26for(i=0; i < M*N; i++)
total[i/p%(M/p) + (i/M)/(N/q)*(M/p)] += data[i];
0119デフォルトの名無しさん
2010/05/22(土) 03:07:050120デフォルトの名無しさん
2010/05/22(土) 03:35:46pとqは小さなブロックのサイズなのに、total[q*p]じゃそうならないだろ
0121デフォルトの名無しさん
2010/05/22(土) 03:37:030122デフォルトの名無しさん
2010/05/22(土) 08:23:57totalを0で埋めるか初期化しないとまともな結果にならんだろw
0123デフォルトの名無しさん
2010/05/22(土) 08:58:180124デフォルトの名無しさん
2010/05/22(土) 10:40:25char 1byte 固定
short 2byte以上
long 4byte以上
short <= int <= long
float 32bit 固定
double 64bit 固定
long double 80bit 固定
であってる?
0125デフォルトの名無しさん
2010/05/22(土) 10:49:21char 1byte 固定
short <= int <= long
しか合ってない
1byte >= 8bit
short 最低でも-32767〜32767を表現可能
long 最低でも-2147483647〜2147483647を表現可能
float <= double <= long double
値の範囲は面倒くさいので略(最低でも表現でいないといけない指数とか桁数とかはある)
0126デフォルトの名無しさん
2010/05/22(土) 10:55:42char = short = int = long
1byte = 32bit
でも規格合致
0127デフォルトの名無しさん
2010/05/22(土) 12:33:300128デフォルトの名無しさん
2010/05/22(土) 13:33:4380bit分しか使ってないけどアラインメントの関係で
DOS時代に使ってたTurbo C++は80bitだったと思う
0129デフォルトの名無しさん
2010/05/22(土) 13:57:25>g++は128bitだな
-m96bit-long-double がデフォルトのこともある。環境によって異なる。
0130デフォルトの名無しさん
2010/05/22(土) 14:10:510131デフォルトの名無しさん
2010/05/22(土) 14:34:55文句言うなら、回答書いてみろよ
0132デフォルトの名無しさん
2010/05/22(土) 17:08:07悔しいなら正解書いてみろよ
0133デフォルトの名無しさん
2010/05/22(土) 19:10:57「totalを0で埋めるか初期化」するって書いてるだろw
0134デフォルトの名無しさん
2010/05/22(土) 19:15:440135デフォルトの名無しさん
2010/05/22(土) 19:18:120136デフォルトの名無しさん
2010/05/22(土) 19:25:220137デフォルトの名無しさん
2010/05/22(土) 19:26:570138デフォルトの名無しさん
2010/05/22(土) 21:08:310139デフォルトの名無しさん
2010/05/22(土) 21:30:13これをint型10進数(10011101 → 157)に直すシンプルな方法は無いでしょうか?
現状atoiで整数にしてから
10ずつ割りながら、整数で1の論理積を確認し、
別途1..2..4..8..と数値を足し合わせ作る手しか思い付かず。。
(※書き込み失敗したのか2度目の書き込みになります; もし別スレに誤爆しててマルチになってたらすみません;)
0140デフォルトの名無しさん
2010/05/22(土) 21:39:100141デフォルトの名無しさん
2010/05/22(土) 21:43:14main()
{
char buf[]="10011101";
char *p;
int x = 0;
for(p=buf; *p ; p++) {
x *= 2;
if(*p == '1') x+=1;
}
printf("x=%d\n", x); /* x=157 */
}
0142139
2010/05/22(土) 22:25:44ありがとうございます。ビットシフトでも良いのでしたね、記憶しておきます。
>>141
サンプルありがとうございます。
ポインタを使えばこうもシンプルに書けるのですね。 勉強になります。
2倍にする事でビットシフト同等の効果・・学んだ記憶が何とか蘇る程度でした。
とても勉強になりました。お2方、ありがとうございました。
0143デフォルトの名無しさん
2010/05/23(日) 20:38:460144デフォルトの名無しさん
2010/05/23(日) 21:36:56int X1[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}};
int X2[4][4]={{15,14,13,12},{11,10,9,8},{7,6,5,4},{3,2,1,0}};
int X3[4][4]=・・・・;
int X4[4][4]=・・・・;
for(i=0;i<100;i++)
for(j=0;j<100;j++)
num[i][j]+=X1[i%4][j%4];
この様なプログラムにおいて、X1〜X4を簡単に切り替える方法はありませんか?
Xの配列は必要に応じて1〜4を選択したいのですが、プログラムで何カ所も使っているため、書き換えるのが非常に面倒です。
#define X "x1"
として、X[i%4][j%4]としてみたのですが、予想通り無理でした。
1カ所書き換えるとすべてに適用されるような方法はありませんか?
0145デフォルトの名無しさん
2010/05/23(日) 21:40:060146デフォルトの名無しさん
2010/05/23(日) 21:41:100147デフォルトの名無しさん
2010/05/23(日) 22:05:46int main(void)
{
int x1[4][4];
int x2[4][4];
int x3[4][4];
int x4[4][4];
typedef int (*px_t)[4];
px_t x[] = {x1, x2, x3, x4};
x[0][1][2] = 100;
std::cout << x1[1][2] << std::endl;
return 0;
}
typedefなしで書く方法がわからんorz
0148デフォルトの名無しさん
2010/05/23(日) 22:13:24xはint型の[4][4]の配列へのポインタ
0149デフォルトの名無しさん
2010/05/23(日) 22:18:02コンパイルできない
0150デフォルトの名無しさん
2010/05/23(日) 22:35:500151デフォルトの名無しさん
2010/05/23(日) 22:39:23<typeinfo>を使って生の型を
0152デフォルトの名無しさん
2010/05/23(日) 22:42:44それでいいっぽいな
ただし配列名での初期化が出来るのはC++のみで、Cだとコンパイルエラーが出た
#include <iostream>
#include <iomanip>
int main(void)
{
int x1[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
int x2[][4] = {{17, 18, 19, 20}, {21, 22, 23, 24}, {25, 26, 27, 28}, {29, 30, 31, 32}};
int x3[][4] = {{33, 34, 35, 36}, {37, 38, 39, 40}, {41, 42, 43, 44}, {45, 46, 47, 48}};
int x4[][4] = {{49, 50, 51, 52}, {53, 54, 55, 56}, {57, 58, 59, 60}, {61, 62, 63, 64}};
int (*x[])[4] = {x1, x2, x3, x4};
int i, j, k;
for (k = 0; k < 4; k++) {
std::cout << "x = " << (k + 1) << '\n';
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
std::cout << std::setw(4) << x[k][i][j];
std::cout << std::endl;
}
}
}
0153デフォルトの名無しさん
2010/05/23(日) 22:51:33面倒だな
#include <stdio.h>
int main(void)
{
int x1[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
int x2[][4] = {{17, 18, 19, 20}, {21, 22, 23, 24}, {25, 26, 27, 28}, {29, 30, 31, 32}};
int x3[][4] = {{33, 34, 35, 36}, {37, 38, 39, 40}, {41, 42, 43, 44}, {45, 46, 47, 48}};
int x4[][4] = {{49, 50, 51, 52}, {53, 54, 55, 56}, {57, 58, 59, 60}, {61, 62, 63, 64}};
int (*x[4])[4];
int i, j, k;
x[0] = x1;
x[1] = x2;
x[2] = x3;
x[3] = x4;
for (k = 0; k < 4; k++) {
printf("x%d = \n", k + 1);
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++)
printf(" %3d", x[k][i][j]);
putchar('\n');
}
}
return 0;
}
0154デフォルトの名無しさん
2010/05/23(日) 22:51:35当たり前だ。
Cだと配列の要素には定数以外使えない。
実行時に決まるスタック上のアドレスや関数呼び出しの戻り値などは
配列を初期化する値に出来ない。
0155デフォルトの名無しさん
2010/05/23(日) 22:51:45かしこいな!
こんな使い方があったのか
0156デフォルトの名無しさん
2010/05/23(日) 23:30:19http://ideone.com/v9lsi
http://codepad.org/QCxegedL
なんだこりゃ
だめだこれ
0157デフォルトの名無しさん
2010/05/24(月) 00:03:15要素0内の複数のメンバ変数を要素1に複製したいときって
普通にmemcpyでOK?
0158デフォルトの名無しさん
2010/05/24(月) 00:21:49条件によっては大丈夫な場合もあるけどまったく保証はされない。
0159デフォルトの名無しさん
2010/05/24(月) 00:46:11Cならおk
C++なら、コピーするメンバ変数が組み込み型かPODならおk
0160デフォルトの名無しさん
2010/05/24(月) 02:29:54a[1] = a[0];
でえーやん。
ディープコピーの問題だとかメモリ確保してた場合にどうだとかは
代入演算子をどうする(作る)かの問題だけど。
0161デフォルトの名無しさん
2010/05/24(月) 20:56:06findだと最初のが見つかったら終わっちゃうよね
あ、ちなみにソート済みコンテナではないです
0162デフォルトの名無しさん
2010/05/24(月) 22:14:18あるプログラムのheaderで以下のように定義して
Hoge* h[2];
それをメインルーチンで以下のようにobject を指すようにしたとします。
h[0] = new Hoge("foo");
h[1] = new Hoge("bar");
そのときにデストラクタでは
delete h[0];
delete h[1];
のように二回呼ばないといけませんか?
それとも
delete [] h;
でいけるのでしょうか?何となく前者じゃないといけない気がするのですが。
よろしくお願いします。
0163デフォルトの名無しさん
2010/05/24(月) 22:17:080164デフォルトの名無しさん
2010/05/24(月) 22:27:20作った関数で戻り値に文字列を指定する事は出来るのでしょうか?
普通に
LPWSTR CLASS(・・){
WCHAR str[100]
略
return str }
とかやっても文字列は帰ってきませんし、他のサイトでは文字列を戻す関数作成のサンプルを見かけません。
0165デフォルトの名無しさん
2010/05/24(月) 22:27:40delete[] h; は完全な間違いです。
未定義の動作ですから鼻から悪魔です。
0166デフォルトの名無しさん
2010/05/24(月) 22:31:22ローカル変数を戻り値にしちゃだめだよ。
0168デフォルトの名無しさん
2010/05/24(月) 22:37:49std::stringとかstd::wstring
0169デフォルトの名無しさん
2010/05/24(月) 22:40:38文字列受け取りたい場合は
void GetStr( WCHAR* str, int size )
{
strに値をコピー
}
ってやったら?
0170デフォルトの名無しさん
2010/05/24(月) 23:32:38int main(void){
int n=1;
float w,kei=0,heikin,max,min;
while(1){
printf("%d件目のデータを入力してください-->",n);
scanf("%f",&w);
if(w==0) break;
kei+=w;
if(n==1){max=w;min=w;}
if(w>max) max=w;
if(w<min) min=w;
n++;
}
heikin=kei/(n-1);
printf("合計 :%.1f[kg]\n"
"件数 :%d[件]\n"
"平均値:%.1f[kg]\n"
"最大値:%.1f[kg]最小値:%.1f[kg]\n",kei,n-1,max,min);
return 0;
}
最小値にループを抜けるための条件のW=0が代入されてしまいます
breakでループを抜けたらその後の
kei+=w;
if(n==1){max=w;min=w;}
if(w>max) max=w;
if(w<min) min=w;
の文は処理されないはずではないのですか?
0171デフォルトの名無しさん
2010/05/24(月) 23:33:520172デフォルトの名無しさん
2010/05/24(月) 23:41:08main(void){
register int a[10], i;
for(i = 0; i < 10; i++)
scanf("%d", a[i]);
}
というようにレジスタ上の配列aに数値を読みこみたいのですが、
windowsのgccでコンパイルするとwarningが出てしまい、
配列aはレジスタ上に配置されずにメモリに配置されている予感がします
これをレジスタ上に確保したままfor文で数値を読み込む方法はあるのでしょうか?
0173デフォルトの名無しさん
2010/05/24(月) 23:41:440175デフォルトの名無しさん
2010/05/24(月) 23:48:460176デフォルトの名無しさん
2010/05/24(月) 23:50:19JAVAのようには出来ないんですね どうもです。
0177デフォルトの名無しさん
2010/05/24(月) 23:50:41あっ!そういうことですか。ありがとうございました_ _
0178デフォルトの名無しさん
2010/05/24(月) 23:51:19_asm
0179デフォルトの名無しさん
2010/05/25(火) 02:34:49お前がやりたい事は無理
そもそもレジスタを理解してないように見えるが
0181デフォルトの名無しさん
2010/05/25(火) 05:41:350182デフォルトの名無しさん
2010/05/25(火) 10:51:560183デフォルトの名無しさん
2010/05/25(火) 14:54:320184デフォルトの名無しさん
2010/05/25(火) 17:01:590185デフォルトの名無しさん
2010/05/25(火) 17:21:260186デフォルトの名無しさん
2010/05/25(火) 18:16:330187デフォルトの名無しさん
2010/05/25(火) 23:39:09int hoge( void ** );
といった定義をしたのですが、
char *fuga;
hoge( &fuga );
だと、ポインタの方が違うとワーニング
hoge( (void**)&fuga );
だと、strict aliasingのワーニングになってしまいます。
void **という引数指定をするのはおかしな事なのでしょうか?
int hoge( void * );
という定義にするとなんだか意図が異なる関数のような
int hoge( char * );
とポインタの型を決めてしまうのも意図が異なるような
・・・というあたりで行き詰まっています。
0188デフォルトの名無しさん
2010/05/26(水) 00:12:47参照呼び出しに使うため汎用のポインターを関数に渡すのに、 void **を使うことができるか。
A:
移植性まで考れば不可能である。C言語には汎用のポインターへのポ インター型は存在しない。void *が汎用のポインターとして振る舞う のは、他の型のポインターをvoid *に設定したり参照するときに、
自動的に変換が行われるからである。void *以外の何かを指している void **を使って間接参照しようとすると、この変換は実行できない (隠れた正しいポインターの型がわからない)。
0189デフォルトの名無しさん
2010/05/26(水) 00:13:250190デフォルトの名無しさん
2010/05/26(水) 00:25:200191デフォルトの名無しさん
2010/05/26(水) 00:27:14と、いうことは汎用性をあきらめて特定の型のポインタのポインタとするか
ポインタは戻り値で返すように作るかしかないということでしょうか?
それともほかに常套手段のようなものがありますか?
0192デフォルトの名無しさん
2010/05/26(水) 00:28:450193デフォルトの名無しさん
2010/05/26(水) 00:44:050194デフォルトの名無しさん
2010/05/26(水) 00:44:420195デフォルトの名無しさん
2010/05/26(水) 02:31:02f((void**)&p);
char *fuga = (char*)p;
てのはどうよ?
0196デフォルトの名無しさん
2010/05/26(水) 22:10:39こだわるわけでもないですが
いい方法があるなら知りたい使いたいというわけで
ないのなら特に気にしないで適当に
>>195
確かにその方法ならキャスト不要ですが
わざわざそのためだけに別の変数を定義するのも・・・
って事で、気にしないことにします
0197デフォルトの名無しさん
2010/05/27(木) 00:02:35T **pp_cast(U **pp) {
return reinterpret_cast<T**>(pp);
}
char *p;
f(pp_cast<void>(&p));
0198デフォルトの名無しさん
2010/05/27(木) 14:00:25実は>>109=>>122なんだ
自分のミスを自分で突っ込んだだけなんだよ
0199デフォルトの名無しさん
2010/05/27(木) 15:31:44char as_status;
int x;
int y;
int cost;
int heuristic;
int score;
}CELL;
void SetScoreBubbleSort(const CELL*& node, CELL*& list){
int cnt(0);
// ソート開始
while( ( node->cost > list[cnt].cost ) && ( list[cnt].cost != 0 ) ){
cnt++;
}
list[cnt] = *node;
}//続く
0200デフォルトの名無しさん
2010/05/27(木) 15:35:54int main(void){
// ---上・省略---
// 床セルのデータ生成(newの二次元配列)
CELL** cell_floor;
int cnt(0);
int cnt2(0);
cell_floor = new CELL* [CellWidth];
for(cnt=0; cnt<CellWidth; cnt++){
cell_floor[cnt] = new CELL[CellLength];
// Astarソート用セルリスト生成(ポインタ型)
CELL** open_list;
open_list = new CELL*[(CellWidth * CellLength)];
// ---途中・省略---
SetScoreBubbleSort(cell_floor[x][y], open_list);//★ここでコンパイルエラー
// ---途中・省略---
// 床セルのデータの削除(deleteの二次元配列)
for(cnt2=0; cnt2<CellLength; cnt2++){
delete[] cell_floor[cnt2];
}
delete[] cell_floor;
// Astarソート用セルリスト削除
delete[] open_list;
}
ってやってるんだけど、コンパイルするとerror C2664: 'SetScoreBubbleSort' : 1 番目の引数を 'CELL' から 'const CELL *&' に変換できません。って出るんだけどどうしたらいい?
0201デフォルトの名無しさん
2010/05/27(木) 15:58:460202199、200
2010/05/27(木) 16:04:080203デフォルトの名無しさん
2010/05/27(木) 16:48:540204199、200
2010/05/27(木) 16:55:58配列の形式でそのまま渡せばポインタの先頭アドレスが入ると思って&はつけてなかったけどつけてコンパイルしてみた。
そしたら「error C2664: 'SetScoreBubbleSort' : 1 番目の引数を 'CELL *__w64 ' から 'const CELL *&' に変換できません。」になった。
0205デフォルトの名無しさん
2010/05/27(木) 17:21:210206199、200
2010/05/27(木) 17:33:00ポインタ受け取る方の参照演算子&を除いて
void SetScoreBubbleSort(const CELL* node, CELL* list)とし、
int main{}の中の部分は
SetScoreBubbleSort(&cell_floor[x][y], *open_list);
としたら一応、コンパイルエラーは取れた。
関数使うときにポインタ渡したいのに*つけるのは気が引けたけど、エラーになる。
関数が抜けたときにまともに値が反映されてるか禿げしく不安・・・。
0207デフォルトの名無しさん
2010/05/27(木) 17:47:21引数として渡したいものが、
・CELL
・CELLへのポインタ
・CELLへのポインタのポインタ
の何れなのかをはっきりさせよう
0208199、200
2010/05/27(木) 18:16:14引数として渡したいのは「cell_floorの先頭アドレス」と「open_listの先頭アドレス」です。
CELLは型名なので。
0209デフォルトの名無しさん
2010/05/27(木) 18:21:100210デフォルトの名無しさん
2010/05/27(木) 18:22:590211199、200
2010/05/27(木) 18:25:160212デフォルトの名無しさん
2010/05/27(木) 18:46:47(先頭)アドレスというのは値のことであり、その値の型として
・CELLへのポインタ
・CELLへのポインタのポインタ
があるということ。
同じ値であっても型が違うんだよ。その変がよくわかってないんじゃないか。
0213199、200
2010/05/27(木) 19:09:041番目の引数の配列の中のポインタの先の値(2次元配列)を
2番目の引数の配列の中のポインタの先の値(1次元配列)と比較した後に
1番目の引数の配列の中のポインタを2番目の中にコピーしようとする意図があります。
0214199、200
2010/05/27(木) 19:50:460215デフォルトの名無しさん
2010/05/28(金) 03:42:27"/dev/stdin", "/dev/stdout"と記述することができたと思いますが
Windows上のC++(Visual C++ 2010 Express)ではどのように記述
すれば良いでしょうか?
0216デフォルトの名無しさん
2010/05/28(金) 06:40:03#include <stdio.h>
main(){
// FILE *stdout;
fprintf(stdout,"err");
}
0217デフォルトの名無しさん
2010/05/28(金) 07:14:52一般のファイルの入出力用に書かれたプログラムをそのまま利用して
標準入出力の読み書きをするにはどうするの?という質問だと思う。
0218デフォルトの名無しさん
2010/05/28(金) 07:54:26if(1==0){
fp = fopen("/dev/stdin");
}else{
fp = stdin;
}
か、コメントにすればいいのではないか。例をw
0219デフォルトの名無しさん
2010/05/28(金) 08:57:260220デフォルトの名無しさん
2010/05/28(金) 09:21:13使えるわけないだろ
0221デフォルトの名無しさん
2010/05/28(金) 09:59:12使えないって確認した?
>>215
Linux MS-DOS
/dev/stdin con
/dev/stdout con
/dev/null nul
のように対応するからやってみて。
>>216
「fprintfに標準出力」じゃ日本語が破綻している。
0222デフォルトの名無しさん
2010/05/28(金) 11:34:33con は入力には使えるが出力には使えない
お前こそ試したことあるのか?
0223デフォルトの名無しさん
2010/05/28(金) 11:52:270224221
2010/05/28(金) 11:54:33別に、「使えるに決まっているから>220は嘘だ」なんて書いていないから安心してね♥
0225デフォルトの名無しさん
2010/05/28(金) 11:55:29bcc5.82ではできた
0226デフォルトの名無しさん
2010/05/28(金) 12:14:30環境依存せず stdout と stdin を使うのがいい
バカどもの発言には惑わされない方がいいよ
0227デフォルトの名無しさん
2010/05/28(金) 12:30:00話がわからないのなら、無理に書かなくていいよ。
今は、「標準入出力の環境依存したデバイス名は何?」って話題だからね。
それとも、環境依存しないデバイス名が存在しているなんて妄想に囚われているのかい?
0228デフォルトの名無しさん
2010/05/28(金) 15:05:42アンカー見てないの?
>>215 に対するレスだよ
お前が振ったくだらん話題には興味ないよ
自意識過剰にも程があるよ
0229デフォルトの名無しさん
2010/05/28(金) 15:08:30Windows API の CreateFile で CONIN$ と CONOUT$ というのもある
0230デフォルトの名無しさん
2010/05/28(金) 15:08:320231215
2010/05/28(金) 15:23:44で問題なく動きました。
ありがとうございました。
0232デフォルトの名無しさん
2010/05/28(金) 17:58:460233デフォルトの名無しさん
2010/05/28(金) 20:15:13しょうがないだろう。
0234デフォルトの名無しさん
2010/05/28(金) 20:28:000235233
2010/05/29(土) 01:02:34知らなかったから
「標準入力をファイルとしてオープンする」という質問になっちゃったんでしょう。
>>231結果的に欲しかったのはファイルハンドルだったから。
0236デフォルトの名無しさん
2010/05/29(土) 09:40:18どの程度のレベルまで仕様とか実装を練りこむ?
0237デフォルトの名無しさん
2010/05/29(土) 09:45:09理由が政治的かメモリサイズかによって違ってくるな。
0238デフォルトの名無しさん
2010/05/29(土) 09:47:14ただ、boostに不慣れな人がいてとりあえず今回はなしで、という感じ
0239デフォルトの名無しさん
2010/05/29(土) 09:56:48その判断は今回だけではすまないし後々後を引く。スマポは後から導入が面倒だから今後も見送りになりやすいぞ。
スマポ作るならboost::shared_ptrかstd::tr1::shared_ptrのインターフェース互換にして後にusingで切り替えられるようにすることを勧める。
0240デフォルトの名無しさん
2010/05/29(土) 09:58:050241デフォルトの名無しさん
2010/05/29(土) 10:08:37この場合の選定基準は理解が簡単でトレーニングの必要が少ないライブラリだけを許可することかな
shared_ptrやoptionalとか、その辺の解説サイトを流し読みすれば理解できるでしょ
0242デフォルトの名無しさん
2010/05/29(土) 10:12:230243デフォルトの名無しさん
2010/05/29(土) 10:13:400244デフォルトの名無しさん
2010/05/29(土) 17:16:50気が付かないうちに循環関係になっててメモリリークを引き起こしちゃって原因の判明に苦労したのだが
もうこれは気をつける以外に対応がないものなのか?
0245デフォルトの名無しさん
2010/05/29(土) 17:55:19デバッグ終了時にリークはレポートされるから、レポートされたときの版のコミットログ調べればすぐに特定できると思う。
循環参照が起きるパターンは限られてるんで、その場で対応すればいいと思うよ。
予想外の循環参照が起きるのは設計が悪いとしか言いようがない。たとえば参照の方向を一定にし、前方参照とshared_from_thisを使わない設計にすれば循環参照は自然に避けられる。
0246デフォルトの名無しさん
2010/05/30(日) 10:57:28printf関数が使えるんですけどどういうことですか?
単なる警告なだけでエラーにならないのが不思議です。
本にはインクルードせよみたいに書いてあるのに
じゃあ何のためにインクルードするの?って感じなんですが・・・。
0247デフォルトの名無しさん
2010/05/30(日) 11:04:15戻り値の型が int で、引数が (...) であるのと同じように解釈されて実行される。
だから、math.h をインクルードせずに sin(1) とかやると
変になる(int sin(int) であると解釈して実行されるので)など、
ちゃんとインクルードしないと意図しない動作を引き起こす恐れがあるので、
必ずインクルードすること。
(数学関数を特別視してちゃんとdoubleにしてくれるコンパイラもあるけど、
それはそのコンパイラ独自の仕様)
C++なら文法エラー。
0248デフォルトの名無しさん
2010/05/30(日) 11:34:35これってコンテナのoperator[]の引数もintあるいはintN_tにしろってこと?
あとintは少なくとも32bitあると考えても良いって書いてあるけどそんな保証はないよね?
0249デフォルトの名無しさん
2010/05/30(日) 11:58:150250デフォルトの名無しさん
2010/05/30(日) 12:22:040251デフォルトの名無しさん
2010/05/30(日) 12:29:440252デフォルトの名無しさん
2010/05/30(日) 16:10:26100.123001となってしまうのは何故ですか?
0253デフォルトの名無しさん
2010/05/30(日) 16:11:280254デフォルトの名無しさん
2010/05/31(月) 03:48:08例外でデバッグが止まると時々,終了できなくなります.
デバッグ→すべて中止でも止まらない,タスクマネージャのプロセスにも表示されない...
プロセスIDを調べてPskillで指定しても終了できません.
コンソールwindowは残ったままなんですが….おかげでwindowsごとリセットしていますが,
何か止める方法orこうならないための対策ありますか.
0255デフォルトの名無しさん
2010/05/31(月) 08:07:33Windows自体再起動も終了も出来なくなるし、放置すると全体がフリーズしてすごく困る。
0256デフォルトの名無しさん
2010/05/31(月) 12:29:22>>255
CTFMONってプロセスがあったらキルしてからデバッグして味噌
0257デフォルトの名無しさん
2010/05/31(月) 14:14:42The problem here is that our template was instantiated for the type char,
which turns out to be too by introducing an additional template parameter AccT
の英文は
「この問題はテンプレートは文字型についてインスタンス化されたことのことです。」
コンマまではこの訳であってますよね。その後は,
「witchはまた追加パラメーターACCTの導入によるもでであることがはんめいした」
であってますよね?
witchが指すものが前文に無いようにおもえて翻訳できません。
詳しく教えてください。
0258デフォルトの名無しさん
2010/05/31(月) 14:28:020259デフォルトの名無しさん
2010/05/31(月) 14:34:52翻訳してください。
0260デフォルトの名無しさん
2010/05/31(月) 15:17:530261デフォルトの名無しさん
2010/05/31(月) 15:19:39ありがと。今度なったら試してみる。
0262デフォルトの名無しさん
2010/05/31(月) 15:22:350263デフォルトの名無しさん
2010/05/31(月) 15:23:180264デフォルトの名無しさん
2010/05/31(月) 15:24:180265デフォルトの名無しさん
2010/05/31(月) 15:25:100266デフォルトの名無しさん
2010/05/31(月) 15:26:360267デフォルトの名無しさん
2010/05/31(月) 15:30:550268デフォルトの名無しさん
2010/05/31(月) 15:34:23存在することがが明らかになる
0269デフォルトの名無しさん
2010/05/31(月) 15:37:29ここでの問題は、追加テンプレートAccTの導入からもわかるように、
我々のテンプレートが文字型についてインスタンス化されてることです。
0270デフォルトの名無しさん
2010/05/31(月) 15:40:130271デフォルトの名無しさん
2010/05/31(月) 17:22:57#pragma ○○
・・・
#pragma end○○
と書けば横の+、−でコードを格納できたと思いますが、
忘れてしまったので教えてもらえませんか?
0272デフォルトの名無しさん
2010/05/31(月) 17:58:120273デフォルトの名無しさん
2010/06/01(火) 10:42:150274デフォルトの名無しさん
2010/06/01(火) 11:56:59static変数はスコープがソースコード単位になるから
他のソースコードと名前が重複しても大丈夫
0275デフォルトの名無しさん
2010/06/01(火) 12:06:550276デフォルトの名無しさん
2010/06/01(火) 14:15:290277デフォルトの名無しさん
2010/06/01(火) 19:21:16何かいい方法はありませんか?
現在は
#define COM 1
#ifdef COM
~折りたたみたい部分~
#endif
といった使い方をしていますがスマートではなく、何かいい方法がないか探しています
0278デフォルトの名無しさん
2010/06/01(火) 19:25:24それが問題だ
0279デフォルトの名無しさん
2010/06/01(火) 19:28:52すいません移動します
0280デフォルトの名無しさん
2010/06/01(火) 20:00:340281デフォルトの名無しさん
2010/06/01(火) 20:55:03灯台下暗し
0282デフォルトの名無しさん
2010/06/02(水) 01:42:20基本クラスのメンバ関数から派生クラスのデータメンバを変更するには
どういった操作がありますでしょうか?
基本クラスのメンバ関数に派生クラスのオブジェクトのアドレスを
渡してみたりしたのですがコンパイルエラーで上手くいきませんでした。
よろしくお願いします。
0283デフォルトの名無しさん
2010/06/02(水) 02:40:090284デフォルトの名無しさん
2010/06/02(水) 07:44:390285デフォルトの名無しさん
2010/06/02(水) 17:11:03参考になりました。ありがとう!
0286デフォルトの名無しさん
2010/06/02(水) 17:13:542. 構造体の中にint型のポインタhogeがある
3. mallocを使って*tのメモリを確保
3. mallocを使ってhogeにint型x個分のメモリを確保
4. fwriteで構造体をファイルに書き込みたいが、二項目はどうやって指定すればいい?
0287デフォルトの名無しさん
2010/06/02(水) 17:18:28構造体のサイズが増えるわけでもないし。
0288デフォルトの名無しさん
2010/06/02(水) 17:27:25上手くいかん
typedef struct test_t {
int a,b,c,d,e;
int *p;
} test_t;
test_t *t;
t = (test_t *)malloc(sizeof(test_t));
t->p = (int *)malloc(sizeof(int)*60);
printf("%d",sizeof(*t));
で、24って出る
0289デフォルトの名無しさん
2010/06/02(水) 17:31:01fwrite(t, sizeof(int), x, fp);
だろ
ただし、
>1. 構造体のポインタ*tがある
でなく、
>1. 構造体のポインタtがある
であるならということ。3.も同様。
もし原文通りなら
fwrite(*t, sizeof(int), x, fp);
となる
0290デフォルトの名無しさん
2010/06/02(水) 17:32:28pに確保した領域のサイズは構造体とは別。
0291デフォルトの名無しさん
2010/06/02(水) 17:32:450292デフォルトの名無しさん
2010/06/02(水) 17:34:55構造体には他のメンバもあるのか。
それなら fwrite を2回する必要があるだろ。
fwrite(t, sizeof(test_t), 1, fp);
fwrite(t->p, sizeof(int), x, fp);
0293デフォルトの名無しさん
2010/06/02(水) 17:42:39知ってる。だから質問した
>>292
それが一番スマートかな
構造体からpをそもそも切り離しとくってのも一つの手か
thx
0294デフォルトの名無しさん
2010/06/02(水) 17:47:000295デフォルトの名無しさん
2010/06/02(水) 17:55:290296デフォルトの名無しさん
2010/06/02(水) 17:59:170297デフォルトの名無しさん
2010/06/02(水) 18:13:150298デフォルトの名無しさん
2010/06/02(水) 18:39:27shared_ptrの中身を覗いてみたらpublicメンバだった
こんなものなの
0299デフォルトの名無しさん
2010/06/02(水) 18:49:20public でないと参照できないじゃん
0300デフォルトの名無しさん
2010/06/02(水) 18:54:47まあそうなんですが
boostのことだからもっと複雑怪奇な方法で回避してる物かと思ったのでw
0301デフォルトの名無しさん
2010/06/02(水) 19:25:240302デフォルトの名無しさん
2010/06/02(水) 21:51:31上は、はじめてのCという本に乗っていたコードを
少し書き換えたもの(printfをcoutに、など)です
結果が3→2→1→0→1→2→3と表示される内、
行きの3→2→1→0は分かるのですが、
帰りの0→1→2→3の部分がどうしてそうなるのか、さっぱり分かりません
tline(int x)に渡す引数を増加させる処理はないように見えるのですが、
どなたか教えていただけないでしょうか
0303デフォルトの名無しさん
2010/06/02(水) 21:54:410304デフォルトの名無しさん
2010/06/02(水) 22:00:503を表示する
recfunc(2)を呼び出す
2を表示する
recfunc(1)を呼び出す
1を表示する
recfunc(0)を呼び出す
0を表示する
recfunc(0)から抜ける
1を表示する
recfunc(1)を抜ける
2を表示する
recfunc(2)を抜ける
3を表示する
recfunc(3)を抜ける
0305デフォルトの名無しさん
2010/06/02(水) 22:05:54冷静になってみると仰る通り2回表示してますね
ifの中身だけ見て、その下を見てませんでした
ありがとうございます
>>304
詳しい説明ありがとうございます
小一時間も考え込んでた自分が恥ずかしいです
低レベルな質問にも関わらずお答えいただき、お二方に感謝します
ありがとうございました
0306デフォルトの名無しさん
2010/06/02(水) 22:48:07どうもコンパイラにより対応状況がまちまちらしい
boostのコードをみてみたら狡賢いコードになってたw
public:
/*
〜省略〜
*/
#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS
private:
template<class Y> friend class shared_ptr;
template<class Y> friend class weak_ptr;
#endif
T * px; // contained pointer
boost::detail::shared_count pn; // reference counter
0307デフォルトの名無しさん
2010/06/02(水) 22:51:08((p && q) && (*p == *q)) || (p || q)
0308デフォルトの名無しさん
2010/06/02(水) 22:57:480309デフォルトの名無しさん
2010/06/02(水) 23:01:270310デフォルトの名無しさん
2010/06/02(水) 23:06:080311デフォルトの名無しさん
2010/06/02(水) 23:07:300312デフォルトの名無しさん
2010/06/02(水) 23:20:330313デフォルトの名無しさん
2010/06/02(水) 23:25:480314デフォルトの名無しさん
2010/06/02(水) 23:29:560315デフォルトの名無しさん
2010/06/02(水) 23:58:39p-q
0316デフォルトの名無しさん
2010/06/03(木) 00:10:520317デフォルトの名無しさん
2010/06/03(木) 00:15:550318デフォルトの名無しさん
2010/06/03(木) 06:52:180319デフォルトの名無しさん
2010/06/03(木) 09:21:580320デフォルトの名無しさん
2010/06/03(木) 09:27:530321デフォルトの名無しさん
2010/06/03(木) 09:42:160322デフォルトの名無しさん
2010/06/03(木) 09:48:520だと以降が実行されない
p == q は p と q の両方が0でも真になってしまう
0323デフォルトの名無しさん
2010/06/03(木) 09:50:42それが >307 が求めていたものでしょ。
0324デフォルトの名無しさん
2010/06/03(木) 09:55:05ポインタが同じところをさしているなら、ポインタの先を見るまでもない。
0325デフォルトの名無しさん
2010/06/03(木) 10:46:05大人になれば分かる
0326デフォルトの名無しさん
2010/06/03(木) 11:09:17ポインターの値が同じでも実体の値が違うことがある
0327デフォルトの名無しさん
2010/06/03(木) 11:16:500328デフォルトの名無しさん
2010/06/03(木) 11:19:07PODとは限らんからね
>>324 はC++でプログラム組んだことがないんだと思う
0329デフォルトの名無しさん
2010/06/03(木) 11:29:17そんなスマポは使いたくない。
0330デフォルトの名無しさん
2010/06/03(木) 11:30:37普通のポインタじゃなくて、スマートポインタの話をしていたの?
0331デフォルトの名無しさん
2010/06/03(木) 11:31:470332デフォルトの名無しさん
2010/06/03(木) 11:32:550333デフォルトの名無しさん
2010/06/03(木) 11:33:10ってどんな用途に使うスマートポインタなんでしょうか?
気になる
0334デフォルトの名無しさん
2010/06/03(木) 11:47:13PODでなければ普通に起こるだろ。
0335デフォルトの名無しさん
2010/06/03(木) 11:49:35それが保証されるのはCに限った話、C++は違うね
0336デフォルトの名無しさん
2010/06/03(木) 11:51:560337デフォルトの名無しさん
2010/06/03(木) 12:03:17例えばベースクラスが共通(またはどちらかがベースクラス)で、
片方への cast operator が定義されている場合とか
こういうコード普通に沢山存在してるだろ
有益かどうかはお前のさじ加減だし
0338デフォルトの名無しさん
2010/06/03(木) 12:19:45参照はがしても同じ型で比較されるだけだからキャストは関係ないだろ
0339デフォルトの名無しさん
2010/06/03(木) 12:21:59class B { int x; };
class C { int y; };
class D : public B, C { int z; };
int main() {
D* p = new D();
B* q = p;
printf("p == q => %d\n", p == q);
printf("*p == *q => %d\n", *p == *q);
}
D に、どんな演算子を定義すればいいんですか?
0340デフォルトの名無しさん
2010/06/03(木) 12:28:41!=のおかしなオーバーロードのことでいいんでしょうか?
なんだか!=が真になるのが普通にあることみたいにいわれてるようなので
ひょっとしてこれではないのでしょうか?
あと>>334はPODって言ってますが組み込み型の間違いであっていますか?
PODの構造体は比較演算子が使えないですよね?
0341339
2010/06/03(木) 12:29:06#include <stdio.h>
class B { int x; };
class D : public B { int y; };
bool operator==(const D&, const B&) { return false; }
int main() {
D* p = new D();
B* q = p;
printf("p == q => %d\n", p == q);
printf("*p == *q => %d\n", *p == *q);
}
0342339
2010/06/03(木) 12:31:53operator == を再定義したら、「実体の値が違う」ことにはならないか。
0343デフォルトの名無しさん
2010/06/03(木) 12:35:37>>318 はどちらにしろ間違ってるんで、いち抜けする。
if p == q はダメだろう。
0344デフォルトの名無しさん
2010/06/03(木) 12:41:23>>318 のどこが間違っているって?
0345デフォルトの名無しさん
2010/06/03(木) 12:42:260346デフォルトの名無しさん
2010/06/03(木) 12:43:41(2) p == q で
(3) *p と *q の実体が違う
ということはありえないで、ファイナルアンサー?
0347デフォルトの名無しさん
2010/06/03(木) 12:45:24そうなるように書くことはできるが、副作用も含めてそうならないようにコードを書くのが当たり前の感覚
0348デフォルトの名無しさん
2010/06/03(木) 12:47:56p=123456;
q=123456;
if p == q はダメだろう。
0349デフォルトの名無しさん
2010/06/03(木) 12:49:490350デフォルトの名無しさん
2010/06/03(木) 12:51:270351デフォルトの名無しさん
2010/06/03(木) 12:51:41自分で適当なアドレス突っ込んだ場合、
「参照剥がしして〜」
の条件に合わなくなる(参照はがせない)
って言ってるんだろ?
アホかと思うがwwwww
0352デフォルトの名無しさん
2010/06/03(木) 12:53:340353デフォルトの名無しさん
2010/06/03(木) 12:58:58これが違う
p と q が同じ型だとはどこにも書いてないだろ
0354デフォルトの名無しさん
2010/06/03(木) 13:01:28違う方じゃコンパイルエラーだろ
0355デフォルトの名無しさん
2010/06/03(木) 13:02:35operator B();
というメソッド。
0356デフォルトの名無しさん
2010/06/03(木) 13:03:16だからベースクラスが共通な場合って言ってるだろ
0357デフォルトの名無しさん
2010/06/03(木) 13:03:290358デフォルトの名無しさん
2010/06/03(木) 13:06:31共通でなくどっちかがベースクラスの場合だね
0359デフォルトの名無しさん
2010/06/03(木) 13:07:11http://codepad.org/q3SbZGSj
同じでもエラーだよ
0360デフォルトの名無しさん
2010/06/03(木) 13:12:310361デフォルトの名無しさん
2010/06/03(木) 13:12:40何考えてんだか…
だったらC++と言わず
char *p;
long *q;
でもいいわけでね…
0362デフォルトの名無しさん
2010/06/03(木) 13:15:18>pとqは違うクラスです、とか、もう無茶苦茶
どっから同じクラスだって前提が出てきたんだ。
君の思い込みだろ?
0363デフォルトの名無しさん
2010/06/03(木) 13:15:300364デフォルトの名無しさん
2010/06/03(木) 13:17:35次は、「釣りでした」とか「何あつくなってんの」とかかよ。
0365デフォルトの名無しさん
2010/06/03(木) 13:17:440366デフォルトの名無しさん
2010/06/03(木) 13:22:16実務だと仕様書とか解釈が厳格になるからね
型が同じと書かれていないのに、勝手にそういう前提をおいたりしないんだよ
まぁ趣味の人にはわからない話かもしれないけどね
0367デフォルトの名無しさん
2010/06/03(木) 13:23:210368デフォルトの名無しさん
2010/06/03(木) 13:26:520369デフォルトの名無しさん
2010/06/03(木) 13:45:09>>366は特殊な場合のみいってるよね。
0370デフォルトの名無しさん
2010/06/03(木) 13:54:550371デフォルトの名無しさん
2010/06/03(木) 13:57:220372デフォルトの名無しさん
2010/06/03(木) 13:58:57だから、趣味ならそれでいいんじゃない、大体動けばOK
でも仕事なら動かない場合とかあったら問題になる
だから最初から色んなケースを想定する
そういう習慣がついてんだよ
0373デフォルトの名無しさん
2010/06/03(木) 14:01:02繰り返すが、ここは趣味のスレ、お前は場違い、出て行け。
0374デフォルトの名無しさん
2010/06/03(木) 14:01:020375デフォルトの名無しさん
2010/06/03(木) 14:04:46ん?
最初の質問で p と q が同じ型だと書いてなかったら、
俺は同じ型でない場合も想定してただけだよ。
仕事でこういう場合に、勝手に同じ型だけしかありえんだろうって考えで
コードを書いたらとんでもないバクを生むことになるから。
0376デフォルトの名無しさん
2010/06/03(木) 14:07:110377デフォルトの名無しさん
2010/06/03(木) 14:09:520378デフォルトの名無しさん
2010/06/03(木) 14:10:110379デフォルトの名無しさん
2010/06/03(木) 14:10:42プログラムが暴走して損害だしても、それは入力したユーザのせいになるよ。
プログラマがそんな細かいことまで考える義務はない。
プログラマの前提が優先されるからね。
0380デフォルトの名無しさん
2010/06/03(木) 14:12:47お前以外の99人はpとqは同じ方という前提なんだよ
その時点でお前がまちがってるということ
0381デフォルトの名無しさん
2010/06/03(木) 14:14:25それがいやなら北朝鮮でもジンバブエでも好きなところいけ。
0382デフォルトの名無しさん
2010/06/03(木) 14:16:17そうならないケースを考える馬鹿が一人いるってこと
そして沢山の人から非難をあびている
0383デフォルトの名無しさん
2010/06/03(木) 14:20:45をみて
/*
p=q;
*/
まで仮定しないといけなくなるな。
0384デフォルトの名無しさん
2010/06/03(木) 14:23:500385デフォルトの名無しさん
2010/06/03(木) 14:26:570386デフォルトの名無しさん
2010/06/03(木) 14:27:490387デフォルトの名無しさん
2010/06/03(木) 14:32:58指摘の時点でそれを言ってないとダメ。
0388デフォルトの名無しさん
2010/06/03(木) 14:37:51クラス foo と bar を用意したとします。
bar は foo 1つにつき1インスタンス必要なので、foo のコンストラクタで bar のインスタンスを作ってます。
ただ、bar は foo の情報を元に処理するので、bar のインスタンスを作る際の引数に、this (foo) を渡そうと思いました。
要するに、相互参照です。
foo.h と bar.h とした場合、include 順の指定がうまく行かずこまっています。
これは、この設計が誤っていますか?
ヘッダファイルや宣言の記述に細工が必要ですか?
正しい考え方や、記述の仕方を教えてください。
0389デフォルトの名無しさん
2010/06/03(木) 14:38:09>>347
俺も基本的にそういう考えだよ。別に俺がそう書きたいというわけでなく、
p==qかつ*p!=*q は存在しないということに対して、存在する場合もあると言っただけだよ。
そもそも cast operator を定義する時点で怪しいコードになってくる。
けどその有用性を利用しているコードも存在している。
だから、その性質を理解しておくのは必要なことだと思っている。
例えば行列を表すクラス A があって、
それを拡張してインバース属性を持つクラス B 作るとする。
このときに B には opertore A() を用意しておき、
インバース属性が立っていれば逆行列を返すようにするとか
そうすると A を使用していたコードがそのまま使える。
こういう手法を使うことはよくあるだろ。(少なくとも使ってる奴がいるだろう。)
0390デフォルトの名無しさん
2010/06/03(木) 14:41:490391デフォルトの名無しさん
2010/06/03(木) 14:43:120392デフォルトの名無しさん
2010/06/03(木) 14:43:51'foo.h' で
class bar;
class foo {
.....
};
のように、空のクラス宣言をしてやれば回避できる場合もある。
これでいけるかどうかは相互参照の内容次第。
0393デフォルトの名無しさん
2010/06/03(木) 14:44:31死ねばいいのに
0394デフォルトの名無しさん
2010/06/03(木) 14:51:43インナークラスとして、一つのヘッダーにまとめてしまうとか
class foo {
class bar {
・・・・
};
・・・・
};
0395388
2010/06/03(木) 14:54:43やってみたのですが、やっぱり仰るとおり相互参照次第で、コンストラクタに this を渡したい場合はそれ相応の宣言が必要でした。
この考え方(構成)が間違っているという事ですかね。。
0397デフォルトの名無しさん
2010/06/03(木) 19:50:52例文
int a;
printf("値をいれてください:");
scanf("%d",&a);
if(a<0&&a<9)
{
printf("値が違います!!");
}
とこういう文があったとして、aにたとえば10を入力するとエラーメッセージを出してもう一度
入力させる処理に戻りたいんですがなにを付け加えればいいですか?
0398デフォルトの名無しさん
2010/06/03(木) 19:55:370399デフォルトの名無しさん
2010/06/03(木) 20:01:53printf("値をいれてください:");
scanf("%d",&a);
if(0<=a && a<=9) break;
printf("値が違います!!");
}
0400デフォルトの名無しさん
2010/06/03(木) 20:03:24INPUT:
printf("値をいれてください:");
scanf("%d",&a);
if(a<0&&a<9)
{
printf("値が違います!!");
goto INPUT;
}
0401デフォルトの名無しさん
2010/06/03(木) 20:22:20do {
printf("値をいれてください:");
scanf("%d",&a);
if (a < 0 && a < 9) {
printf("値が違います!!");
} else {
0402デフォルトの名無しさん
2010/06/03(木) 20:23:25ごめんね
break;
}
while (true);
0403デフォルトの名無しさん
2010/06/03(木) 20:56:54たくさん回答ありがとうございます。gotoが一番簡単そうですね、勉強になりました。
0404デフォルトの名無しさん
2010/06/03(木) 21:56:15こうする手もある
int a;
while (!Input(&a)) { }
int Input(int* p) {
printf("値をいれてください:");
scanf("%d", p);
if(*p<0&&9<*p) {
printf("値が違います!!");
return 0;
}
return 1;
}
0405デフォルトの名無しさん
2010/06/03(木) 22:07:460406デフォルトの名無しさん
2010/06/03(木) 22:13:42gotoを使ったほうがやりたい事を的確に表現している場合はgotoを使うほうが良い
0407デフォルトの名無しさん
2010/06/03(木) 22:39:28あんまり>>397の質問のレベル的にgotoを
使う癖は付けない方が良いと思う。
0408デフォルトの名無しさん
2010/06/04(金) 00:47:020409デフォルトの名無しさん
2010/06/04(金) 00:56:58-inf
0410デフォルトの名無しさん
2010/06/04(金) 00:57:590411408
2010/06/04(金) 01:10:36今xy軸上に三角形を作るプログラムをやっていて3点を直線で結び出来上がる三角形があるとして
ある線が傾き無限の直線になったとき三角形が描けなくなります。※2点のx座標が等しい場合
それで無限になったとき(yの変化量/0)になったら回避したいので質問させていただきました
0412デフォルトの名無しさん
2010/06/04(金) 02:00:070413デフォルトの名無しさん
2010/06/04(金) 02:51:47ある線分の傾きが無限になったとき三角形が描けなくなります。※2点のx座標が等しい場合
それで無限になったとき(yの変化量/0)になったら回避したいので質問させていただきました
0414デフォルトの名無しさん
2010/06/04(金) 02:53:44三角形がかけないのは、3点が同一直線上にある場合。
0415デフォルトの名無しさん
2010/06/04(金) 05:51:03なぜこれで判定しない?
0416デフォルトの名無しさん
2010/06/04(金) 11:20:49Class B;
Class A {
B& m_b;
};
のような状態で m_b をコンストラクトより後のタイミングでセットしたいのです。
ポインタにすればできますが * を付ける必要があるので、参照でやりたいんです。
0417デフォルトの名無しさん
2010/06/04(金) 11:42:50生ポインタ弄るのが嫌な場合はboost::reference_wrapper的なのを使えばいいが、
operator* 等を使うのが嫌という要求は言語仕様の埒外。
0418デフォルトの名無しさん
2010/06/04(金) 12:06:35http://codepad.org/7goDNgTH
保証されてないよね
0419デフォルトの名無しさん
2010/06/04(金) 12:21:40>operator* 等を使うのが嫌という要求は言語仕様の埒外。
参照ってそういう機能だろ、問題はセットできるのが初期化時に限られてるということ
0420デフォルトの名無しさん
2010/06/04(金) 13:13:31いつのまにかぬるぽになってたりしないように。
0421デフォルトの名無しさん
2010/06/04(金) 15:13:51LLP64だと悲惨な事になりそうだな
0422デフォルトの名無しさん
2010/06/05(土) 09:42:28LLP64とかは関係ないと思われる
もちろん規格は保証してくれないが
ダミー変数の必要のない方法
ttp://codepad.org/h1sj56ka
もちろん実際に使っちゃだめだよ
0423デフォルトの名無しさん
2010/06/05(土) 10:47:02int x, y;
boost::optional<int &> opt(x);
opt.get() = 1; // x = 1
opt = y; // yに張替え
*opt = 2; // y = 2
0424デフォルトの名無しさん
2010/06/05(土) 10:48:230425デフォルトの名無しさん
2010/06/05(土) 10:58:50operator . がオーバーロードできない時点で参照剥がしの手間はかならず必要になる
代入と暗黙変換はその限りではないが
0426デフォルトの名無しさん
2010/06/05(土) 11:05:400427デフォルトの名無しさん
2010/06/05(土) 11:26:35圧縮情報を表す箇所って、規定無いよね?
abcdeabcdezをLZ77に掛けると、abcde[5,5]zとなるけど
[5,5]を判断する場合どうすれば良いの?
圧縮側もこちらで書いていいなら\\[5,5]とか目印入れれば分かるけど
解凍ソースのみで困ってる
0428デフォルトの名無しさん
2010/06/05(土) 11:40:520429デフォルトの名無しさん
2010/06/05(土) 11:51:35ソースは一切なし。圧縮したデータを見ることもまだ出来ない
それでいて、最初のLZ77を使ってるからと言われ
きちんと解凍出来るソースを書かなきゃいけないみたい
調べると、何処のサンプルも圧縮情報の前に適当なマーク入れたり
9bitにして、その後ろが圧縮情報か見たりしてるから、一発で動くのが書ける気がしない
0430デフォルトの名無しさん
2010/06/05(土) 12:00:370431デフォルトの名無しさん
2010/06/05(土) 13:48:250432デフォルトの名無しさん
2010/06/05(土) 22:41:12ちゃんと0で埋まる?それとも保障されてない?
0433デフォルトの名無しさん
2010/06/05(土) 22:43:52埋まらない。何もされない。
0434デフォルトの名無しさん
2010/06/05(土) 23:17:420435デフォルトの名無しさん
2010/06/06(日) 02:36:53ちなみに今継承あたりを勉強中です。
0436デフォルトの名無しさん
2010/06/06(日) 02:40:110437デフォルトの名無しさん
2010/06/06(日) 09:58:14難しいのは適切に使うこと。初心者はなんでもポインタで解決しようとしがち
C++とかもだいたい同じで言語仕様が難しいというより、どう使うのかが難しい。
いっぱい用語があるのも難しいところかも。pimplとか
0438デフォルトの名無しさん
2010/06/06(日) 10:03:110439デフォルトの名無しさん
2010/06/06(日) 10:08:35どう考えても書式が難しいのではなく概念が難しいから初心者はつまずくだろ
0440デフォルトの名無しさん
2010/06/06(日) 10:17:43関数ポインタの配列とか
概念は簡単でも書き方に戸惑う
0441デフォルトの名無しさん
2010/06/06(日) 10:21:320442デフォルトの名無しさん
2010/06/06(日) 11:32:38概念が簡単だとは言わないが、わけのわからん書式が、せっかく理解しかけた
初心者の脳を改めて引っ掻き回して台無しにするのも事実。
0443デフォルトの名無しさん
2010/06/06(日) 11:38:06int *a;
*aはint変数のように扱える。論理的かもしれないけど直感的ではないな。
イテレータも、二つのイテレータを使えば0個も表現できるってのも論理的だけど直感的ではなくわかりにくいね。
0444デフォルトの名無しさん
2010/06/06(日) 11:41:00だってお前らですら全員理解してるじゃんwww
0445デフォルトの名無しさん
2010/06/06(日) 11:47:360446デフォルトの名無しさん
2010/06/06(日) 11:50:160447デフォルトの名無しさん
2010/06/06(日) 11:51:350448デフォルトの名無しさん
2010/06/06(日) 11:59:430449デフォルトの名無しさん
2010/06/06(日) 12:13:04int *a;
int pa;
int asteriska;
int XXX;
これらの表記では、*a も pa も asteriska も XXX もすべて int型として扱える。
int の後ろに書いたものが、int型になる。
つまり、aの参照剥がしは*aと直感的に分かる。
*int p;
この表記では、pがint型へのポインタということが分かるのかもしれないが、
pをどう参照剥がしすればint型になるのかこの書式からは分からない。
以上の点で、前者の表記のほうが分かりやすいと考えられる。
0450デフォルトの名無しさん
2010/06/06(日) 12:19:44ならば、int *a;で変数の領域が確保されなきゃおかしいじゃん。
0451デフォルトの名無しさん
2010/06/06(日) 12:20:510452デフォルトの名無しさん
2010/06/06(日) 12:24:030453デフォルトの名無しさん
2010/06/06(日) 12:38:210454デフォルトの名無しさん
2010/06/06(日) 13:07:06遅れましたがありがとうございました
0455デフォルトの名無しさん
2010/06/06(日) 13:08:47*a が int だとよく分かる(キリッ とか言うから面倒なことになる
0456デフォルトの名無しさん
2010/06/06(日) 13:10:250457デフォルトの名無しさん
2010/06/06(日) 13:10:52とやりたい時はどうするの?
0458デフォルトの名無しさん
2010/06/06(日) 13:14:580459デフォルトの名無しさん
2010/06/06(日) 13:15:500460デフォルトの名無しさん
2010/06/06(日) 13:20:47俺は左から型に演算していくと理解してる
int const * const & a;
(((((int) const) *) const) &) a;
intをconstにして、そのポインタ型をとって、それをconstにして、その参照型をとって、それにaという名前をつける
add_ref<add_const<add_ptr<add_const<int>::type>::type>::type>::type a;
0461デフォルトの名無しさん
2010/06/06(日) 13:44:31こんなに深い宣言なんだぞ。キリッ
0462デフォルトの名無しさん
2010/06/06(日) 13:49:350463デフォルトの名無しさん
2010/06/06(日) 14:14:170464デフォルトの名無しさん
2010/06/06(日) 14:19:24つまり、C/C++の構文はダメダメってことだね。
0465デフォルトの名無しさん
2010/06/06(日) 14:22:540466デフォルトの名無しさん
2010/06/06(日) 14:37:030467デフォルトの名無しさん
2010/06/07(月) 22:37:110468デフォルトの名無しさん
2010/06/08(火) 20:20:00現在1クラス1ヘッダ&1ソース という形で30対のヘッダーとクラスがずらっと並んでいます。
他の方のプロジェクトを見るとヘッダの数だけがやたら多かったり、
逆にヘッダは1個しかなかったりする様なのですが、
1クラス1ヘッダ&1ソース というのは無駄で変なのでしょうか?
新クラスを作るたびに宣言程度のヘッダーを増やすのはやめて、
クラスの宣言程度のヘッダーはギッシリ纏めてしまったりした方が良いのでしょうか。
0469デフォルトの名無しさん
2010/06/08(火) 20:28:410470デフォルトの名無しさん
2010/06/08(火) 20:30:04○30対のヘッダーとソースがずらっと(訂正すみません)
0471デフォルトの名無しさん
2010/06/08(火) 20:37:11原則分けたほうがいいよ
0472デフォルトの名無しさん
2010/06/08(火) 21:57:340473デフォルトの名無しさん
2010/06/09(水) 00:48:47まぁ、関連のないクラスを纏めるのは論外だが。
インクルードファイルに関しては、ソースの数だけあっても全くおかしくはないと思う。
0474デフォルトの名無しさん
2010/06/09(水) 12:19:37業務開発なら珍しくない
メンテ時には、ひとつのファイルに詰め込むより
こっちのが良いことが多い
0475デフォルトの名無しさん
2010/06/09(水) 13:25:51int* p = new int[5];
int* q = new int[10];
int* z=p;p=q;q=z; //ポインタの交換
delete[] p; //どこまで開放されるのか?
delete[] q; //どこまで開放されるのか?
これ、メモリリークが起きたり、
逆に、開放しちゃいけない場所まで
開放されたりしないでしょうか?
0477デフォルトの名無しさん
2010/06/09(水) 13:50:540478デフォルトの名無しさん
2010/06/09(水) 14:54:43それはない
配列newは自分で確保したサイズを覚えているので
アドレスさえ渡せば配列deleteは間違えない
0479デフォルトの名無しさん
2010/06/09(水) 15:08:14安心しました。
ありがとうございました。
0480デフォルトの名無しさん
2010/06/09(水) 16:12:40http://codepad.org/8mjF6LOr
0481デフォルトの名無しさん
2010/06/09(水) 16:20:390482デフォルトの名無しさん
2010/06/09(水) 16:32:300483デフォルトの名無しさん
2010/06/09(水) 16:56:52入れてもらえなかった471涙目www
0484デフォルトの名無しさん
2010/06/09(水) 19:11:240485デフォルトの名無しさん
2010/06/09(水) 20:53:460486デフォルトの名無しさん
2010/06/09(水) 21:26:430487デフォルトの名無しさん
2010/06/09(水) 21:28:480488デフォルトの名無しさん
2010/06/10(木) 01:48:00ctfmonをkillっても駄目ダタ
やっぱりコンソールが閉じない&killできない。
激オソ報告スマソ
0489デフォルトの名無しさん
2010/06/10(木) 08:59:00つまり状態が1つで変化しないクラスのオブジェクトを何個も作るのは勿体無いと思うんだけど
これを共有する自然なコードってどう書く?シングルトンかな?
0490デフォルトの名無しさん
2010/06/10(木) 09:02:33環境依存の事を書いても仕方がない
BCCだとp[-4], q[-4]にサイズが入ってるぞ
0491デフォルトの名無しさん
2010/06/10(木) 09:10:140492デフォルトの名無しさん
2010/06/10(木) 09:12:470493デフォルトの名無しさん
2010/06/10(木) 09:21:50例えば関数 keisan()があったとして
return keisan();ってのは同じようにkeisan()に返すって意味ですか?
returunの概念がいまいちよくわからんのですが・・
0494デフォルトの名無しさん
2010/06/10(木) 09:23:54keisan()はkeisan関数を呼び出して、その値。
つまり、return keisan()はkeisan関数を呼び出して、その値を返す。
以上
0495デフォルトの名無しさん
2010/06/10(木) 09:24:330496デフォルトの名無しさん
2010/06/10(木) 09:30:21なるほど、わかりやすい
別にreturn使わなくても
int main(void)
{
keisan();
}
だけで呼び出せるけどどういうことでしょう?
0497デフォルトの名無しさん
2010/06/10(木) 09:31:360498デフォルトの名無しさん
2010/06/10(木) 09:34:26理解しやすいのだが、C言語はごちゃ混ぜに出来るし、戻り値を
捨ててしまえるというエレガント(?)な設計になっているため初心者が
ここで混同しやすい
0499デフォルトの名無しさん
2010/06/10(木) 09:39:12そこをなんとか・・
0500デフォルトの名無しさん
2010/06/10(木) 09:43:26たとえばkeisan()の戻り値型がdoubleだとすると
double a;
...
a = keisan();
return a;
と
return keisan();
は同じような意味になる
要するにこの関数は値を返すか返さないかの違いだけ
0501デフォルトの名無しさん
2010/06/10(木) 09:50:42関数ってのは返すのが当たり前じゃないんですか?
0502デフォルトの名無しさん
2010/06/10(木) 09:53:57そんな事はない
void kansuu(void);
のように戻り値の所にvoidと書いた関数は値を返さない
返そうとするとコンパイルエラーになる
0503デフォルトの名無しさん
2010/06/10(木) 09:55:47正しいプログラムなの?
0504デフォルトの名無しさん
2010/06/10(木) 10:01:36戻り型があるのにreturnを使わないと大抵のコンパイラでは警告が出る
正しいとは言えないが、戻り値を使わないプログラムだとそのまま動いて
しまう事がある
0506デフォルトの名無しさん
2010/06/10(木) 10:27:22#include<stdio.h>
int main(void){
int a;
scanf("%d",&a);
printf("%d\n",a);
}
エラーでないけどなwreturn使ったほうがいいのかこんな簡単なもんでも。
0507デフォルトの名無しさん
2010/06/10(木) 10:35:04誰もエラーが出るとは書いてないだろアホ
「警告が出るコンパイラが多い」と書いたんだよ日本語わかる?
0508デフォルトの名無しさん
2010/06/10(木) 10:43:52voidなら不問
0509デフォルトの名無しさん
2010/06/10(木) 10:45:37複雑なプログラムだけだろ。
0510デフォルトの名無しさん
2010/06/10(木) 11:41:180511デフォルトの名無しさん
2010/06/10(木) 11:50:52WindowsのGUIならvoid main()でもいいが
0512デフォルトの名無しさん
2010/06/10(木) 12:33:58その根拠は?
0513デフォルトの名無しさん
2010/06/10(木) 12:51:490514デフォルトの名無しさん
2010/06/10(木) 12:53:12根拠は俺様だ
LinuxなどのUNIX環境でvoid main()などあり得ない
シェルが実行ファイルの戻り値をほとんど使う
0515デフォルトの名無しさん
2010/06/10(木) 12:54:30使う場合は戻り値を使う
その時にvoid main()じゃ戻り値が不定値になってしまうだろうが
0516デフォルトの名無しさん
2010/06/10(木) 13:12:470が成功かもしれないし1がエラーかも知れないし、
それ以外の情報を戻り値が教えてくれるかもしれない。
だから何も返さない方が一般性が高いと思う。
0517デフォルトの名無しさん
2010/06/10(木) 13:18:43勝手に言ってろ
0518デフォルトの名無しさん
2010/06/10(木) 13:21:41http://www.opengroup.org/onlinepubs/000095399/functions/exit.html
ちゃんと規定されてる
0519デフォルトの名無しさん
2010/06/10(木) 13:29:29Cのstdlib.hににEXIT_SUCCESSとEXIT_FAILUREというマクロが
定義されているのは何のためだと思う?
無知にも程がある
0520デフォルトの名無しさん
2010/06/10(木) 13:35:46OSからみたら1か0にしか見えないの。
もし、プログラムが成功や失敗ではなくて
計算の結果を返して、その答えが1か0だった場合どうするの?
だから規定なんて無い。
0521デフォルトの名無しさん
2010/06/10(木) 13:37:53>>518が読めないのか?もしかして英語音痴か
0522デフォルトの名無しさん
2010/06/10(木) 13:38:56きたものだ
だからC言語の中でしか通用しないという言い訳はおかしい
0523デフォルトの名無しさん
2010/06/10(木) 13:56:41GCCでつくれたかどうかも分からない。
だから規定なんて無い。
0524デフォルトの名無しさん
2010/06/10(木) 14:08:06お前も頑固なやっちゃなー
そんな固い頭でプログラマで食って行けてるの?
0525デフォルトの名無しさん
2010/06/10(木) 14:10:09SEとしては食っていけるよ。
0526デフォルトの名無しさん
2010/06/10(木) 14:10:50ニートの癖に良く言うよ
0527デフォルトの名無しさん
2010/06/10(木) 14:11:23Java ->仮想マシン上
GCC ->そもそも言語じゃない
これらを一緒くたにして語ってる時点でもうね……
0528デフォルトの名無しさん
2010/06/10(木) 14:12:03世の中を渡って行くには柔軟な頭脳は欠かせない
>>523のようなカチコチ馬鹿は家の中に引き籠もっているしかない
0529デフォルトの名無しさん
2010/06/10(木) 14:15:100530デフォルトの名無しさん
2010/06/10(木) 14:17:56言ってる事がSEにしてはおかしいもん
0531デフォルトの名無しさん
2010/06/10(木) 16:50:340532デフォルトの名無しさん
2010/06/10(木) 17:27:14exit()のためじゃないの?
main関数で使う物ってどこで定められてんの?
0533デフォルトの名無しさん
2010/06/10(木) 17:38:140534デフォルトの名無しさん
2010/06/10(木) 21:15:10case WM_CREATE:
g_Cls.init( );
break;
case WM_PAINT:
g_Cls.paint( );
break;
と書くのは、オブジェクト指向では無いよね?
でも、プロシージャ等の一式をクラスに纏めるのも微妙だけど、どういう書き方綺麗かな?
0535デフォルトの名無しさん
2010/06/10(木) 21:15:570536デフォルトの名無しさん
2010/06/10(木) 21:58:53俺の知る限りの環境では0以外全部エラーだお
0537デフォルトの名無しさん
2010/06/10(木) 22:53:11ん?
>>480は単なる一例であって、特に環境依存の話ではないが?
0538デフォルトの名無しさん
2010/06/10(木) 23:07:19#include <algorithm>
template<typename T> class c{ /* 省略 */ };
template<typename T> c<T> max(const c<T>& a, const c<T>& b) { return std::max(a, b); }
class d { /* 省略 */ };
namespace std {
d max(const d&, const d&) { /* 省略 */ }
}
::max<int>()は一例で、要するに何でも受け付けるようにしたいという意味です。
ここで実現したい制限がいくつかあります:
1. 値が変化するためstd::max(const d&, const d&)の戻り値はconst d&に出来ない。つまりalgorithmのstd::max()を特殊化出来ない。
2. std::max(const d&, const d&)が宣言されない場合があるため、::max<T>()はstd::max(const d&, const d&)の存在を知らなくてもいいようにしたい。
当然その時はコード中に::max<d>()を実体化するようなコードは無い。
またそもそも論として、
1. ::max<int>()でも::max<d>()でも実体化できるようにする際に::max<T>()の中で呼び出すべきなのはstd::max()なのか。
2. d max(const d&, const d&)の宣言場所はstdの中でいいのか。
といった疑問があります。
0539538
2010/06/10(木) 23:23:02#include <algorithm>
template<typename T> struct c { T v; };
template<typename T> c<T> max(const c<T>& a, const c<T>& b) { c<T> r = {std::max(a.v, b.v)}; return r; }
struct d { int v; };
namespace std {
d max(const d& a, const d& b) { d r = {a.v+b.v}; return r; }
}
int main(int a, char** v)
{
c<int> ci;
c<d> cd;
max(ci, ci);
max(cd, cd);
}
::max<T>()をstd::max(const d&, const d&)より後に宣言すればコンパイルできるのですが、
出来ればstd::max(const d&, const d&)はどこに現れても(現れなくても)コンパイルできるようにしたいです。
0540デフォルトの名無しさん
2010/06/10(木) 23:26:110541538
2010/06/10(木) 23:29:02やっぱり入れないほうがいいですよね。
stdに入れないで::max<int>()と::max<d>()を両立するにはどうしたらいいでしょうか。
0542デフォルトの名無しさん
2010/06/10(木) 23:42:05とはなんのことを言ってるのか、さっぱりわからない
0543デフォルトの名無しさん
2010/06/11(金) 00:48:53ttp://codepad.org/8Dcr8Nbk
テンプレートの特殊化ではいかんのか?
SFINAEやりたいが部分特殊化できないという話なら boost::enable_if 使え。
0544538
2010/06/11(金) 00:56:43示したのは意味のない例ですが、例ではmaxの中でa+bってやってますよね。
だからconst d&を返すことが出来ないんです。
>>543
ありがとうございます!
時を同じく丁度自前template maxの定義を思いついたところでした。
std::maxを特殊化しようとしないで自分で新たにtemplate maxを作って、それを特殊化しちゃえば良かったんですよね。
0545デフォルトの名無しさん
2010/06/11(金) 01:34:58基本クラスのデータメンバは派生クラスにも同じように
データメンバが作られるのでしょうか?
また基本クラスのデータメンバをprotectedにして
publicで継承したとき,派生クラスは基本クラスのデータメンバに
アクセス,変更が出来るという認識でよろしいでしょうか?
0546デフォルトの名無しさん
2010/06/11(金) 01:36:08何か方法ある?
0547デフォルトの名無しさん
2010/06/11(金) 01:44:05ieコンポ使えばいいよ
0548デフォルトの名無しさん
2010/06/11(金) 01:46:31ついでにゲームの核もFlashで作っちゃえばいいのにw
0549デフォルトの名無しさん
2010/06/11(金) 01:53:02ググったけどよく分からなかった というかなんか周りくどくない?
>>548
AS3でも遅すぎて話にならん
0550デフォルトの名無しさん
2010/06/11(金) 02:03:090551デフォルトの名無しさん
2010/06/11(金) 02:05:44画質荒くなるしサイズ大きくなるし、いいこと無し
0552デフォルトの名無しさん
2010/06/11(金) 02:10:01じゃあムービーのときだけIE立ち上げればいいよ
0553デフォルトの名無しさん
2010/06/11(金) 02:27:42γ⌒´ ヽ,
// ""⌒⌒"\ ) _/\/\/\/\/|_
i / ⌒ ⌒ ヽ ) \ /
!゙ (・ )` ´( ・) i/ < 泣かせるおつむ >
| /// (__人_)//| / \
\__ `ー'_/  ̄|/\/\/\/\| ̄
/ ,}  ̄  ̄ { ヽ,
/ i i \
/ /^i| |i^ヽ \
ヾ ̄ i / .l l \._ノ`フ
 ̄ ̄ ト ,, ,.l  ̄
| \ / |
l ヽ_r l
| | |
l ,,_ l _,,. l
} ! {
/ 二二 | 二二ヽ
i⌒i .i⌒i i⌒i ____ __
| .|.| .| | .| ,ー、◎ (____ ) (__) rヽ
ノ ノ | .| , r───ヽ | .二ノ r───ヽ / / | |
ノ ノ | .レ'ノ .ヽ───┘ | .|__ノヽ ヽ───┘ (⌒ / .ノ |
∠/ |____ノ ゝ___ノ ヽ ヽ ( ̄ ̄ ノ
0554デフォルトの名無しさん
2010/06/11(金) 02:35:480555デフォルトの名無しさん
2010/06/11(金) 02:38:56ttp://www7b.biglobe.ne.jp/robe/cpphtml/html02/menu02.html
0556デフォルトの名無しさん
2010/06/11(金) 05:02:05サイトの紹介ありがとうございます。
データメンバも継承されることは分かったのですがprotectedがまだ今ひとつ分かりません。protectedは派生クラスから基本クラスの値を変更する為に利用するのでしょうか?それとも基本クラスから継承したデータメンバを変更する為に利用されるのでしょうか?
よろしくお願いします、
0557デフォルトの名無しさん
2010/06/11(金) 07:11:35例えば
(*p)はどういうことなんですか?(*f)もあるんですが
0558デフォルトの名無しさん
2010/06/11(金) 09:19:45猫でもわかる〜でも難しいです。
0559デフォルトの名無しさん
2010/06/11(金) 09:26:34http://www.orchid.co.jp/computer/cschool/clec2.html
0560デフォルトの名無しさん
2010/06/11(金) 09:37:01protectedは実際はあまり使われない
ロベールのC++でも買って読むと良い
基本クラスでprivateで、そのまま継承して継承したクラスからも
見えるようにしたい時に使う事か多いけど実際はそんなに登場
する機会はない
0561デフォルトの名無しさん
2010/06/11(金) 09:52:55阿呆なのか?
0562デフォルトの名無しさん
2010/06/11(金) 11:42:490563デフォルトの名無しさん
2010/06/11(金) 11:57:27猫の先生は内科の医者
http://www.orchid.co.jp/computer/cschool/clec13.html
0564デフォルトの名無しさん
2010/06/11(金) 20:34:43ありがとうございました!
非常に参考になりました。
0565デフォルトの名無しさん
2010/06/11(金) 20:40:05その手の解説かソースプログラムある場所ありますか?
出来ればVC++のウィンドウズ非コンソールプログラムで
0566デフォルトの名無しさん
2010/06/11(金) 22:25:15現状何が問題なのよ。
予測文字列を算出することなのか、予測文字列群をポップアップで表示する方法なのか、いろいろあるでしょ。
0567デフォルトの名無しさん
2010/06/11(金) 23:29:28出来れば予測文字郡をリストボックス形式で表示して
入力と共にリストが絞り込める形がいいです
0568デフォルトの名無しさん
2010/06/11(金) 23:37:240569デフォルトの名無しさん
2010/06/12(土) 00:10:26それで今どこまで出来てるの
0570デフォルトの名無しさん
2010/06/12(土) 07:52:52メリットに対してコストは全然問題ないレベル。
普通に使って問題ないよ。万が一問題になったらそこで対応すればいい。
0571デフォルトの名無しさん
2010/06/12(土) 10:06:14ありがとん!
あともう一つ質問なんだけど、
listのremove()で、とあるメンバ変数が1だったら削除、とかやりたいんだけどどうやって指定したらよいの?
いろんなサイト見てるけどlist<int>とか<char>ばかりで<class*>がない…
0572デフォルトの名無しさん
2010/06/12(土) 10:09:54remove_ifを使う。
0573デフォルトの名無しさん
2010/06/12(土) 10:14:27std::remove_if
0574デフォルトの名無しさん
2010/06/12(土) 10:27:20センキュー!
0575デフォルトの名無しさん
2010/06/12(土) 10:42:09メンバ変数の指定ってどうやるの?
0576デフォルトの名無しさん
2010/06/12(土) 10:49:25std::mem_fun_refを使って渡す
メンバ関数のアドレスを直接渡そうとするのはダメよ
0577デフォルトの名無しさん
2010/06/12(土) 10:50:140578デフォルトの名無しさん
2010/06/12(土) 10:56:45bool func(Object t){
if (t.x = 1)
return 1;
else
return 0;
}
みたいなのを作ってremove_if の第三引数に渡す
0579デフォルトの名無しさん
2010/06/12(土) 10:57:560580デフォルトの名無しさん
2010/06/12(土) 10:58:42C++にもboost::lambdaは使えるけど
0581デフォルトの名無しさん
2010/06/12(土) 11:06:52なるほど、クラスまるごと受け取るのか
やってみる
0582デフォルトの名無しさん
2010/06/12(土) 12:05:180583デフォルトの名無しさん
2010/06/12(土) 12:13:080584デフォルトの名無しさん
2010/06/12(土) 12:16:120585デフォルトの名無しさん
2010/06/12(土) 12:21:32やってみろよ
0586デフォルトの名無しさん
2010/06/12(土) 12:25:38値の平均を計算する。
平均に最もちかいインデックスを検索する。
0587デフォルトの名無しさん
2010/06/12(土) 12:26:100588デフォルトの名無しさん
2010/06/12(土) 12:30:082回走査するうえに中間値でもない。
0589デフォルトの名無しさん
2010/06/12(土) 12:33:00平均値の間違いかと思ったよ。
ちなみに走査は一回しかしてないよ。
0590デフォルトの名無しさん
2010/06/12(土) 12:37:10ソートした時点で既にオーダーが最低NlogNになってまうだろうが
O(N)にはならない
0591デフォルトの名無しさん
2010/06/12(土) 12:38:210592デフォルトの名無しさん
2010/06/12(土) 12:40:45いや、区別は付いている
ソートしてあるという前提条件が付いているなら
それは必要条件になる
0593デフォルトの名無しさん
2010/06/12(土) 12:42:10はかわいそうな子
0594デフォルトの名無しさん
2010/06/12(土) 12:45:080595デフォルトの名無しさん
2010/06/12(土) 12:46:230596デフォルトの名無しさん
2010/06/12(土) 12:46:41一回の走査⇒O(N)じゃないからね。
一回の走査したあと他に何かする場合もあるからね。
0597デフォルトの名無しさん
2010/06/12(土) 12:48:01別の配列に移してソートするんですね。
0598デフォルトの名無しさん
2010/06/12(土) 12:48:43その通りです。
0599デフォルトの名無しさん
2010/06/12(土) 12:51:18>一回の走査⇒O(N)じゃないからね。
え?
0600デフォルトの名無しさん
2010/06/12(土) 12:52:390601デフォルトの名無しさん
2010/06/12(土) 12:55:00意味ねえーーー
0602デフォルトの名無しさん
2010/06/12(土) 13:28:590603デフォルトの名無しさん
2010/06/12(土) 13:57:55あらかじめある程度の領域確保しといて、足りなくなったら適当な所から取って使う
みたいなこと出来ない?
placement new+仮想メモリ みたいな
0604デフォルトの名無しさん
2010/06/12(土) 14:05:16そういうアロケーターを書いてあるそのままに作ればいいと思うよ
0605デフォルトの名無しさん
2010/06/12(土) 14:37:17listにはそのためにアロケーターを指定できるようになっている。
boostにすぐ使えるpoolアロケータが用意されているからそれを使うのが楽
こんな感じ
list<hoge,boost::fast_pool_alocator<hoge>> a;
0606デフォルトの名無しさん
2010/06/12(土) 15:24:26二回の走査でもO(N)
従って
> O(N)⇒一回の走査だけど、
は間違い。
0607デフォルトの名無しさん
2010/06/12(土) 15:46:54まじで! ありがとう、使ってみる
0608デフォルトの名無しさん
2010/06/12(土) 15:48:310609デフォルトの名無しさん
2010/06/12(土) 15:55:34使ってみたけどあまり変わらんぞ
はっきり言ってあまり期待しない方がよい
標準のアロケータで通常は十分
0610デフォルトの名無しさん
2010/06/12(土) 16:05:220611デフォルトの名無しさん
2010/06/12(土) 16:07:08規約で禁止されてるところとか多そう。
0612デフォルトの名無しさん
2010/06/12(土) 16:09:060613デフォルトの名無しさん
2010/06/12(土) 16:29:53意外と標準のnewは速いから大きな差はないな。差がないのはアロケータはスレッドセーフにする必要があるのが要因のようだね。
プールアロケータのメリットはたくさんのオブジェクトを作成、破棄を繰り返すときにヒープの断片化を防ぐ。これはnewの速度低下に地味に効いてくる。
あと、オブジェクトの生成破棄再生成を繰り返すときの高速化ぐらいだね
0614デフォルトの名無しさん
2010/06/12(土) 16:54:36class CA {
void hoge();
}
class CB {
void hoge();
}
void CA::CB::hoge() {
}
こんなイメージ(勿論上はエラー)
まあ二回書けばいいんだけど、中身が数十行あるからうざったい
0615デフォルトの名無しさん
2010/06/12(土) 16:57:30継承
0616デフォルトの名無しさん
2010/06/12(土) 17:05:110617デフォルトの名無しさん
2010/06/12(土) 17:11:33class Choge {
void hoge();
}
class CA:public Choge {
}
class CB:public Choge {
}
void Choge::hoge() {
}
これでいけるか
合ってるよね?
0618デフォルトの名無しさん
2010/06/12(土) 17:12:19場合によっちゃprivate継承が適切なケースもあるが
なるべくならコンポジションだ
0619デフォルトの名無しさん
2010/06/12(土) 17:20:350620デフォルトの名無しさん
2010/06/12(土) 17:21:21そのhoge()はなんでメンバ関数なんだ? そこをよく考えて設計するべき。
0621デフォルトの名無しさん
2010/06/12(土) 17:33:14あってるよ。それでいい。
0622614
2010/06/12(土) 17:55:090623デフォルトの名無しさん
2010/06/12(土) 19:06:49さぁ残りの文字列を取得しようとstr()を呼んだら最初の初期化で指定したものが出てきました。
現在の読み込み位置以降の文字列を取得するスマートな方法は無いですか?
0624デフォルトの名無しさん
2010/06/12(土) 19:21:49istreambuf_iteratorでもなんでもいいけど、
istringstreamから残り全部の文字を読み出すようなコードを書くのが手っ取り早いと思う。
0625623
2010/06/12(土) 20:11:54どうもありがとうございます。大当たりです。
std::string str( ( std::istreambuf_iterator<char>(istr) ), std::istreambuf_iterator<char>() );
で期待した動作になりました。
0626デフォルトの名無しさん
2010/06/13(日) 10:22:26呼び出し関係のない2つの関数で共通する変数を扱う為にグローバル変数を使う、というパターンがほとんどなのですが、
こういう場合にグローバル変数をなるべく使わないで済ます方法はないでしょうか?
たとえばカーソルを動かして選択肢を選ぶ処理を作るために、
「キーボードの入力を受け取ってカーソルの位置情報を動かす」関数と「位置情報からカーソルを描画する」関数があり、
カーソルの位置情報をグローバル変数にするという感じです。(上記の関数はどちらもゲームのメインループから呼び出しています)
0627デフォルトの名無しさん
2010/06/13(日) 10:28:05「カーソル位置情報を動かす」オブジェクトが「カーソルを描画する」オブジェクトを参照できるようにしておく。
0628デフォルトの名無しさん
2010/06/13(日) 10:33:57オブジェクトうんぬんじゃなくて、ただの構造化プログラミング的には
キーボードの入力を引数にとり、カーソルの位置情報を返す関数
位置情報を引数にとり、カーソルを描画する関数
キーボードの入力を受け取って上記二つを呼び出す関数
に分けるとか
そういう風にするだけでも、関数内でそれなりに完結するようになって大分良くなるんじゃないかな
0629デフォルトの名無しさん
2010/06/13(日) 10:34:080630626
2010/06/13(日) 10:44:34実は学習のしかたが偏っていたせいか、今まで参照がどんなものなのか知りませんでした。
今参考書をあたりつつ、関数の分け方も考えています。
0631デフォルトの名無しさん
2010/06/13(日) 11:20:34一個だけ削除するにもremove使ったほうがいいの?
0632デフォルトの名無しさん
2010/06/13(日) 12:22:43どこに書いてあった?
0633デフォルトの名無しさん
2010/06/13(日) 12:23:520634デフォルトの名無しさん
2010/06/13(日) 13:47:08>erase() はイテレータを使い、指定された要素を削除します。ただし、list の場合は要素の削除には、 remove() の方を使うべきです。
>remove() は、指定した値を持つ全ての要素を削除します。remove_if() は、削除する要素の条件を指定できるものですが、この辺りは使い方が難しいので説明を省きます。
0635デフォルトの名無しさん
2010/06/13(日) 14:06:420636デフォルトの名無しさん
2010/06/13(日) 17:42:48そこ間違いが多いから参考にしないほうがいいよ
0637デフォルトの名無しさん
2010/06/14(月) 01:03:17次は何すればいい?C以外の言語を学んだ方が良い?
0638デフォルトの名無しさん
2010/06/14(月) 06:42:490639デフォルトの名無しさん
2010/06/14(月) 11:46:43書け。
0640デフォルトの名無しさん
2010/06/14(月) 13:13:06つhttp://pc12.2ch.net/test/read.cgi/tech/1274827528/
0641デフォルトの名無しさん
2010/06/14(月) 13:31:03明日までにとりあえず動作させなければいけないんで
使い方だけ簡潔に教えていただければ助かります
0642デフォルトの名無しさん
2010/06/14(月) 13:39:290643デフォルトの名無しさん
2010/06/14(月) 13:45:10特別なコンパイラとかいるのでしょうか?
0644デフォルトの名無しさん
2010/06/14(月) 13:46:380645デフォルトの名無しさん
2010/06/14(月) 16:14:580646デフォルトの名無しさん
2010/06/14(月) 17:54:080647デフォルトの名無しさん
2010/06/14(月) 18:39:43SafeInt
0648デフォルトの名無しさん
2010/06/14(月) 23:13:490649デフォルトの名無しさん
2010/06/14(月) 23:15:070650デフォルトの名無しさん
2010/06/14(月) 23:24:350651デフォルトの名無しさん
2010/06/14(月) 23:55:01sscanf(str, "%d", &i);
これでstrにiを超える桁数の数が入ってたら
適当に丸めてくれるの?
それとも桁あふれになるの?
0652デフォルトの名無しさん
2010/06/15(火) 19:29:53int type; /* 0なら四角、1なら丸*/
int yoko; /* 幅*/
int tate; /* 高さ*/
};
struct Cir {
int type; /* 0なら四角、1なら丸*/
int r; /* 半径*/
};
struct Zukei {
int type; /* 0なら四角、1なら丸*/
};
void RecCreate(void* hoge){
(Rec*)hoge->type=0;
(Rec*)hoge->yoko=10;
(Rec*)hoge->tate=5;
}
void CirCreate(void* hoge){
(Rec*)hoge->type=0;
(Rec*)hoge->r=7;
}
0653デフォルトの名無しさん
2010/06/15(火) 19:31:35switch((zukei*)hoge->type)
case 0:
sprintf("%d",(Rec*)hoge->yoko * (Rec*)hoge->tate);
case 1:
sprintf("%d",(Cir*)hoge->r * (Cir*)hoge->r * 3.14);
}
main{
zukei* x;
RecCreate(x);
(間にいろんな処理)
PrintMen(x);
}
先輩の作ったモジュール見たらこんな感じのコード出てきたんですが
CreateTri抜ける〜PrintMen行くまでにyoko、tateの情報落ちないんでしょうか?
zukeiへのポインタとしてしかxを宣言してない
(mainモジュール中でzukei構造体分のサイズしかメモリ確保してない?)んで
yoko、tateの値が入った領域って(間にいろんな処理)の際に
別の変数の為に使われちゃったりしないか気になるんですが。
0654デフォルトの名無しさん
2010/06/15(火) 19:39:29すごい良くないコードだね。
危惧しているとおりに、違う型で上書きしなければ動くだろうけど。間違いを防止することができない良くないコードだね。
0655デフォルトの名無しさん
2010/06/15(火) 19:39:330656デフォルトの名無しさん
2010/06/15(火) 19:44:360657デフォルトの名無しさん
2010/06/15(火) 19:52:370658デフォルトの名無しさん
2010/06/15(火) 19:53:300659デフォルトの名無しさん
2010/06/15(火) 20:00:39各構造体をunionするしかないか。コンパイラのチェックが効かないから相当危険なコードになるのは間違いないが。
0660デフォルトの名無しさん
2010/06/15(火) 20:03:530661デフォルトの名無しさん
2010/06/15(火) 20:08:53IPのアドレス構造体なんかそうだけど。
type値で切り替えるのは有るけど普通じゃないと思う。APIなどのインターフェースとかぐらいだろ
0662デフォルトの名無しさん
2010/06/15(火) 20:20:29常識的に考えればRecCreate()で確保するのが関の山だと思うが。
0663デフォルトの名無しさん
2010/06/15(火) 20:41:460664デフォルトの名無しさん
2010/06/15(火) 20:55:240665デフォルトの名無しさん
2010/06/15(火) 20:57:17struct DATABOX { int no; bool chk; float *data_a, *data_b; }
この構造体のインスタンス
DATABOX dbox[100]; が有るのですが、
私がまだ理解できていないテンプレートを使った移植クラスの利用の為に
DATABOX* tmp = spDAry[i]->mpObj; // 右の式がテンプレートらしく理解が・・
ここに
tmp->data_a = dbox[i].data_a;
とすると正常通過する時と、dbox[i].data_a側が 0.000000 になってしまう時が有ります。
(デバッグで手前では数値が確実に入っています。必ず0.000000以外の数値で確認済みです。)
ここ以外 dbox[100] を触っている部分は全く無い処理に入ってから壊れるので
ここしか考えられないのです。
ポインタの扱いに慣れておらず、
イコールして右の式が壊れるなんて初めてで、混乱しております。
申し訳ないですが、何がまずそうかできれば推測で構いませんので、助言頂けませんでしょうか
0666デフォルトの名無しさん
2010/06/15(火) 20:59:41おそらくテンプレートは関係ない。
先ずは周辺のソースを全部出せ。
0667デフォルトの名無しさん
2010/06/15(火) 21:02:33んで、tmp が変な所指してしまってて、dbox か i かの中身を壊してるとか
0668デフォルトの名無しさん
2010/06/15(火) 21:55:23お勧めの方法提示してから否定しろよ。
0669デフォルトの名無しさん
2010/06/15(火) 21:57:340670デフォルトの名無しさん
2010/06/15(火) 21:58:120671デフォルトの名無しさん
2010/06/15(火) 22:12:43C++だと問題ないんだが
0672デフォルトの名無しさん
2010/06/15(火) 22:14:56C++で継承を使うのがお勧めだろう。
今回の例だと
class Zukei
{
public:
virtual ~Zukri(){}
virtual void PrintMen()=0;
};
class Rec :public Zukei
{
int type; /* 0なら四角、1なら丸*/
int yoko; /* 幅*/
int tate; /* 高さ*/
public:
virtual void PrintMen(){//略}
};
class Cir :public Zukei
略
class Rect :public Zukei
略
0673デフォルトの名無しさん
2010/06/15(火) 22:15:010674デフォルトの名無しさん
2010/06/15(火) 22:15:52typeは要らなかったな。こぴぺミスった
0675デフォルトの名無しさん
2010/06/15(火) 22:30:14新規案件ならC++だろう。
既存コード使うならCを使わざるを得ないだろうけど
0676デフォルトの名無しさん
2010/06/15(火) 22:41:59: m_str(QString("abc")),
m_pstr(new QString("abc"))
こんな初期化子の使い方ありだと思いますか?
0677デフォルトの名無しさん
2010/06/15(火) 22:48:170678デフォルトの名無しさん
2010/06/15(火) 22:53:330679676
2010/06/15(火) 22:57:12pは消し忘れました
無視してください
>>678
ポインタは初期化子で初期化するのか
コンストラクタの中で初期化するのか気になっただけです
0680デフォルトの名無しさん
2010/06/15(火) 23:04:05初期化子でnewしてもいいし
初期化子で0クリアして後でnewしてもいい
0681デフォルトの名無しさん
2010/06/15(火) 23:05:56そりゃ代入
QString * const m_pstr
だったら後者は使えない
0682デフォルトの名無しさん
2010/06/15(火) 23:20:44extern Cで十分じゃないか?
同僚にCしか使えないような奴がいるんなら別だけど。
0683デフォルトの名無しさん
2010/06/16(水) 10:44:26>>652の方がずーっとまし。
0684デフォルトの名無しさん
2010/06/16(水) 10:45:100685デフォルトの名無しさん
2010/06/16(水) 12:44:01どっちがましかと言えば、同じようなもんだけど
C++の方がきれいに書けるだろうね
0686デフォルトの名無しさん
2010/06/16(水) 14:35:28>zukeiへのポインタとしてしかxを宣言してない
その通り。
>(mainモジュール中でzukei構造体分のサイズしかメモリ確保してない?)
いや、Zukei構造体分の確保すらどこにもない。
>yoko、tateの値が入った領域って(間にいろんな処理)の際に
>別の変数の為に使われちゃったりしないか気になるんですが。
(間にいろんな処理)の以前、RecCreate()でyoko, tateに代入してる時点で
どこに書いてるのかわからない。
これが死なずに動いてるなら、それはただの偶然。
せめて、
main() {
Rec x;
RecCreate((void *)&x);
...
}
なら、動くだろうと思うけどさ。
0687デフォルトの名無しさん
2010/06/16(水) 19:56:030688デフォルトの名無しさん
2010/06/16(水) 19:57:220689デフォルトの名無しさん
2010/06/16(水) 19:58:11すみません、もう少し詳しくお願いします
0690デフォルトの名無しさん
2010/06/16(水) 20:01:530691デフォルトの名無しさん
2010/06/16(水) 20:05:330692デフォルトの名無しさん
2010/06/16(水) 20:08:350693デフォルトの名無しさん
2010/06/16(水) 20:31:370694デフォルトの名無しさん
2010/06/17(木) 00:53:47using namespace std;
static const int N = 1024;
static const double L = 1.0;
int main(int argc,char** argv)
{
int i;
double I[N],a[N],b[N];
double dx=L/N;
cout << dx << endl;
I[0]=1.0;
for(i=0;i<=N;i++){
a[i]=1.0;
b[i]=1.0;
}
cout << dx << endl;
for(i=0;i<N;i++) I[i+1] = (1-a[i]*b[i]*dx)*I[i];
cout << dx << endl;
return 0;
}
このコードで10,16と18行目でdxの値が変わるんですが17行目でdxを変えるような事はしてないと思うのですが
なんで変わってしまうかを教えてください
0695デフォルトの名無しさん
2010/06/17(木) 00:56:010696デフォルトの名無しさん
2010/06/17(木) 01:03:56using namespace std;
//static const int N = 1024;
//static const double L = 1.0;
int main(int argc,char** argv)
{
int i,N=1024;
double I[N],a[N],b[N];
double L=1.0,dx=L/N;
cout << dx << endl;
I[0]=1.0;
for(i=0;i<=N;i++){
a[i]=1.0;
b[i]=1.0;
}
cout << dx << endl;
for(i=0;i<N;i++) I[i+1] = (1-a[i]*b[i]*dx)*I[i];
cout << dx << endl;
return 0;
}
こっちだったら問題なく一緒になるんですがI[i+1]のところが問題あるんですか?
0697デフォルトの名無しさん
2010/06/17(木) 01:08:190698デフォルトの名無しさん
2010/06/17(木) 01:11:430699デフォルトの名無しさん
2010/06/17(木) 01:15:450700デフォルトの名無しさん
2010/06/17(木) 01:16:50しかしなんで同じになるのか解せません
0701デフォルトの名無しさん
2010/06/17(木) 02:38:230702デフォルトの名無しさん
2010/06/17(木) 03:26:380703デフォルトの名無しさん
2010/06/17(木) 05:33:56>for(i=0;i<=N;i++){
>a[i]=1.0;
>b[i]=1.0;
>}
0704デフォルトの名無しさん
2010/06/17(木) 09:02:32>694=>696=>698=>700でいいのか?
0705デフォルトの名無しさん
2010/06/17(木) 12:48:580706デフォルトの名無しさん
2010/06/17(木) 22:27:06share_ptrで受けて
void add(boost::shared_ptr<T> const& sp){
boost::weak_ptr<T> wp(sp);
container.push_back(wp);
}
関数内でweak_ptrを追加するのか
それとも直にweak_ptrを受ける
void add(boost::weak_ptr<T> const& wp){
container.push_back(wp);
}
どちらがよいでしょうか
また、生ポインタを引数にとってうまくやる仕組みはないでしょうか?
それとも生ポインタは受けないようにした方が良いでしょうか?
0707デフォルトの名無しさん
2010/06/17(木) 22:32:390708デフォルトの名無しさん
2010/06/18(金) 05:47:06delete b;
とすればOKなのですが、
delete a,b;
とするとmemory leakがおきます。なんででしょうか?
0709デフォルトの名無しさん
2010/06/18(金) 06:13:030710デフォルトの名無しさん
2010/06/18(金) 06:31:43delete(a,b);
0711デフォルトの名無しさん
2010/06/18(金) 07:14:01delete a,b;
だと, はカンマ演算子なので
delete a;
b;
という感じになってるんだよ
0712デフォルトの名無しさん
2010/06/18(金) 07:14:120713デフォルトの名無しさん
2010/06/18(金) 07:15:32死ね
0714デフォルトの名無しさん
2010/06/18(金) 07:22:560715デフォルトの名無しさん
2010/06/18(金) 09:12:340716デフォルトの名無しさん
2010/06/18(金) 17:59:260717デフォルトの名無しさん
2010/06/18(金) 18:00:520718デフォルトの名無しさん
2010/06/18(金) 20:33:390719デフォルトの名無しさん
2010/06/18(金) 22:39:08http://www.youtube.com/watch?v=1yn0fYFnMKk
この動画みたいに、移動する物体(敵)を追いかけながら
曲線を描いて、ビーム、もしくはミサイルのようなものを発射するのって
どうしたら良いのでしょうか?
直線でビームを出すのなら2点間の座標を取ってその間で
動かせばいいと思うんですが
何故曲がりくねらせることが出来るのか分かりません助けて下さい><
0720デフォルトの名無しさん
2010/06/18(金) 22:48:16亀ですまんが、protectedはよく使うだろ
0721デフォルトの名無しさん
2010/06/18(金) 23:02:30毎フレーム玉とターゲットの位置を調べて軌道修正してる。あとスレチな
0722デフォルトの名無しさん
2010/06/18(金) 23:20:10どんな時に使うんだ?
0723デフォルトの名無しさん
2010/06/18(金) 23:42:05使う使う。
0724デフォルトの名無しさん
2010/06/18(金) 23:43:38まあ滅多に使わないな
0725デフォルトの名無しさん
2010/06/19(土) 00:07:29んじゃ、>>556に対して>>560が的外れなレスをしちゃったってことか。
>>556はprotectedメンバについての話をしてるもんね
0726デフォルトの名無しさん
2010/06/20(日) 16:49:11floatとかはとりあえず考えない感じで
memset(this,0,sizeof(this));とかできんの?
0727デフォルトの名無しさん
2010/06/20(日) 17:01:18memsetは危険。できない。
メンバー変数にはコンストラクターを持つ型を使用すれば、それらは自動的に初期化される。
コンストラクターを持たない型はboost::value_initializedを使う方法がある。
0728デフォルトの名無しさん
2010/06/20(日) 17:20:110729デフォルトの名無しさん
2010/06/22(火) 15:16:18// read fd_orgfile and write on fd_cpyfile
for (;;) {
size_t read_size;
char buf[1024];
read_size = read(fd_orgfile, buf, sizeof(buf));
if (read_size == 0) {
break;
}
write(fd_cpyfile, buf, read_size);
}
に複数間違いがあると言われたのですが分かりません
お手数ですが教えて下さい!
0730デフォルトの名無しさん
2010/06/22(火) 15:31:01エラー処理ができていないってことかな。
read はエラーが発生すると -1 を返すけど、size_tはunsignedなので受け取れないとか。
(read_sizeに-1を代入すると MAX_UINTにかわってしまう。 (size_t)-1 と比較すればいいんだけど。)
どうせ、1024より大きな値が返ることはないので, int read_size にしておけばいい。
writeの戻り値をチェックしていないとか。
0731デフォルトの名無しさん
2010/06/22(火) 18:50:09※1のようにしてTest()を実行しても変数nameは空のままです。
※2のようにするしかないのでしょうか?
---------------------------------------
※1
Test(){
Test("名無し");
}
Test(const string& st){
setName(st);
}
void setName(const string& st){
name=st;
}
---------------------------------------
※2
Test(){
setName("名無し");
}
Test(const string& st){
setName(st);
}
void setName(const string& st){
name=st;
}
0732デフォルトの名無しさん
2010/06/22(火) 19:03:01C++0x準拠のC++ならこう書けるけどね
Test() : Test("名無し") {
}
0733デフォルトの名無しさん
2010/06/22(火) 20:53:33ありがとうございます。
記述を変更したところ、
E2312 test.cpp 13: 'Test' は曖昧でない基本クラス 'Test' ではない(関数 Test::Test() )
よろしくお願いします。
0734デフォルトの名無しさん
2010/06/22(火) 21:04:380735デフォルトの名無しさん
2010/06/22(火) 21:37:32了解です。
0736デフォルトの名無しさん
2010/06/22(火) 21:46:12これVC++2010でも対応してないんだよなあ
すっげー期待してたのに
0737デフォルトの名無しさん
2010/06/23(水) 01:36:51もし関数が0を返したらwhile(!0)になると思うんですがこれは真なんでしょうか?
よろしくお願いします。
0738デフォルトの名無しさん
2010/06/23(水) 01:47:110を返すまでループ、って意図じゃないのか
0739デフォルトの名無しさん
2010/06/23(水) 02:00:01よく分かりました。
ありがとうございます!
0740デフォルトの名無しさん
2010/06/23(水) 02:35:26まあどっちでもいっしょだけど
0741デフォルトの名無しさん
2010/06/23(水) 02:45:31正反対じゃねーかよ
0742デフォルトの名無しさん
2010/06/23(水) 03:37:501が返ってきたら抜ける、と読み替えたとしてもまるでダメだな
0743デフォルトの名無しさん
2010/06/23(水) 09:11:130744デフォルトの名無しさん
2010/06/23(水) 09:50:04分かりやすい
while(isReady() == 0)
分かりづらい
0745デフォルトの名無しさん
2010/06/23(水) 10:05:20これでおk
0746デフォルトの名無しさん
2010/06/23(水) 11:58:18環境 XPSP3, VC++2008EE
DDSURFACEをDIBに変換して色情報をLPVOID lpvBitsから R=0x0F とかいう具合に
取り出したいのですが, どのようにすればいいでしょうか?
フックするのに必要だったので#define CINTERFACE してます
bool Screenshot(LPCTSTR FileName, LPDIRECTDRAWSURFACE7 lpDDS)
{
if (!FileName || !lpDDS) return false;
bool Success=false;
HDC SurfDC=NULL; // GDI-compatible device context for the surface
HBITMAP OffscrBmp=NULL; // bitmap that is converted to a DIB
HDC OffscrDC=NULL; // offscreen DC that we can select OffscrBmp into
LPBITMAPINFO lpbi=NULL; // bitmap format info; used by GetDIBits
LPVOID lpvBits=NULL; // pointer to bitmap bits array
中略)
if (!GetDIBits(OffscrDC, OffscrBmp, 0, Height, NULL, lpbi, DIB_RGB_COLORS))
ERROR_BREAK(5);
if ((lpvBits = new char[lpbi->bmiHeader.biSizeImage]) == NULL)
ERROR_BREAK(6);
if (!GetDIBits(OffscrDC, OffscrBmp, 0, Height, lpvBits, lpbi,
DIB_RGB_COLORS)) ERROR_BREAK(7);
ここのlpvBits[x+y*width]から取り出す場合どうすればいいのでしょう.
32bitBitMapだと仮定します.widthは中略内で宣言されてます
0747デフォルトの名無しさん
2010/06/23(水) 12:36:11これでセグっちゃうんですが何がいけないんでしょうか?
gdbで見てみたら
#0 0x00007ffff7ab3dd9 in vfprintf () from /lib/libc.so.6
#1 0x00007ffff7abecb8 in fprintf () from /lib/libc.so.6
#2 0x000000000040076c in main (argc=1, argv=0x7fffffffe8a8) at print.c:24
こんなエラーがでてきます
0748デフォルトの名無しさん
2010/06/23(水) 12:44:370749デフォルトの名無しさん
2010/06/23(水) 12:50:440750747
2010/06/23(水) 12:52:010751デフォルトの名無しさん
2010/06/23(水) 12:57:11そのうちfopenに失敗してfpがNULLになってsegvしている。
0752デフォルトの名無しさん
2010/06/23(水) 12:59:31datはいくつ作りたいんだよ?
0753デフォルトの名無しさん
2010/06/23(水) 13:03:38これで自分のパソコンでは動くようになりました
ありがとうございました
0754デフォルトの名無しさん
2010/06/23(水) 13:04:280755デフォルトの名無しさん
2010/06/23(水) 13:42:350756746
2010/06/23(水) 14:01:17たまに一般的エラー?をはきます。
fail safeかけて今のところ順調に動いてますが, 不安定なモジュールなのでしょうか.
0757デフォルトの名無しさん
2010/06/23(水) 14:10:51二行目の . が 。になってるYO
0758デフォルトの名無しさん
2010/06/24(木) 18:26:15世の中夜勤帰りで朝から寝てる人だっているんだよ?
引っ越しの時ちゃんと挨拶行った?
顔合わせたら軽く会話するとかしてちゃんとコンタクト取り続けてる?
日頃からそういうコミニュケーションが取れてればいつ洗濯機を回していいのか
いつ静かにしなければならないのか
迷惑を掛けないように生活出来るはずなんだが
0759デフォルトの名無しさん
2010/06/24(木) 18:43:02死ね
0760デフォルトの名無しさん
2010/06/26(土) 01:57:45数値(BYTE型)を入力するエディットボックスを使用します。
DELETEキー等でボックス内の値を未入力状態にすると
「0から255までの数値を入力してください」と出るのですが
これを表示させない方法があれば教えていただけますか?
0761デフォルトの名無しさん
2010/06/26(土) 12:26:49表札すら出してない隣人どもにわざわざ挨拶なんてしない
仮にしたとしても世間話にすらならないので相手の生活は基本推して知るべしだな
0762デフォルトの名無しさん
2010/06/26(土) 12:29:15値のチェックをしなけりゃいい
0763デフォルトの名無しさん
2010/06/27(日) 00:20:52値のチェックを有効にしたままメッセージだけ出さないように
したいんです。
自分で範囲を決める場合(たとえば1から10までを入力可能範囲
にする)ならメッセージだけ回避する方法はわかるのですが、
型の入力範囲(BYTEなら0から255)そのものに対するチェックを
有効にした上でメッセージだけ回避したいのです。
0764デフォルトの名無しさん
2010/06/27(日) 09:26:35コードを読んでいたらこんなのを見つけたわけですが、
なんでnewの前に *を付けるんですか?
0765デフォルトの名無しさん
2010/06/27(日) 09:35:180766デフォルトの名無しさん
2010/06/27(日) 11:28:46「しょきかし・りすと」 or 「しょきか・こりすと」
どっちが正しいのでしょうか?
0767デフォルトの名無しさん
2010/06/27(日) 11:32:35まて、それどうやってdeleteするんだ?
0768デフォルトの名無しさん
2010/06/27(日) 11:33:16しょきかし・りすと
0769デフォルトの名無しさん
2010/06/27(日) 11:54:59関数内じゃね?
出来るのか出来ても意味あるのか知らんけど。
0770デフォルトの名無しさん
2010/06/27(日) 12:07:16たしかに、参照で受けたのをdeleteするって変だよね
0771デフォルトの名無しさん
2010/06/27(日) 12:08:08&つけてdeleteすれば問題はない
0772デフォルトの名無しさん
2010/06/27(日) 12:11:170773デフォルトの名無しさん
2010/06/27(日) 12:17:22shared_ptr使うのが吉
0774デフォルトの名無しさん
2010/06/27(日) 12:40:15まあ生のポインタを保持する時点で気持ち悪いが
0776デフォルトの名無しさん
2010/06/27(日) 19:40:57実行後の出力画像が分身(?)してしまいます。
何が原因なのでしょうか?
ソースファイル、原画像、出力画像はこちら。
http://www1.axfc.net/uploader/Sc/so/128110.lzh&key=noisy
プログラムはBCC Debeloperで組んでいます。
0777764
2010/06/27(日) 21:05:04フレームワーク側で何とかしてくれているんじゃないですかね
0778デフォルトの名無しさん
2010/06/27(日) 21:14:28読み込むときに横方向と縦方向が逆になってると思う
class.cpp
41 hig=HIG;
42 for(int i=0;i<hig;i++){
43 for(int j=0;j<wid;j++)
44 fscanf(fp,"%d",&pix[j][i]);
45 }
main.cpp
43 for(int i=0;i<HIG;i++){
44 for(int j=0;j<WID;j++){
45 fprintf(fp,"%d\n",op[j][i]);
46 }
47 }
0779デフォルトの名無しさん
2010/06/27(日) 21:24:030780776
2010/06/27(日) 21:49:53解決しました! ご協力感謝いたします。
http://www1.axfc.net/uploader/Sc/so/128162.pgm&key=noisy
0781デフォルトの名無しさん
2010/06/27(日) 21:55:03List[i][0]='a';
List[i][1]='a';
としたのですが、「式は変更可能な左辺値である必要があります」と
エラーが出ました。
どうしたらいいですか?
0782デフォルトの名無しさん
2010/06/27(日) 21:58:43i番目がどこなのかさっぱりわかりませぬ。
エラーメッセージの通り、左辺が変更可能では無いのでしょう。
Listはどのように宣言していますか?
0783デフォルトの名無しさん
2010/06/27(日) 21:58:57要素数が一個足りないような……。
0784デフォルトの名無しさん
2010/06/27(日) 22:05:18strcpy(List[i][0], "a");
とかやりたいのかな、なんて思ったり
0785デフォルトの名無しさん
2010/06/27(日) 22:05:25×:要素数 ○:添字
0786デフォルトの名無しさん
2010/06/27(日) 22:20:05char List[5][2][20] です。
int i;
printf("削除したい番号を入力:");
scanf("%d",&i)
List[i-1][0]='a';
List[i-1][1]='a';
入力した番号の配列を削除するのが目的ですが
置き換えたほうが後に便利なので置き換えたかったのです・・・。
0787デフォルトの名無しさん
2010/06/27(日) 22:28:04List[i-1][1]='a';
の行を、
strcpy(List[i-1][0],"a");
strcpy(List[i-1][1],"a");
に変えればいいと思います。
回答とは関係ないですが、
Listは、「文字列の」2次元配列ってことですか?
0788786
2010/06/27(日) 22:44:00どうもありがとうございます!
成功しました。
えっとちなみにstrcpyを使わない方法はないでしょうか…?
あと自信はないですが、文字列の3次元配列だと思います。
0789デフォルトの名無しさん
2010/06/27(日) 22:51:340790デフォルトの名無しさん
2010/06/27(日) 23:15:22文字の3次元配列だと思うよ。
strcpy使わないならこんな感じ。
List[i-1][0][0] = 'a';
List[i-1][0][1] = '\0';
List[i-1][1][0] = 'a';
List[i-1][1][1] = '\0';
0792デフォルトの名無しさん
2010/06/28(月) 06:18:57どうすればいいですか?
というか、可能ですか?
0793デフォルトの名無しさん
2010/06/28(月) 07:04:160794デフォルトの名無しさん
2010/06/28(月) 10:46:53ゲーム毎に対応が異なってくるので、制作者にご相談ください。
相談できないような内容なら、この板のローカルルールに則って然るべくどうぞ。
0795デフォルトの名無しさん
2010/06/28(月) 22:38:05もう解決したみたいだけど、
>入力した番号の配列を削除するのが目的ですが
配列を削除?ってのがちょっと引っかかる。
ほんとにやりたいのはこれじゃない?
List[i-1][0][0] = '\0'
List[i-1][1][0] = '\0'
0796デフォルトの名無しさん
2010/06/28(月) 22:45:12削除するのをあきらめて置き換えにしてるわけで、空文字列にするのは置き換えのほうに分類されると思う。
ほんとにやりたいのはmemmoveで解決できたんじゃないかな。
0797デフォルトの名無しさん
2010/06/29(火) 21:03:02私の環境はVC++2010、2008ですが、C++の言語全体として
答えていただけると幸いです。
enum E
{
E1,
E2,
}:
のようなenumがあったとき、E2 | E1 は、int になるらしいです。
ということは、
E e = E1 | E2;
に警告が出ます。
この辺のenumの取り扱いとして、
1. ビット演算のような用法 ( e = E1 | E2; )
2. まさにenum的な用法 (どれかひとつ)
ざっくりと、2種(または混合)があると思うのですが、この辺、何かしら
指針、指標のようなもの、もしくはベンダからの情報等はあるのでしょうか?
ベンダー依存でもいいので、何かしら情報があれば、よろしくお願いします。
0798デフォルトの名無しさん
2010/06/29(火) 21:06:56enumはフラグじゃないんダナ
0799デフォルトの名無しさん
2010/06/29(火) 22:14:58E1 = 0x1,
E2 = 0x2,
E3 = E1 | E2
};
または
E e = static_cast<E>( E1 | E2 );
だけどcastするぐらいだったら
int e = E1 | E2;
にして E1、E2もconst int 型にする方が良いと思う。(またはstd::bitset)
後
E e = E1 | E2;
はgccのc++0xではErrorになる
0800デフォルトの名無しさん
2010/06/29(火) 23:48:14> 1. ビット演算のような用法 ( e = E1 | E2; )
それはない。
0801デフォルトの名無しさん
2010/06/30(水) 22:21:04その列挙型にキャストなしで戻せないからね
ビットフラグを扱う変数は普通の整数型にするしかない
個々のビットフラグをconst intで定義するかenumで定義するかは趣味の領域か
0802デフォルトの名無しさん
2010/07/01(木) 04:09:20列挙型の演算自体はデフォルトでは定義されないからな。
Cなら列挙型への暗黙の型変換があるから何でもできるが。
0803デフォルトの名無しさん
2010/07/01(木) 12:16:070804デフォルトの名無しさん
2010/07/01(木) 15:38:120805デフォルトの名無しさん
2010/07/01(木) 17:14:090806デフォルトの名無しさん
2010/07/01(木) 18:16:07削除の責務を何処に負わせるのが良いでしょうか?
共有してる側に負わせると、共有側それぞれの寿命までキニシナイと行けないようになるし
ファクトリにどんなインスタンスを生成したか記憶させるようにして
動作終了時にごそっと削除させてしまうべきか・・・?
0807デフォルトの名無しさん
2010/07/01(木) 18:36:500808デフォルトの名無しさん
2010/07/01(木) 18:39:030809デフォルトの名無しさん
2010/07/01(木) 19:03:47bind( CHoge::hoge , this , 50 , _1 , _2 , _3 );
を c++0xでboostを使用せずに記述する方法は無いでしょうか。
0810デフォルトの名無しさん
2010/07/01(木) 20:09:57staticメソッド作っておいて初期化でそれ使うぐらいしか思いつかん
0811デフォルトの名無しさん
2010/07/01(木) 20:10:450812デフォルトの名無しさん
2010/07/01(木) 20:56:51こんなの本当にプログラミングで使うのか?
テンプレートってobject型の代わりに使っているような印象を受けるんだけど
0813デフォルトの名無しさん
2010/07/01(木) 21:07:190814デフォルトの名無しさん
2010/07/01(木) 22:19:55ヒントありがとうございます
f = [this](int a1,int a2,int a3) -> void { hoge(a1,a2,a3); };
で解決しました( VC10で確認 )
ただ残念な事に gcc4.4 を使用しているので当面は boost::bind の方を使用します。
半年待ちかな
0815デフォルトの名無しさん
2010/07/01(木) 22:35:28どっかでぶっ壊れてるんだがまったく特定できん…
0816デフォルトの名無しさん
2010/07/01(木) 23:05:030817デフォルトの名無しさん
2010/07/01(木) 23:48:43デバッガにメモリの特定の箇所が変化したら止まる機能があるかもしれないから、
毎回決まった箇所が壊れるなら、それ使えばいい。
VSにはあった。
0818デフォルトの名無しさん
2010/07/02(金) 09:36:58まじで。スレ違いだけど教えてもらっていい?vs2008proで出来る?
0819デフォルトの名無しさん
2010/07/02(金) 11:17:42手元に2008がないから確認できない。
2005proなら、メニューの「デバッグ」→「ブレークポイントの作成」→「新しいデータブレイクポイントの作成」でできる。
0820デフォルトの名無しさん
2010/07/02(金) 11:38:27出来た!ありがとう!
0821デフォルトの名無しさん
2010/07/02(金) 23:25:14選択できないんだけど、どうすればいい?
0822デフォルトの名無しさん
2010/07/02(金) 23:26:340823デフォルトの名無しさん
2010/07/02(金) 23:52:440824デフォルトの名無しさん
2010/07/02(金) 23:57:290825デフォルトの名無しさん
2010/07/03(土) 00:18:310826デフォルトの名無しさん
2010/07/03(土) 00:26:32-x/y だと 89 と 99 で結果が異なる CPU もあるんじゃなかったけ?
たしか、89 だと CPU 依存で 99 だと厳密に来ていされていたような気が…
# 完全にうろ覚え
0827デフォルトの名無しさん
2010/07/03(土) 01:49:05つttp://seclan.dll.jp/c99d/c99d05.htm
0828デフォルトの名無しさん
2010/07/03(土) 13:10:28template< class T >
class A
{
public:
A()
{
std::vector< A< T > > vec;
}
};
0829デフォルトの名無しさん
2010/07/03(土) 13:20:08vectorのところでA<T>のサイズが決まらないからじゃなイカ?
vector<shared_ptr<A<T>>> vec;
で試すでゲソ
0830デフォルトの名無しさん
2010/07/03(土) 17:52:300831デフォルトの名無しさん
2010/07/03(土) 18:25:560833デフォルトの名無しさん
2010/07/04(日) 01:29:47Borland C++ 5.5.1で、カラー画像を指定した閾値で2値化するプログラムを書きました。
プログラムで処理した画像をout.bmpとして出力しているのですが、
この画像をプログラムを終了させることなく表示する方法はありませんか?
0834デフォルトの名無しさん
2010/07/04(日) 01:35:460835デフォルトの名無しさん
2010/07/04(日) 07:57:20GUIを扱えるように勉強する
system関数等でwindows付属のビューア等を呼び出す
あたりかな
0836デフォルトの名無しさん
2010/07/04(日) 09:29:48C#使え
0837デフォルトの名無しさん
2010/07/05(月) 03:50:480838デフォルトの名無しさん
2010/07/05(月) 14:21:21f(cin , cout );
って感じの関数を作ればいいですか?
cinとかをfinとかに変えても動作するみたいにできますか?
0839デフォルトの名無しさん
2010/07/05(月) 14:34:450840デフォルトの名無しさん
2010/07/05(月) 15:04:450841デフォルトの名無しさん
2010/07/05(月) 23:16:42ヘッダファイルはコンピュータにとって何処が美味しいの
0842デフォルトの名無しさん
2010/07/05(月) 23:21:530843デフォルトの名無しさん
2010/07/05(月) 23:22:07http://ja.wikipedia.org/wiki/%E3%83%98%E3%83%83%E3%83%80%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB
0844デフォルトの名無しさん
2010/07/06(火) 06:27:36vector<クラス*>の要素数は最大10個で
idは1〜10までの整数で、重複しないようにしたいのです
vector<クラス*>に要素を追加した時にそのidメンバに他のvector<クラス*>の要素が持ってない整数を入れたいです
例えば今要素5個のvctor<クラス*>があったとして前から並べた時にidが3,5,2,6,0のような場合に
6個目のvector<クラス*>を作ってそのidに3,5,2,6,0以外の1〜10の整数のうち一つ(無い値ならなんでも良い)を入れたいのですがどうすれば良いでしょうか?
0845デフォルトの名無しさん
2010/07/06(火) 07:00:370846デフォルトの名無しさん
2010/07/06(火) 07:04:420847デフォルトの名無しさん
2010/07/06(火) 10:15:56たとえばクラスをFooとする。
Foo *valids[10] = {0};
vector<Foo *> v;
for (int i = 0; i < 10; i++) {
if (!valids[i]) {
Foo *foo = new Foo();
foo->id = i;
v.push_back(foo);
valids[i] = foo;
}
}
0848デフォルトの名無しさん
2010/07/06(火) 10:27:05そこから借りたり返したりする
0849デフォルトの名無しさん
2010/07/06(火) 17:07:25OvenTimer::OvenTimer(QWidget *parent)
: QWidget(parent)
{
//関数の中身
}
という表現があるのですが、
「: QWidget(parent)」の部分は何を意味しているのでしょうか?
OvenTimerクラスはpublicでQWidgetクラスを継承しています
0850デフォルトの名無しさん
2010/07/06(火) 17:10:36C++の基礎を勉強しなおせ
基底クラスの初期化子
0851デフォルトの名無しさん
2010/07/06(火) 17:23:30ベースクラスのコンストラクタの引数がポインタなことに違和感があって、
何か意味があるのかなと。。。参照ならしっくりくるんですが。
私に基礎がないからなんですね?頑張って勉強します。
0852デフォルトの名無しさん
2010/07/06(火) 17:34:22がんばれ
0853デフォルトの名無しさん
2010/07/06(火) 18:16:47なんでだよw そのコンストラクタの引数も単にポインタでしょうにw
0854デフォルトの名無しさん
2010/07/06(火) 18:50:11コピーコンストラクタとかでは参照で受けるようにするのが普通だと思っていて、
そのコンストラクタを呼び出してもいいはずなのに、あえてポインタで受けるコントラクタを用意して
そのコンストラクタを呼び出すのは何か理由があるのかなと思ってしまったんです。
サブクラスのコンストラクタでベースクラスのポインタを受けるのは、
そのベースクラスがisでなくhasな場合もあるだろうし、
あまり違和感を感じないんです^^;
そもそも自身のポインタを受けるコンストラクタって用意するのが普通なんでしょうか。
ってことからわかってない><
0855デフォルトの名無しさん
2010/07/06(火) 19:02:51厳密に言うとおかしい。自身のポインタってのをthisのことだとすると。
自身のポインタを受けるコンストラクタっていう表現が。
コンストラクタにそのインスタンスのthisポインタを渡すことなどできない(?)し、
コンストラクタの初期化リスト呼び出しが終わったあと、
コンストラクタ本体へ処理が移らないとthisは使えない。
自身のポインタってのがQWidget(parent)に対する、
QWidget *parentのことであるとするなら(多分そのつもりなんだろうけど)、
クラスとインスタンスの違いが分かってない可能性すらある。
分かってるんだとしたら、そういう質問出てこないと思う。
たとえば、古典的なリンクリストを実装しようとしたら、
Node::Node(Node *next)っていうコンストラクタがあっても不思議じゃないし、
双方向だとしたらNode::Node(Node *next, Node *prev)ってのがあって不思議じゃない。
GUIのコンポーネント間に親子関係があるとき、
親が子を知っていることにくわえ、
子が親を知っていることもあたりまえによくあること。
だから、OvenTimer(QWidget *parent) みたいにコンストラクタで親オブジェクトを渡す。
コンストラクタだからどうあるべき、ってんじゃなくて、
あくまで用途ありきでオブジェクトやクラスなんかもあるし、
どういうコンストラクタを設けるかも、あくまで用途次第。
> そのコンストラクタを呼び出してもいいはずなのに
つまり、コピーする目的じゃ無いと思われ。
0856デフォルトの名無しさん
2010/07/06(火) 19:18:13ありがとうございます。
>厳密に言うとおかしい。自身のポインタってのをthisのことだとすると。
インスタンスの話ではなく、型の話です。ですから this のことはないと思っています。
>Node::Node(Node *next)っていうコンストラクタがあっても不思議じゃないし、
リンクのノードならしっくりきます。全然普通です。
>つまり、コピーする目的じゃ無いと思われ。
ということなんですね。よくわかりました。謎が解けました。
自身の(コピーによる)初期化ではなくて、あくまでメンバの一つにそのポインタを格納しているんですね。
そういう想像が直ぐにできなくて、不思議な書き方だなと思ってしまいました。
勉強になりました。ありがとうございました。
0857デフォルトの名無しさん
2010/07/06(火) 19:20:40>メンバの一つにそのポインタを格納しているんですね
それも違う・・・・・
いいからC++の勉強やり直してこいって
0858デフォルトの名無しさん
2010/07/06(火) 19:31:02例えばノードの場合だったら、
Node::Node(Node *next) {
// m_next 以外の初期化
m_next = next;
}
だと思ったので、同じように
m_parent = parent;
というコードがあるんだろうと理解したんですが・・・
うーん、なんかまだまだわかってないことがありそうですね、
まだ3週目ですし、もっと勉強してから質問します。失礼しました。
0860デフォルトの名無しさん
2010/07/06(火) 23:17:50std::function<A(B, C, D)> func1;
std::function<A(C, D)> func2;
B b = 10;
func2 = xxx(func1, b);
上のように、テンプレート引数Bのみを拘束する、汎用的な xxx のような
機能をする関数とかありますでしょうか?
bind だと、引数ごとにプレースホルダが必要ぽいので、面倒なんです。
よろしくお願いします。
0861デフォルトの名無しさん
2010/07/07(水) 12:33:51音を扱うプログラムにて
#define RATE_44100 0xac440000
という定義を見ました
16進数でac44が10進数の44100に相当することは分かっているのですが、そうすると定義のように
0を余計に4つもつけている意味はなんでしょうか?
はじめ16進数でac440000が44100相当なのか、でも計算が全然合わない、と悩んだのですが・・・
0862デフォルトの名無しさん
2010/07/07(水) 12:40:160863デフォルトの名無しさん
2010/07/07(水) 12:42:43$ ruby -e 'p 0xac440000'
2890137600
$ ruby -e 'p 0xac44'
44100
なんかしらのビット演算をしようとして、
ac44を44100と名づけなおすことに何かメリットがある、
からそうなってるのか、
あるいは勘違いか。
0864861
2010/07/07(水) 12:54:27>>862-863
すばやいご返答ありがとうございました。
0865デフォルトの名無しさん
2010/07/08(木) 03:55:10HWNDを引数に持たない自分で作った関数の中でタイマーをセットするにはどうすれば良いのでしょうか?
0866デフォルトの名無しさん
2010/07/08(木) 03:59:190867宮城たった
2010/07/08(木) 05:56:21調べてみましたがよくわかりませんでした
void hogeA()
{
この関数中で大麻を窃盗
}
CALLBACK MsgProc( HWND hWnd〜)
{
大麻が経過したら最悪ここでhogeB関数をする、KillTimer
}
という感じにしたいのですが大麻 凍る獏関数というのが使えるのでしょうか?どうすれば良いのでしょうか?
0868みやぎたった
2010/07/08(木) 06:24:57わかりやすく書けよ
乙!ありがとな!
0869デフォルトの名無しさん
2010/07/08(木) 18:59:36int main (void)
{
int num;
num = 0;
float f;
f = 0;
printf("整数を入力してください:");
scanf("%d", &num);
printf("浮動少数点数を入力してください:");
scanf("%f", &f);
printf("%d ", num);
printf("%f", f);
return 0;
}
を実行しても
整数を入力してください:浮動少数点数を入力してください:0 0.000000
と表示されるだけで入力ができません
何か問題があるのでしょうか?
0870デフォルトの名無しさん
2010/07/08(木) 19:26:45RATE_44100から、CDのサンプリングレート44.1kHzを連想出来ないキミはPGに向いていない。
これだからruby脳は…
0871デフォルトの名無しさん
2010/07/08(木) 19:34:28うるせー馬鹿w
CDのサンプリングレート44.1kHzなんか知らないっつーの。
0872デフォルトの名無しさん
2010/07/08(木) 20:33:17データの中間辺りで、00 00 00 00と00が凄い連なっていたんだが
LZ法でこういうデータを吐き出すケースってどんな時?
スライド窓とか大きく確保しても、こうならないと思うんだが…
0873デフォルトの名無しさん
2010/07/08(木) 20:36:510874デフォルトの名無しさん
2010/07/08(木) 21:01:270が1Gバイトくらいじゃね?
0875デフォルトの名無しさん
2010/07/08(木) 22:05:230876デフォルトの名無しさん
2010/07/08(木) 22:08:28これだから ruby 脳は‥‥‥。
0877デフォルトの名無しさん
2010/07/08(木) 23:38:150878デフォルトの名無しさん
2010/07/09(金) 00:02:29無知自慢しなくていいぞ。ruby脳
0879デフォルトの名無しさん
2010/07/09(金) 23:27:58for(i=0;i=<100;i++) sprintf(str,"out-%d.jpg",i);
というプログラムを書いたのですが、出力は
out-0.jpg out-1.jpg・・・out-10.jpg ・・・ out-100.jpg
と桁がそろっていない形になっています。
出力する数字を3桁にして、out-0.jpgをout-000.jpgとなるようにする場合、
どうしたら良いですか?
0880デフォルトの名無しさん
2010/07/09(金) 23:59:000881名無しさん@そうだ選挙に行こう
2010/07/10(土) 16:55:13std::string text;
int number;
int count;
} data;
std::vector<data>
このようなdataの配列があるとして、textとcountが重複している要素があったら重複しないようにしてcountは足すという事をしたいのですが、
単純に前から順に比較していって新しい配列に結果を格納していくという方法しか思いつきません。
速い方法があったら教えて頂きたいです。
0882名無しさん@そうだ選挙に行こう
2010/07/10(土) 18:52:35どういう処理をさせたいのか分からないけど、
その構造でそういうやりくりするのって、
すっげー始末が悪いと思う。
0883名無しさん@そうだ選挙に行こう
2010/07/10(土) 20:00:05>textとcountが重複して
textとnumberが重複してたらcountを足すんじゃなくてtextとcountなんだな?
じゃぁvectorの全走査でしかたないんじゃない?
判定に使うcountが変動するんじゃ、
単純に前から比較しなくて済む方法使った場合格納時に並べ直す必要が出ちゃうし
0884名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:12:241画素に1色とすると(256^3)画素が必要だと思うので、
√(256^3) = 4096で、4096×4096の画像を出力することになりますよね?
そこで、出力用の配列としてimage_out[4096][4096][3]という配列を用意したのですが、うまく色が入ってない様です。
for(i=0;i<255;i++){
for(j=0;j<255;j++){
for(k=0;k<255;k++){
image_out[l][m][0]=k;
image_out[l][m][1]=j;
image_out[l][m][2]=i;
m++;
if(m==4096){
m=0;
l++;
}
}
}
}
この様なプログラムを書いたのですが、どう修正したら良いでしょうか?
0885名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:30:170886名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:47:27でも、同じ色の菱形ができるんです・・・
0887名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:57:20現在中学二年生で工科高校のシステム科を受験しようと考えています。
それに伴い、C言語を学習しようと考えているのですが、どのような事をまなべばいいのでしょうか?
いままでHSPというwindows用のインタプリタ言語を使いゲーム制作をしてきました。
C言語でもゲーム制作を学習して良いのでしょうか?それともゲームなどとはちがうソフトウェア制作を学習したほうが良いのでしょうか。
0888名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:58:47ゲームで学ぶことを知っているのなら、
ゲームで学んで十分。
構造体やポインタ、メモリの動的確保。
全部ゲームで押さえることができる。
0889名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:59:370890名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:03:530891名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:06:35普通の進学校いけ。プログラミングは学校で学ぶもんでもない。
やりたいことなんていつ変わるかわからんのだし。
0892名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:07:390893名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:17:05景気の良かった頃でもゲーム開発は社員の寿命が短かった
(若くても辞めざるを得なくなる)
あまり勧められんなぁ
0894名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:18:33いかに言語の規格を正しく理解するか。
コードをいっぱい読んでイディオムを見出し、
設計に躓きまくってデザパタにも親しむ。
APIリファレンスとホワイトボードだけが友達。
0895名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:31:260896名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:36:28若い頃は簡単でも歳食うとこれがまあかなり難しい。
0897名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:52:03別にゲーム制作を本業にするつもりは全くないです。
ただ工科高校のシステム科は就職率が高いとのことなのでそちらを進路に選択しました。
家庭事情的にも働かなければいけないので大学に行けないので…
それならプログラムをまなぶ前にパソコン検定などの資格を取り、基本的な操作を学んだほうがいいのでしょうか?
0898名無しさん@そうだ選挙に行こう
2010/07/10(土) 22:54:45スルーで構いません。無駄レスすみませんでした。
0899名無しさん@そうだ選挙に行こう
2010/07/11(日) 01:35:040900名無しさん@そうだ選挙に行こう
2010/07/11(日) 13:53:43あと>>887も行け
スレチどころか板違いだ死ね
0901名無しさん@そうだ選挙に行こう
2010/07/11(日) 14:06:37(*゚ω゚ ) >>900お断りします
. (=====)
_(_⌒) )
/\ `J  ̄ ̄\
 ̄ ̄ ̄ ̄| | ̄ ̄ ̄
|
/ \
 ̄
0902名無しさん@そうだ選挙に行こう
2010/07/11(日) 20:28:310903名無しさん@そうだ選挙に行こう
2010/07/11(日) 22:30:510904名無しさん@そうだ選挙に行こう
2010/07/11(日) 22:53:05有難うございます
ググって見ます
0905名無しさん@そうだ選挙に行こう
2010/07/11(日) 22:53:370906名無しさん@そうだ選挙に行こう
2010/07/11(日) 23:02:42現在無いので
httpを簡単に扱えるライブラリ(これはいろいろある)を探して
monazillaあたりで、書き込みの方法を調べるのが割と楽かと
0907デフォルトの名無しさん
2010/07/11(日) 23:38:07嘘でしたか
ありがとうございます
0908デフォルトの名無しさん
2010/07/11(日) 23:47:57作ったら公開してよ。
0909デフォルトの名無しさん
2010/07/12(月) 00:29:06いや嘘じゃねーよ。socke.h使えば2ch書き込みだってできるっつのふざけんな。
0910デフォルトの名無しさん
2010/07/12(月) 00:33:260911デフォルトの名無しさん
2010/07/12(月) 12:06:270912デフォルトの名無しさん
2010/07/12(月) 13:24:15UWSCなら手動操作をスクリプト化出来るし。
0913デフォルトの名無しさん
2010/07/12(月) 13:25:11そしたら、規制掛からないし。いいよ。
0914デフォルトの名無しさん
2010/07/12(月) 18:37:440915デフォルトの名無しさん
2010/07/12(月) 21:40:46でも、C++の場合は別のコンストラクタを呼び出してはいけないらしい
なんで、C++の場合は他のコンストラクタを呼び出しちゃダメ何ですか?
0916デフォルトの名無しさん
2010/07/12(月) 21:47:490918デフォルトの名無しさん
2010/07/12(月) 22:19:13できないんだから、一般的な代替手段なんて無い
具体的に行ってくれれば方法提案してやるよ
0919915
2010/07/12(月) 22:22:18ありがとうな
0920デフォルトの名無しさん
2010/07/12(月) 22:28:540921デフォルトの名無しさん
2010/07/12(月) 22:33:24アラインメントが解ってないと事故に繋がるかもだけど
あと0xなら普通にほかのコンストラクタに委譲できる
0922デフォルトの名無しさん
2010/07/13(火) 00:04:06while( it != hoge.end() ) {
// Action
++it;
}
これと
for (it = hoge.begin(); it!=hoge.end(); ++it) {
// Action
}
これって全く同じ?
0923デフォルトの名無しさん
2010/07/13(火) 00:07:11書き方が
0924デフォルトの名無しさん
2010/07/13(火) 00:35:45まあ聞き方がよろしくない
0925デフォルトの名無しさん
2010/07/13(火) 00:39:190926デフォルトの名無しさん
2010/07/13(火) 00:43:480927デフォルトの名無しさん
2010/07/13(火) 09:58:170928デフォルトの名無しさん
2010/07/13(火) 09:58:490929デフォルトの名無しさん
2010/07/13(火) 10:01:310930デフォルトの名無しさん
2010/07/13(火) 10:17:060931デフォルトの名無しさん
2010/07/13(火) 11:16:09(C/C++を使うのは)難しい。
0932デフォルトの名無しさん
2010/07/13(火) 11:31:52英語の出来ない人に多いよね(核爆)
0933デフォルトの名無しさん
2010/07/13(火) 11:52:080934デフォルトの名無しさん
2010/07/13(火) 12:02:470935デフォルトの名無しさん
2010/07/13(火) 12:13:26公式サイトのロゴ見れば分かるよ。
プーチンが>>932の家に向かいました。
0936デフォルトの名無しさん
2010/07/13(火) 21:01:11printf("test");
#endif
こんな感じでデバッグプリントがC/C++には沢山残されているわけですが、
これってデフォなんですか?
マクロがあると可読性が下がってしょうがないんですけど
0937デフォルトの名無しさん
2010/07/13(火) 21:23:370938デフォルトの名無しさん
2010/07/13(火) 21:35:27書いた人に聞けよ
0939デフォルトの名無しさん
2010/07/13(火) 22:06:22>C/C++には
お前が読んでるソースが世界のすべてか?
0940デフォルトの名無しさん
2010/07/14(水) 04:25:17それヘタクソ。
デフォじゃない。
0941デフォルトの名無しさん
2010/07/14(水) 05:33:12# define dprintf printf
#else
# define dprintf (void)
#endif
__VA_ARGS__が使える環境なら
#ifndef(NDEBUG)
# define dprintf(...) printf(__VA_ARGS__)
#else
# define dprintf(...) ((void)0)
#endif
0942デフォルトの名無しさん
2010/07/14(水) 11:56:09DEBUGとか_DEBUGとかいろいろあって迷っちゃうよね
0943デフォルトの名無しさん
2010/07/14(水) 11:56:580944デフォルトの名無しさん
2010/07/14(水) 12:02:44DEBUGとか_DEBUGについては完全に環境依存。
0945デフォルトの名無しさん
2010/07/14(水) 15:04:36たとえば"RED"または"BLUE"でどちらか先に見つかった方の場所を戻り値として得たいです
0946デフォルトの名無しさん
2010/07/14(水) 15:29:050947デフォルトの名無しさん
2010/07/14(水) 15:56:05ちなみに自分で実装することにしたのであなたの力及ばずといったところでしょうか
0948デフォルトの名無しさん
2010/07/14(水) 15:57:570949デフォルトの名無しさん
2010/07/14(水) 17:54:56hoge<int(int, int)>
上のようなテンプレート引数を受け取るためのhogeの記述がわからないのですが、
受け取るための方法を教えてください。
あと、このような書式に名前とかあれば、それもお願いします。
0950デフォルトの名無しさん
2010/07/14(水) 18:02:010951デフォルトの名無しさん
2010/07/14(水) 18:06:08もし真面目な質問なら、もう少し真面目に質問しようよ。
まぁただの荒らしだとは思うけど。
0952デフォルトの名無しさん
2010/07/14(水) 18:12:56template <class d, class g> class a<d(g)>{};
特殊かしただけ
0953949
2010/07/14(水) 18:13:26すいません、説明不足でした。
template <typename T>
struct hoge
{
};
void test(void)
{
hoge<int(int)> h;
}
たとえば上のようなコードだと、T は int(int) となると思うのですが、
もはや int(int) ってどんな型なのかよくわかりません。
Tの分解方法とか、それともtypename T 以外の記述ができるとか、
何らかの情報がほしかったんです。
0955デフォルトの名無しさん
2010/07/14(水) 22:53:280956デフォルトの名無しさん
2010/07/14(水) 22:58:56min(s.find("RED"), s.find("BLUE");
0957デフォルトの名無しさん
2010/07/14(水) 22:59:32min(s.find("RED"), s.find("BLUE"));
0958デフォルトの名無しさん
2010/07/15(木) 00:10:380959デフォルトの名無しさん
2010/07/15(木) 01:37:040960デフォルトの名無しさん
2010/07/15(木) 06:22:120961デフォルトの名無しさん
2010/07/15(木) 08:04:180962デフォルトの名無しさん
2010/07/15(木) 08:28:43昔も今もマクロの命名規則だけはどこで見ても大文字アンダーバー区切りだったが・・・
0963デフォルトの名無しさん
2010/07/15(木) 09:31:45ならlexでも使えと
0964デフォルトの名無しさん
2010/07/15(木) 09:44:210965デフォルトの名無しさん
2010/07/15(木) 09:52:16別に決まってないけど複数人プロジェクトで変数名と変わらないような値付ける奴が居たら俺は殴りにいく
0966デフォルトの名無しさん
2010/07/15(木) 09:56:540967デフォルトの名無しさん
2010/07/15(木) 10:58:190968デフォルトの名無しさん
2010/07/15(木) 13:02:260969デフォルトの名無しさん
2010/07/15(木) 16:20:48PHPでいうreplaceみたいなのって無いみたいなので、どう置換したらいいでしょうか?
stringのreplaceはなんか別物みたいですし。
それかPHPのmysql_escape_stringみたいなのないでしょうか。
0970デフォルトの名無しさん
2010/07/15(木) 16:25:30http://d.hatena.ne.jp/kobapan/20090208/1234022527
0971デフォルトの名無しさん
2010/07/15(木) 16:31:10ありがとうございます。
自分では検索で探せませんでした・・
0972デフォルトの名無しさん
2010/07/15(木) 19:23:54配列のサイズを動的に決めたい(今回はファイルの行数分)場合どうすればよいのでしょうか?
int size = getSize(); <-ファイルの行数
Human *people = new Human[size];
のようにしてもpeopleを利用する際に以下のようなエラーが出ます。mallocを使った場合でも同じエラーでした。
'Human *' から 'Human *[]'に変換できません。
インスタンスの配列の扱いに慣れていないので操作がよくわかりませんでした。
最悪、配列の要素数さえわかればいいので動的でなくともいいのですがお教えいただけないでしょうか
sizeOf〜で要素数が求まるのはわかっているのですが要素が入っている分だけが知りたいので動的に作ろうと思いました。
0973デフォルトの名無しさん
2010/07/15(木) 19:26:400974デフォルトの名無しさん
2010/07/15(木) 19:46:140975デフォルトの名無しさん
2010/07/15(木) 20:28:49が出てしまって方法を変えました。一応もう一度やり直してみようと思いますが望み薄いです。
0976デフォルトの名無しさん
2010/07/15(木) 20:42:12std::vector<Human> people( size );
0977デフォルトの名無しさん
2010/07/15(木) 21:45:06どうやったら、argvの長さを取得することができるの?
C言語の勉強をしないで、C++の勉強をしているからわかんね
0978デフォルトの名無しさん
2010/07/15(木) 21:51:30要素数ならargcで各要素の文字列ならstrlenなりなんなり
0980デフォルトの名無しさん
2010/07/15(木) 22:41:240981デフォルトの名無しさん
2010/07/16(金) 00:27:24その中からとあるキー(数値)を探して、見つかったらそれを削除すると共に1を返す、て関数は
走査に必ずO(N)かかるよね
この関数を別々のキーで複数回呼ぶとその回数×コンテナの内容物分の処理が増えるんだが、なんか勿体無い気がする
何か上手い方法はないかな
0982デフォルトの名無しさん
2010/07/16(金) 00:41:26map/set はO(log n)
unorderdはO(1)
0983デフォルトの名無しさん
2010/07/16(金) 10:30:160984デフォルトの名無しさん
2010/07/16(金) 11:42:35根本的なこともわかってないのに、勿体無いかどうかの判断をしない方いいよ。
初心者のうちはパフォーマンスより、分かりやすコードを心掛ける方が懸命だね。
0985デフォルトの名無しさん
2010/07/16(金) 11:54:290986デフォルトの名無しさん
2010/07/16(金) 11:58:36O(N)のコンテナに関して言っていると、好意的に解釈してやれよ。
0987デフォルトの名無しさん
2010/07/16(金) 12:15:38イベントの優先度について記載が行われているサイトはないでしょうか。
MSDN2005を見ていて
[WM_TIMER]の優先度はlowだというのは見つけたのですが、
[WM_CREATE]の優先度の記載が見つけられません。
[WM_TIMER]よりは高いとは推測していますが・・・
また[WM_TIMER]の処理が溜まっているために、
画面の表示が行えなくなることというのはありえるのでしょうか。
コーディングした画面は、
[WM_TIMER]の処理が溜まっていても表示されるのですが、
IDD_ABOUTBOXの画面だけ表示されないという現象が発生して、
困っています。
0988デフォルトの名無しさん
2010/07/16(金) 12:19:25つーか聞いてんのはそこじゃないが。
0989デフォルトの名無しさん
2010/07/16(金) 13:07:49CreateWindowを呼び終わった後ですでにWM_CREATEは処理されてるはずだけど
ウィンドウを作っただけで表示する処理を入れてないだけじゃね
0990987
2010/07/16(金) 13:37:53言葉足らずで誤解させてしまいました。
申し訳ありません。
SetTimer(WM_TIMER)を受けた先の処理が正常系の場合には、
IDD_ABOUTBOX(フォーム方で最初から準備されているダイアログ)は表示されます。
他のダイアログの表示もできています。
異常系(処理に遅延が発生する)の場合は、IDD_ABOUTBOXだけ表示されないんです。
他のダイアログは表示できています。
表示する処理が抜けていることはないです。
SetTimerを10msとか不必要に値を小さくした時に指定したときに、
正常系でも、現象が発生することはあります。
そのため
[WM_TIMER]とIDD_ABOUTBOXと限定して質問していました。
あと。。。
IDD_ABOUTBOX、
見えない(disible=False)けどアクティブウィンドウで作成されているようで、
Enterキー押下でイベントを発生させています。
0991デフォルトの名無しさん
2010/07/16(金) 13:53:19「O(N)のコンテナで、複数のキーでサーチすると処理がN*キーの数になるけど
なんとかなりませんか?」とか、そんな質問されても、複数のキーで舐めながら
ループしろくらいしか答えられないだろ。
0992デフォルトの名無しさん
2010/07/16(金) 14:37:55今vectorで作成してみたのですがHumanのコンストラクタが以下のような感じで(splitはファイルからとってきたデータ(string型のvector))
Human::Human(){
int age = atoi(split[0].c_str());
string name = split[1];
int number = atoi(split[2].c_str());
}
以下のようにしてインスタンスを生成し
Human * human = new Human(split);
格納はできました。インスタンスを格納しているので宣言は以下のようにしました。
std::vector<Human *> people( size );
ただまた問題が発生しました。以前Human型の配列を使用していた際は配列のポインタを渡せば簡単に他のクラスでも配列の操作ができました。
しかしvector型の場合はどのようにして他のクラスでデータを操作すればいいのかわかりません。
ポインタは試したのですが型が合わないとエラーが出てしまいました。
gdgd長くなりましたが「配列を渡し配列を返す。」という操作をvectorを利用して行う方法が知りたいです。
0993デフォルトの名無しさん
2010/07/16(金) 14:39:33それよりも良い方法があるかもしれないから聞いてんだろうが
テーブル化とかキャッシュとか
自分が知らないだけでイベント管理の常套手段として使われるアルゴリズムがあるかもしれないし
それくらいしか答えられないなら黙っとけ
0994デフォルトの名無しさん
2010/07/16(金) 14:42:19だからそういう答えをするのに、質問が大まか過ぎるっていってるんじゃん。
0995デフォルトの名無しさん
2010/07/16(金) 14:45:47「そのくらい分かってるよ」とか言い出すやついるな。
じゃ最初から書いとけよ。
0996デフォルトの名無しさん
2010/07/16(金) 15:43:27コンテナにインスタンスを直接入れる事はあまり推奨されない
インスタンスへのポインタを入れれ
だいたいそうしないとポリモーフィズムが出来ないだろ
そしてboost::ptr_vectorを使えばポインタが失われる時に自動的に
デストラクタを呼び出してくれるから都合がいい
そうしないとクラスの中身によってはメモリリークが起きる
0997デフォルトの名無しさん
2010/07/16(金) 16:22:240998デフォルトの名無しさん
2010/07/16(金) 17:41:11JavaやRubyの感覚でインスタンスを突っ込んでました。ポインタに変更し配列の受け渡しもポインタを使って普通に行うことができました。
格納されたインスタンスのポインタから各フィールド(age,nameとか)を取得する方法がわかっていませんがもう少し自力で調べようと思います。
ありがとうございました。
0999デフォルトの名無しさん
2010/07/16(金) 17:46:47なんで、イタレータを使わないの? 折角vector使うのならイタレータを渡せばいいのに。
1000小倉優子 ◆YUKOH0W58Q
2010/07/16(金) 18:02:20( ・∀・) 1000ならジュースでも飲むか
( )
し─J
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。