[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 06/21 15:50 / Filesize : 177 KB / Number-of Response : 685
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2008/09/06(土) 22:45:12 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.58【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1218023777/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。

35 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:40:50 ]
>>34
<stdint.h>あるいは<boost/cstdint.hpp>のint32_t/int64_t

36 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:43:14 ]
>>34
×共有体
○共用体

37 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:49:33 ]
>>34
typedef 一段かませばいいんじゃない?
どうやって int のビット数を判別するかは、環境依存のマクロがあればそれでもいいし、
C++ でテンプレートメタプログラミングしてもいい。

38 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:50:33 ]
>>35
32bitOSでも64bitに固定しろってことなんですかね?
せめてコンパイル環境によって
判定してくれるようなマクロを期待していたんですが

>>36
そうでした、お恥ずかしい

39 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 12:58:27 ]
判定したいならこれでどう

#include <limits.h>
#if INT_MAX == 2147483647

40 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 13:09:20 ]
template<std::size_t n> struct FP{ };
template<> struct FP<sizeof(float)>{ typedef float type; };
template<> struct FP<sizeof(double)>{ typedef double type; };
typedef FP<sizeof(int)>::type FPint;

41 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 13:21:49 ]
>>39
にゃるほど

>>37,40
テンプレートはクラスにしか使ったことなかったんですが
本来そういう使用方法だったんですね
メタプログラミングについて勉強してきます


ありがとうございました

42 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 13:50:40 ]
>>41
いや、メタプログラミングは本来の使い方じゃないからね。
ライブラリ実装内で使うならともかく、他人に使わせるようなところで使うのは控えたほうがいいよ。

43 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 14:55:03 ]
それでもマクロのifとか使うよりはTMPの方が余程健全に思えるわ



44 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:04:32 ]
C++の事で質問です
::func()という表記はグローバルスコープで宣言されたfuncを明示的に呼び出す場合に使用するものだったと思いますが
::new Hogeという風にnew演算子に対して::を付けている場合はどういう動きになるのでしょうか?

45 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:20:36 ]
グローバルなnew演算子を呼び出す。

46 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:20:48 ]
>28
■暗号技術【ROUNDsurea】■
ttp://pc11.2ch.net/test/read.cgi/tech/1180280982/

47 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 19:19:25 ]
>17
フリーのリソースエディタ
ResEdit
www.forest.impress.co.jp/lib/stdy/program/progsupt/resedit.html

48 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 22:03:00 ]
皆さんの現場では、ウォーターフォール形式で開発しているところが多いのですか?
これ以外のプロトタイプ形式とか経験ないのですが、なんか能率悪いと思う

49 名前:デフォルトの名無しさん [2008/09/07(日) 22:22:00 ]
マ板に池

50 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 17:41:04 ]
アドバイス頂きたいのですが、プログラム終了時まで値を保存する、なんかのデータ型のオブジェクトの配列を確保したいと思ったのですが、プログラム実行時まで配列の要素数が分からない性質のプログラムだとします。

その場合、C++だと char* ch[] とか int* dt[] だけでは
storage size of `ch' isn't known (MinGW)のようにエラーになってしまうので、事前に配列を宣言しておくことができません。
なので、今回のように必要な数がプログラム実行時まで不明な同型のオブジェクトを動的に確保して、それらを一まとめにしておくには、配列ではなく次の要素へのポインタを格納したオブジェクトのリストを使うしかないでしょうか?

51 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 17:48:12 ]
>>50
mallocで必要なサイズの領域を確保すればいいんでない

52 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 17:50:46 ]
std::vector

53 名前:デフォルトの名無しさん [2008/09/08(月) 18:00:42 ]
malloc (new) 以外に何か必要なの?



54 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 18:05:10 ]
>>53
いいえ、std::vectorを使いましょう。

55 名前:50 mailto:sage [2008/09/08(月) 18:06:43 ]
ありがごうございます。

>>51
プログラム開始から終了の間に、順々に必要な要素数が増えていく感じなので、最初に一気にmalloc とか new int [10] とかではダメだったのです。

>>52
そーか、要素がpriority_queueのポインタでして、ポインタってvectorに格納できないと勝手に思いこんでたんですが、調べてたらポインタでも大丈夫なんですね。
vecotrでなんとかなりそうです。ありがとうございましたm(_ _)m

56 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 19:01:16 ]
まったくの初心者ですが


#include <stdio.h>

int main(){

int a,b,c;

printf("足し算をします。計算する数字を2つ入力し下さい。\nなお数字の区切りには,を入力してください。\n");
scanf("&d , &d",&a,&b);
c=a+b;
printf("%d+%dは%dです。\n",a,b,c);

return 0;
}

何がいけないんですか?

57 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 19:13:59 ]
>>56
&d → %d

58 名前:56 mailto:sage [2008/09/08(月) 19:17:55 ]
>>57
ありがとうございます。

59 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:07:57 ]
次からは、「どんな結果になった(どんなエラーが出た)のか」
「それは自分の望みとどう違うのか」くらいは書いてくれよ。
>>56のケースは、たまたまコトの次第がすぐ特定できる内容だからスムーズに行ったけども。

60 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 20:21:54 ]
>>59
すみません、今後気を付けます。

61 名前:デフォルトの名無しさん [2008/09/09(火) 19:31:39 ]
hStdOutputの出力を、char型配列にするにはどうしたらいいですか?

62 名前:デフォルトの名無しさん [2008/09/09(火) 19:45:58 ]
すなわちメモリのハンドルが取得したいんです

63 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 19:53:38 ]
そういうことは出来ません。



64 名前:デフォルトの名無しさん [2008/09/09(火) 19:53:38 ]
GlobalAllocでできることがわかりました。
ところでVirtualAllocなど種類がありますがどんな違いがありますか?

65 名前:デフォルトの名無しさん mailto:sage [2008/09/09(火) 20:01:07 ]
マニュアルやAPIをちゃんと読みましょう。

66 名前:デフォルトの名無しさん [2008/09/09(火) 20:09:20 ]
みつけたよ

konuma.txt-nifty.com/blog/2006/03/heapallocvirtua_5d49.html
・ HeapAlloc
異なるメモリブロックを多数作成するときに利用します。パフォーマンスを最大にしたい場合、
同じブロック長のみで構成したヒープハンドルを複数作成する必要があります。

・ VirtualAlloc
多量のデータを格納する空間を用意する必要があるが、一部は利用しないかもしれない場合に
重宝します(ハッシュテーブル等)。部分的に領域の確保を遅らせることが出来ます。
多量のメモリを確保する場合は基本的にこの関数に頼るべきです。

・ LocalAlloc/GlobalAlloc
どちらもWin16時代の名残です。Win32APIが要求しない限り、新規にこれを採用する理由はありません。

・ malloc (new)
データ長にあわせて、プロセスに既にあるヒープを使ったり、新たにヒープを作成したりします。
またマルチスレッドに対する耐性があるバージョンも存在し、賢いですが、その分最も遅いです。一般的には最後にHeapAllocを呼び出す結果になります。




67 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 08:46:26 ]
個人のブログをソースにするのはどうかと、MSDN読めよ。

68 名前:デフォルトの名無しさん [2008/09/10(水) 12:38:43 ]
出力が変になります。 「あ」の前にゴミがつきます。どこがだめかわかりますか

char *sh=new char[1024];
lstrcat(sh, "あいうえおかき");
printf("%s\n", sh);
delete sh;

69 名前:デフォルトの名無しさん [2008/09/10(水) 12:47:08 ]
自己解決しました 

char *p=new char[1024];
strcpy(p,"あいうえ");
printf("%s\n", p);
delete p;

70 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 12:48:06 ]
>>68
lstrcatは文字列を末尾に結合する関数。
newで確保した領域の中身は不定。
だからlstrcatはsh内の最初の'\0'を探してその位置に"あいうえおかき"を挿入する。
予めsh[0]に'\0'を入れておけば意図どおりの動作はする。

71 名前:デフォルトの名無しさん [2008/09/10(水) 12:50:53 ]
>>70
サンクス

72 名前:デフォルトの名無しさん [2008/09/10(水) 13:50:46 ]
メモリ確保の方法別に速度を測ったのですが、違いがでません。どうしたら差のでる比較になりますか?
#include <windows.h>
#include <iostream>
using namespace std;
#define memsize 32400000
#define T GetTickCount()
int main(){ int s[4][3]; memset(s, 0, 48); for(int n=0;n<10;n++){
int cl=GetTickCount(); HANDLE hHeap = HeapCreate(NULL, 0, 0);
char *p0 = (char*) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, memsize);
cl=T-cl;s[0][0]+=cl; cl=T; memset(p0, 97, memsize);
cl=T-cl; s[0][1]+=cl; cl=T; HeapFree(hHeap, NULL, p0); HeapDestroy(hHeap);
cl=T-cl; s[0][2]+=cl;

cl=T; HANDLE hShare = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,0, memsize, "MEMTEST");
char *p1 = (char*)MapViewOfFile(hShare, FILE_MAP_ALL_ACCESS, 0, 0, memsize);
cl=T-cl; s[1][0]+=cl; cl=T; memset(p1, 97, memsize);
cl=T-cl; s[1][1]+=cl; cl=T; UnmapViewOfFile(p1); CloseHandle(hShare);
cl=T-cl; s[1][2]+=cl;

cl=T; char *p2 = (char*)VirtualAlloc(NULL, memsize, MEM_COMMIT, PAGE_READWRITE);
cl=T-cl; s[2][0]+=cl; cl=T; memset(p2, 97, memsize);
cl=T-cl; s[2][1]+=cl; cl=T; VirtualFree(p2, memsize, MEM_DECOMMIT);
cl=T-cl; s[2][2]+=cl;

cl=T; char *p3=new char[memsize]; cl=T-cl; s[3][0]+=cl;
cl=T; memset(p3, 97, memsize); cl=T-cl; s[3][1]+=cl;
cl=T; delete p3; cl=T-cl; s[3][2]+=cl; }

printf("HeapAllocの速度の合計 確保%d コピー%d 解放%d\n",s[0][0],s[0][1],s[0][2]);
printf("FileMappingの速度の合計 確保%d コピー%d 解放%d\n",s[1][0],s[1][1],s[1][2]);
printf("VirtualAllocの速度の合計 確保%d コピー%d 解放%d \n",s[2][0],s[2][1],s[2][2]);
printf("newの速度の合計 確保%d コピー%d 解放%d \n",s[3][0],s[3][1],s[3][2]);}

73 名前:72 [2008/09/10(水) 14:01:24 ]
メモリ300Mの確保では、newが最速という結果が出ました。なぜかコピーが速いです。



74 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 14:07:37 ]
それぐらいこだわりを入れるなら、ポインタを使ったほうがいいよ。

75 名前:デフォルトの名無しさん [2008/09/10(水) 14:25:45 ]
いやいや、ポインタは一回はまると難しすぎるから初心者には無理無理w

76 名前:72 [2008/09/10(水) 14:27:12 ]
すみません質問です。これは途中でerrで停止するのですが原因わかりますか?

#include <windows.h>
#include <iostream>
using namespace std;
#define memsize 200000000

int main(){
for(int n=1;n<100;n++){
printf("%d回目の確保\n",n);

char *q = (char*)VirtualAlloc(NULL, memsize, MEM_COMMIT, PAGE_READWRITE);
q[memsize-1]=0; VirtualFree(q, memsize, MEM_DECOMMIT);

HANDLE hd = HeapCreate(NULL, 0, 0);
char *p = (char*) HeapAlloc(hd, HEAP_ZERO_MEMORY, memsize);
if(p==NULL){cout<<"err\n";return -1;} p[memsize-1]=0;
HeapFree(hd, NULL, p); HeapDestroy(hd);}}

77 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 14:28:12 ]
っGetLastError

78 名前:デフォルトの名無しさん [2008/09/10(水) 14:32:24 ]
当たり前だ
10回行かないだろ
言語のまえにバソポンについて勉強汁

79 名前:72 [2008/09/10(水) 14:33:12 ]
自己解決しました。
VirtualFree(q, memsize, MEM_DECOMMIT);を
VirtualFree(q, 0, MEM_RELEASE);にしたら成功しました。

でも、コミット解除と、領域解放の違いがわかりません。

80 名前:72 [2008/09/10(水) 14:40:54 ]
領域確保をHDD増設すると、コミットはFormatみたいなものですか?
コミット解除は、NTFSをOSが管理できないFormatと見なすようなものですか?

81 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 14:46:47 ]
>>79
説明すると長くなるからMSDNのメモリ管理に関する項目読んで。

82 名前:72 [2008/09/10(水) 15:05:56 ]
>>81
みてみたのですがわかりませんでした。

別々のメモリを確保して、ハンドルも取得したい場合は、hdとheはどのように求めればいいですか?
char *p = (char*)VirtualAllocEx(hd, NULL, memsize, MEM_COMMIT, PAGE_READWRITE);
char *q = (char*)VirtualAllocEx(he, NULL, memsize, MEM_COMMIT, PAGE_READWRITE);

83 名前:デフォルトの名無しさん [2008/09/10(水) 15:09:41 ]
メモリ確保関数のうち、巨大な確保が一番成功しやすいのは、VirtualAllocExでしょうか?
あと、CreateFileMapping(INVALID_HANDLE_VALUE,・・・)はVirtualAllocExと同じですか?
メインメモリ。仮想記憶のどこかに確保されて性能に違いはありませんか?




84 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 15:11:53 ]
ぜんぶMSDNにかいてあるから探せ

85 名前:デフォルトの名無しさん [2008/09/10(水) 15:38:40 ]
どうやらメモリ確保の最大容量は、newが少ないほかは全部同じでした。大容量時は使いやすいやつでいいってことですかね
#include <windows.h>
#include <iostream>
using namespace std;
int main(){
printf("HeapAllocのメモリ確保耐久テスト\n");
unsigned int size=200000000; while(1){
HANDLE hd = HeapCreate(NULL, 0, 0);
char *p = (char*) HeapAlloc(hd, HEAP_ZERO_MEMORY, size);
if(p==NULL){printf("エラーサイズ = %d\n",size);break;}
size*=1.05; HeapFree(hd, NULL, p); HeapDestroy(hd);}

printf("\nVirtualAllocのメモリ確保耐久テスト\n");
size=200000000; while(1){
char *q = (char*)VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
if(q==NULL) {printf("エラーサイズ = %d\n",size);break;}
size*=1.05; VirtualFree(q, 0, MEM_RELEASE);}

printf("\nCreateFileMappingのメモリ確保耐久テスト\n");
size=200000000; while(1){
HANDLE hShare = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,0,size, "MEMTEST");
char *r = (char*)MapViewOfFile(hShare, FILE_MAP_ALL_ACCESS, 0, 0, size);
if(r==NULL) {printf("エラーサイズ = %d\n",size);break;}
size*=1.05; UnmapViewOfFile(r); CloseHandle(hShare);}

printf("\nnewのメモリ確保耐久テスト\n");
size=200000000; while(1){
char *s=new char[size];
if(s==NULL) {printf("エラーサイズ = %d\n",size); break;}
else printf("成功サイズ = %d\n",size);
size*=1.05; delete s;}}

86 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 15:42:26 ]
インデントを整えてくれ
醜い

87 名前:デフォルトの名無しさん [2008/09/10(水) 16:49:38 ]
メモリが512Mしか乗っていなくて、確保できた最大サイズ1.6Gの読み書きテストをすると
動作がおそくなります。 物理メモリの確保サイズはせいぜい300Mという所とおもいます。
300M以上の場合、メモリや仮想メモリを使わずに、ファイルにマッピングしたいと思います。
アロケータというのを聞きますが、newやSTLを自前で管理するにはどうしたらいいですか?

88 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 16:59:53 ]
newはoperator new
アロケータは3番目のテンプレート引数に指定できる

89 名前:デフォルトの名無しさん [2008/09/10(水) 17:19:32 ]
自前のアロケータを使用してSTLを実用で使うまでにはどのような手順をとればいいかりません。
どうしたらいいですか

90 名前:デフォルトの名無しさん [2008/09/10(水) 17:21:59 ]
templateを勉強し始めたのですがなぜエラーなのかわかりません。ご教授ください。
以下、該当ソースです。
typedef struct taghoge {
  int val1;
  union {
    struct {
      int val2_1_1;
      int val2_1_2;
    } val2_1;
    struct {
      long val2_2_1;
    } val2_2;
  } val2;
} hoge;

template <typename T> const char* func(T& temp) { return typeid(temp).name(); }

void main() {
hoge h;
printf("h = %s\n", func(h));
printf("h.val1 = %s\n", func(h.val1));
printf("h.val2 = %s\n", func(h.val2));
printf("h.val2.val2_1 = %s\n", func(h.val2.val2_1)); // 1: OK
printf("h.val2.val2_2 = %s\n", func(h.val2.val2_2)); // 2: NG
}
1の箇所はコンパイルも実行もできます。2の箇所はコンパイルできません。
エラーは「error C2664: 'func' : 1 番目の引数を '' から '&' に変換できません。」とでます。
なぜこのようなコンパイルエラーになるのでしょうか。
環境は VC++2005 ExpressEdition + SP1 です。

91 名前:90 [2008/09/10(水) 17:25:57 ]
unionのなかのstructに名前をつけたらコンパイルはとおりますが、
つけないで通す方法と、なぜ通らないかが理解したい箇所です。

92 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 17:27:50 ]
>>89
どういうキーワードでググッた?

93 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 17:42:57 ]
>>87
そんなことしたって速くならないよ。
それで速くなるならアプリはみんなそうするし、メモリを何Gも積む奴もいない。



94 名前:デフォルトの名無しさん [2008/09/10(水) 17:59:03 ]
>>92
アロケータ、STLなどです。 
>>93
他のOSなどのメモリを食い尽くさないためです。
実メモリが無くなれば他のソフトにまで影響が出ます。

95 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:30:22 ]
>>90
2008 SP1では通ったぞ
規格的に適合してるかは知らん

96 名前:デフォルトの名無しさん [2008/09/10(水) 18:46:28 ]
一瞬で10Gの空ファイルを作るにはどうすればいいんですか?

97 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:47:06 ]
環境による

98 名前:デフォルトの名無しさん [2008/09/10(水) 18:49:02 ]
魔法使いに頼む

99 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 18:58:45 ]
空ファイルってサイズあるの?

100 名前:デフォルトの名無しさん [2008/09/10(水) 19:10:23 ]
これで1Gのファイル生成と、char型配列の関連づけできてますか?

int main() {
char temppath[300], tempfile[300];
GetTempPath(300, temppath);
GetTempFileName(temppath,"mem",0,tempfile);
HANDLE fp=CreateFile(tempfile, GENERIC_READ|GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0 );
int size=1000000000;
LockFile(fp,0,0,size,0);
HANDLE mp=CreateFileMapping( fp, 0, PAGE_READWRITE|SEC_COMMIT, 0, size, "memtest");
char *q=(char*) MapViewOfFile( mp, FILE_MAP_ALL_ACCESS, 0, 0, 0);
q[size-1]='a';
UnmapViewOfFile(mp);
UnlockFile(fp,0,0,size,0);
CloseHandle(fp);}

101 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 19:23:31 ]
>>96
何の目的かわからないけどWinならスパースファイルを作ればいい。
見せ掛けだけだからディスク容量は減らないが。

102 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 19:25:34 ]
1Gのファイルを作って見たけど、体感で60秒ぐらいかかった。結構時間かかるんだね。
gcc

103 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 20:09:44 ]
>>94
それで検索して一番目に作り方と使い方の説明ページが出てくるけど。
そのページでさっぱり分からないとなると、
ここで聞いても無駄だと思う。
レスで書ける文字数的に。

具体的にどこが分からないか書けばアドバイスしてくれる人も居るかもしれないけどね。



104 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 21:39:44 ]
>>96
Winの場合、適当にファイル作ってファイルポインタを1GBの位置に移動、
ファイル終端をそこに設定すればいける

105 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 21:40:58 ]
1GBじゃなくて10GBだった。まあサイズはなんだっていいけど。

106 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 21:46:35 ]
超初心者です。
クラスを3つほど作り
数を入力して、もともと設定されている数と計算をし、
他のクラスの数から引いて、表示する
ってのを作るにはどうしたらいいですか?

107 名前:デフォルトの名無しさん [2008/09/10(水) 21:49:34 ]
>>106
宿題スレでもいくといいよ

108 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 21:53:35 ]
>>107
宿題じゃなくて、宿題を片付けるための試しのプログラムだから・・・OTL

109 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 22:13:28 ]
>>108
宿題スレでもいくといいよ

110 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 22:15:13 ]
そもそも意味がわからん

111 名前:デフォルトの名無しさん [2008/09/10(水) 23:36:21 ]
トランプを使ったプログラムについて質問です。
mainで、
int card[4][13];
char *mark[4]={"H","D","C","S"};
char *number[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

と宣言して、これを関数の中でも使いたいときってどうすればいいの?
例えば関数Aで使いたいとしたら
void A( )
{
}

で( )の中には何をいれればいいんですか?

112 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 23:40:49 ]
char**

113 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 23:47:07 ]
int card[4][13];

char *mark[4]={"H","D","C","S"};
char *number[13]={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
で違う
後者は>>112の通り
前者はint x[][13]とかint (*x)[13]とか



114 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 23:47:35 ]
typedef

115 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 23:48:53 ]
void A(int card[4][13], char *mark[4], char *number[13])

A(card, mark, number);

116 名前:デフォルトの名無しさん mailto:sage [2008/09/10(水) 23:51:06 ]
作ってみたんですけど
エラー E2176 ted.cpp 14: 宣言に型が多すぎる
エラー E2193 ted.cpp 50: 呼び出し時のパラメータが足りない:M::Attacked(Kougeki)(関数 main() )
となって上手くいきません
指摘お願いします。
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7709.txt

117 名前:111 [2008/09/10(水) 23:55:16 ]
111です。
ありがとうございました!
できました!!

118 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 00:01:51 ]
>>116
class Kougeki
{
(中略)
}; ←ここにセミコロン

m.Attacked(); ←Kougeki型の変数を渡さないといけない

119 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 00:06:45 ]
k.damage == com * pow;

^^;


120 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 00:08:41 ]
s.Attack();
m.Attacked();

m.Attacked(s.Attack());

かなあ?どうしたいのかよくわからないので何ともいえないけど。

121 名前:116 mailto:sage [2008/09/11(木) 00:09:26 ]
解決しますたー
ありがとうございました!

122 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 00:22:00 ]
結局どうやったかを書いてくれないのがちょっと残念なとこだがいつものことだな

123 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 06:25:22 ]
自分をお客さんだと思ってるんだろうな。
getばかりでsetの概念が飛んでる。



124 名前:90 [2008/09/11(木) 07:07:34 ]
その後・・・VC++2008 ExpressEdition だと問題なくコンパイル〜実行できました。
VC++2005 ExpressEdition + SP1 ではコンパイルエラーが出るようです。

コンパイラが対応していない記述方法が原因という理解をしました。
ありがとうございました。

125 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 07:09:52 ]
>>124
あの糞なBCC(5.9.3)でもまともに走るぞ。
バグじゃね?

126 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 07:28:44 ]
.

127 名前:デフォルトの名無しさん [2008/09/11(木) 09:29:38 ]
名前をつけてあげるといいと思うよ

128 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 09:41:55 ]
ゴッドファーザーですな

129 名前:デフォルトの名無しさん [2008/09/11(木) 18:04:41 ]
こんな風に関数の中でアドレスをコピーして
結果用の引数に入れて返すにはどうしたらいいですか?

void CopyPtr(int* in, int* out)
{
out = in;
}

void main()
{
int* in;
int* out;

*in = 10;

CopyPtr(in,out);
cout << *out << endl;
}


130 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 18:08:02 ]
void CopyPtr(int* in, int*& out)
{
out = in;
}

131 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 18:08:21 ]
>>129
void CopyPtr(int* in, int** out)
{
*out = in;
}
.....
CopyPtr(in, &out);
.....

132 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 18:24:34 ]
>>130-131
できたぁ〜ありがとん!

133 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 18:35:56 ]
ダイアログのOK、キャンセルを押してもダイアログが閉じません。
あとBCCFormで.rcと.hは作りました。
どうすればいいか教えてください。

あとフリーのリソースエディタで皆さんがいいと思うものを教えてください。

ttp://www2.uploda.org/uporg1664738.zip



134 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 18:43:21 ]
>>133
ボタンのコントロールIDを IDOK や IDCANCEL にすればよい

135 名前:デフォルトの名無しさん mailto:sage [2008/09/11(木) 18:51:17 ]
>>134
できました!
ありがとうございます。

あとBCCFormでリソースファイルを作成すると、include <windows.h>が作成されないんですけどほかのソフトのほうがいいでしょうか?
ちょっと使いにくいかなと思って。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<177KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef