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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.23【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1128872687/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
2デフォルトの名無しさん:2005/11/11(金) 15:37:57
げげっ24じゃなくて23だった。次スレも24でお願いしまつ。
3デフォルトの名無しさん:2005/11/11(金) 15:39:50
ちなみに正しい前スレは
【初心者歓迎】C/C++室 Ver.22【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1128872687/
ですから!!
4デフォルトの名無しさん:2005/11/11(金) 15:47:35
なんか色々とすごく間違えたな

まぁ、>>1
5デフォルトの名無しさん:2005/11/11(金) 15:51:50
>>4
スマソ。スレ立て初めてだったものですから・・・・・
6デフォルトの名無しさん:2005/11/11(金) 15:54:58
まあいいんじゃないの別に?
とりあえずぬるぽ、じゃなくて乙
7デフォルトの名無しさん:2005/11/11(金) 15:59:43
          _
      ミ ∠_)
         /
         /   \\
 ウイーン  Γ/了     | |
  ウイーン  |.@|    | | ガッガッガッ
       | / | .     人
       |/ |    <  >_Λ∩
      _/  | //. V`Д´)/←>>6
      (_フ彡           /
         
8デフォルトの名無しさん:2005/11/11(金) 16:58:11
課題
16−1 自己再生産プログラムを書いてください。これは、入力をとらず、実行すると自分の
ソースコードを標準出力に書き出すプログラムです
9デフォルトの名無しさん:2005/11/11(金) 17:00:57
お帰りください
10デフォルトの名無しさん:2005/11/11(金) 17:44:17
宿題は宿題スレへ
11デフォルトの名無しさん:2005/11/11(金) 18:16:37
12デフォルトの名無しさん:2005/11/11(金) 20:55:32
1つのプロジェクトに複数のプログラムを入れるとコンパイルがうまくいかないのですが
みなさんは1プロジェクトに1プログラムという形で行ってるんですか?
新しいプログラム作るのにいちいちプロジェクトも新しく作るのって面倒ですよね?
ちなみにBCC Developerを使用しています
13デフォルトの名無しさん:2005/11/11(金) 20:57:46
フォルダごとコピー
14デフォルトの名無しさん:2005/11/11(金) 21:37:17
int input( double *xx );
void process( double *xx, int nn, double *ssum, double *mmax, double *mmin );
main(){

n = input( x );
process( x, n, &sum, &max, &min );
avg = sum / n;


}

int input(double *xx){
int i=0;

while(scanf("%lf",xx+i)!=EOF){
i=i+1;
}

return i;
}

void process( double *xx, int nn, double *ssum, double *mmax, double *mmin){){


このプログラムが理解できません。
まず、scanfでEOFになるまで、データを読み込んでデータの個数iを
main関数に返しますよね。
それからprocessの中で入力されたデータの合計を求めたいんですがどうしたらいいですか?
15はる:2005/11/11(金) 22:27:17
void
delay(unsigned int nMilliseconds)
{
#define CYCLES_PER_MS 260
unsigned long nCycles = nMilliseconds * CYCLES_PER_MS;
while(nCycles--);
}

これがわかりません…
教えてください!!お願いします
16デフォルトの名無しさん:2005/11/11(金) 22:29:46
なんつー無駄な
17デフォルトの名無しさん:2005/11/11(金) 22:32:57
独習C++という本を呼んでいるのですが、コピーコンストラクタというのが
いまいち理解できません。
なにかアドバイスいただけませんか
18デフォルトの名無しさん:2005/11/11(金) 22:34:34
何がわからないのか書かなければアドバイスの仕様が無いだろ。
丸投げ厨は(・∀・)カエレ!!
19デフォルトの名無しさん:2005/11/11(金) 22:36:55
すみませんいま納得できました。
脳みそ逝っちゃってたみたいです
20デフォルトの名無しさん:2005/11/11(金) 23:19:40
Effecteive C++って読まなくちゃダメ?
21デフォルトの名無しさん:2005/11/11(金) 23:25:27
内容全部知ってりゃ読まなくてもいい
22デフォルトの名無しさん:2005/11/11(金) 23:38:01
>>20
初心者が読むにはいい本だな。
しなくていい間違いをおかさなくて済む。
23デフォルトの名無しさん:2005/11/11(金) 23:58:27
内容知ってるってことは読んだってことだろ。
24デフォルトの名無しさん:2005/11/12(土) 00:01:29
誰が内容知って言ってんの?
25デフォルトの名無しさん:2005/11/12(土) 00:12:37
>>22は確実に知ってるな
>>21も知ってるかもしれない
26デフォルトの名無しさん:2005/11/12(土) 00:14:22
答えになってねぇなw
27デフォルトの名無しさん:2005/11/12(土) 00:21:49
読んだけどつまんなかったよ
マーフィーの法則みたいなもん
28デフォルトの名無しさん:2005/11/12(土) 00:30:24
突然ですが質問しようとして質問の内容をサイトで確認してたら自己解決してしまいました
またなにかあったら来ます
29島野:2005/11/12(土) 01:20:17
SN比の求め方がわかりません。
pgmファイルの求め方がわかりませんのでプログラムお願いします。
/* SN比*/
g = 0.0;
f = 0.0;
for (y = 0; y <= ysize ; y++){
for (x = 0; x <= xsize ; x++){
g = g + a[x][y] * a[x][y];
f = f + (a[x][y] - b[x][y]) * (a[x][y] - b[x][y]);
}
}
h = 20 * log(sqrt(g/f));
printf(" %lf\n",h);
exit(0);
}
まではわかります
急いでます
30デフォルトの名無しさん:2005/11/12(土) 01:24:34
急いでいるからマルチしていいわけではない。
31デフォルトの名無しさん:2005/11/12(土) 02:05:39
>>30がどっかのスレで見かけたときに答えてあげればマルチも未然に防げたのにね
32デフォルトの名無しさん:2005/11/12(土) 02:09:10
>>31
2分9秒で答えられたらな。

つか、両方投稿されたあとに見たんじゃ対処できねーべ?
33デフォルトの名無しさん:2005/11/12(土) 02:50:22
そんな32さんに質問なんだけどさ、
#include<iostream>
using namespace std;
class A
{
int a;
public:
void seta();
}
class B
{
int a;
public:
void seta();
}
int main()
{
foo a;
foo.seta(2);
return 0;
}
ってソースがあったとして、これを3つ以上に分けるにはどうしたらいいですか?
34デフォルトの名無しさん:2005/11/12(土) 02:58:48
35デフォルトの名無しさん:2005/11/12(土) 03:00:23
Class AとClass Bとmain関数で分ければいいんじゃね?

ていうか、コンパイルすら通らないし意味不明。
36デフォルトの名無しさん:2005/11/12(土) 03:00:38
?
37デフォルトの名無しさん:2005/11/12(土) 03:01:32
>>35
分けられますか?
コンパイルが通らないのはセミコロンがぬけちゃってるからですね
3833:2005/11/12(土) 03:02:40
自己解決しました。
39デフォルトの名無しさん:2005/11/12(土) 03:04:45
#include<iostream>
using namespace std;
class A
{
int a;
public:
void seta();
} ;
class B
{
int a;
public:
void seta();
} ;
int main()
{
A a;
A.seta(2);
B a;
B.seta(3);
return 0;
}
こうですね。
40デフォルトの名無しさん:2005/11/12(土) 03:07:25
こうだろ 馬鹿
#include<iostream>
using namespace std;
class A
{
int a;
public:
void seta();
} ;
class B
{
int a;
public:
void seta();
} ;
int main()
{
A a;
a..seta(2);
B b;
b.seta(3);
return 0;
}
41デフォルトの名無しさん:2005/11/12(土) 03:42:19
学校に通ってない初心者です。
独習でC++を学びたいと思っています。

C++を覚える前に、Cの基本的な事柄は覚えておこうと思い、「Cの絵本」を読みました。
が、別スレで、「C++を学びたいんなら、最初からC++を勉強するべき」「仏語を習う前に英語を習ったほうがいいですか?、ってな質問」と書いてありました。

初めからC++の本を読んだほうが良いのでしょうか?


スタイルとしては、受験の時のように、最初に幹をおさえて、後は実際に手を動かす事で覚えて行きたいと思っています。
(幹:重要な情報)

お勧めの本を教えていただけないでしょうか。
どうかお願いします。m(__)m
42デフォルトの名無しさん:2005/11/12(土) 03:50:38
すみません、C++で数値をバイナリ出力したいんですけど、
------------------
using namespace std;

ofstream tmpout("tmp.out", ios::out | ios::binary);
unsigned int tmpint = 256;
unsigned char tmpchar = 32 ;
tmpout << tmpint << tmpchar;
------------------
とするとtmpintの方がテキスト出力されます。
ぐぐったら
cout.write((char*)&x, sizeof(x));
という例が載ってたのですが無理にキャストしてますよね。
このあたりはあきらめてこうしなければならないのでしょうか、
別にエレガントな方法があるのでしょうか。
43デフォルトの名無しさん:2005/11/12(土) 03:55:25
>>41
推薦図書スレに逝け
テンプレに定番紹介サイトが出てる
C++の入門書は、読者がCを知っていることを前提したもの、全くの入門者を対象にしたものとある
それだけ気をつけて、後は自分で自分に合いそうなのを選べ
44デフォルトの名無しさん:2005/11/12(土) 04:06:59
>>43さん、ありがとうございます。
45デフォルトの名無しさん:2005/11/12(土) 04:10:48
勉強し始めの初心者です。
CとC++では、アプリを作るにはどちらがベターなんでしょうか?
46デフォルトの名無しさん:2005/11/12(土) 04:11:45
好きな方からはじめれ。
47デフォルトの名無しさん:2005/11/12(土) 04:18:56
そんな・・・。
これからP2P関連のソフトが作れると有利かなと思ってるのですが、
CとC++、どちらがいいんでしょうか。
お願いします。
48デフォルトの名無しさん:2005/11/12(土) 04:22:45
>>47
両方勉強しろ
49デフォルトの名無しさん:2005/11/12(土) 05:35:42
何に有利なんだいったい。
監獄に行くのに有利?
50デフォルトの名無しさん:2005/11/12(土) 08:17:09
Σの計算を行いたいのですが、お約束というか定番のような書き方はありませんか?
51デフォルトの名無しさん:2005/11/12(土) 09:14:08
んなもん気にせず好きに書け。
52デフォルトの名無しさん:2005/11/12(土) 11:25:42
for文
53デフォルトの名無しさん:2005/11/12(土) 12:43:32
>>42
operator<<()はもともと文字シーケンスに変換して出力するためのもの。
変換せず出力するにはwrite()を使う。
よって別の方法はない。
54デフォルトの名無しさん:2005/11/12(土) 16:10:46
>>42
バイナリ出力クラスを作り、operator<<をオーバーロードして、その
クラスでラップすればバイナリで出力されるようにするとか。

いろんな型のオブジェクトを受け取るためにコンストラクタの数が膨大に
なりそうだが。
55デフォルトの名無しさん:2005/11/12(土) 17:59:20
typedef struct
{
int a;
int b;
}UNKO;
void swap(int &x,int &y)
{
x=y-x;
y-=x;
x+=y;
}
int main()
{
UNKO foo[2];
foo[0].a=1;
foo[1].a=2;
swap(foo[0].a,foo[1].a);
cout<<foo[0].a<<foo[1].a;
return 0;
}
これがなぜかうまくいきません。
なんで?
56デフォルトの名無しさん:2005/11/12(土) 18:15:57
>>55
試してみたら21と表示されたんだが、何が不満なんだ?
57デフォルトの名無しさん:2005/11/12(土) 18:19:06
>>55
swap()の中身をもっと素直に書けよ。ロジック間違ってるぞ。
58デフォルトの名無しさん:2005/11/12(土) 18:23:34
>ロジック間違ってるぞ。
どこが?オーバーフローの危険があるって事?
59デフォルトの名無しさん:2005/11/12(土) 18:28:50
>>58
多分、喪前の脳みそのロジックが(ry
6058:2005/11/12(土) 18:32:31
>>59
本当に分からんのだが。解説してくれないか?
61デフォルトの名無しさん:2005/11/12(土) 18:34:34
>>55
だから、どうしたくて、どううまくいかないんだよ。
Cの前に、人とのコミュニケーションのとり方を学んだ方がいいぞ。
6258:2005/11/12(土) 18:35:10
>>61
おれは55じゃないぞ。
6361:2005/11/12(土) 18:37:54
>>62
君にレスしたつもりは無いのだが・・・
6458:2005/11/12(土) 18:40:29
>>63
そうか。失礼
65デフォルトの名無しさん:2005/11/12(土) 18:46:04
for(int i=0;i<10;i++)
swap(foo[rand%2].a,foo[rand%2].a);
これがまずかったみたいです。
66デフォルトの名無しさん:2005/11/12(土) 19:22:59
67デフォルトの名無しさん:2005/11/12(土) 19:41:20
a→1←b
1-1=0ヒャッホウってことですか。さんkすう
68デフォルトの名無しさん:2005/11/12(土) 19:44:19
void swap(int &x,int &y)
{
if(x!=y)
{
x=y-x;
y-=x;
x+=y;
} }
にしたらうまくいきすまた。ありがとう
6942:2005/11/13(日) 04:27:15
ありがとうございます。
結局無茶キャスト必要なんですね。
70デフォルトの名無しさん:2005/11/13(日) 09:02:47
組み込み型に対して演算子をオーバーロードすることは可能でしょうか?
たとえばint型の()演算子をオーバーロードして、

5(6) = 11;

みたいなことはできないでしょうか?
71デフォルトの名無しさん:2005/11/13(日) 09:15:49
無理。
72デフォルトの名無しさん:2005/11/13(日) 09:16:02
>>70 できません。
73デフォルトの名無しさん:2005/11/13(日) 09:25:25
そうですか。。。ありがとうございました。別の方法を考えます
74デフォルトの名無しさん:2005/11/13(日) 09:29:17
>>70
最低限どこかにユーザー定義型が関わっている必要がある。
75デフォルトの名無しさん:2005/11/13(日) 09:43:23
()演算子をオーバーロードする場合は左辺がユーザー定義型である必要があって、
最低限どこかにあれば良いわけではない。
76デフォルトの名無しさん:2005/11/13(日) 10:18:59
そういう縛りがないと言語の形が変わってしまうからねぇ。
77デフォルトの名無しさん:2005/11/13(日) 11:44:21
>>50
> Σの計算を行いたいのですが、お約束というか定番のような書き方はありませんか?

a) 絶対値の小さいほうから足す。
b) 予め平均的な値がわかっているなら、平均値からの差を加算して
 最後に平均値分を足す。
c) 繰り越し用の変数を用意する。

ttp://www.amazon.co.jp/exec/obidos/ASIN/4320013433/249-7532622-7809132
78デフォルトの名無しさん:2005/11/13(日) 17:40:42
>>77
a)ってどういう意味があるんだ?
79デフォルトの名無しさん:2005/11/13(日) 18:02:40
計算誤差が少なくなる
80デフォルトの名無しさん:2005/11/13(日) 18:08:28
>>78
情報落ちを防ぐための常套手段だな
基本中の基本だから知っておくと吉
81デフォルトの名無しさん:2005/11/13(日) 18:13:17
Σの計算ってどんな計算だっけ
82デフォルトの名無しさん:2005/11/13(日) 18:17:45
総和

Σ[n=1→10]f(n)ならf(1)+f(2)+・・・+f(10)
83デフォルトの名無しさん:2005/11/13(日) 18:21:15
あー、浮動少数点の話か。
84デフォルトの名無しさん:2005/11/13(日) 18:40:04
>>81
普通のfor文

for(i=0;i<N;i++)

Σにもにたような引数あるっしょ?
85デフォルトの名無しさん:2005/11/13(日) 22:26:59
operatorはどういった機能を持っているのですか?
またどういう時に使えば良いのでしょうか。
ご教授下さい
86デフォルトの名無しさん:2005/11/13(日) 22:31:11
本買え
87デフォルトの名無しさん:2005/11/13(日) 23:44:39
>>85
単なるメンバ関数やん。
ただ、式に使う演算子と同じ位置に置けるので、何かと便利。
優先順位も同じ事に注意。
88デフォルトの名無しさん:2005/11/13(日) 23:51:08
>>87
非メンバの演算子多重定義関数も作れる。
89デフォルトの名無しさん:2005/11/14(月) 00:30:00
operator int()とかのメンバも作れるよ。
トラブルの元なので、非推奨だけど。
(std::stringがoperator const char *()を持っていないのも、そのため)
90デフォルトの名無しさん:2005/11/16(水) 00:42:18
変数に_T( )って何のためにつけるのですか?
ヘルプ読んでも意味がいまいちわかりません
91デフォルトの名無しさん:2005/11/16(水) 00:43:41
何がわからないのかわかりません。
92デフォルトの名無しさん:2005/11/16(水) 00:46:07
変数に_T( )って何のためにつけるのですか?
93デフォルトの名無しさん:2005/11/16(水) 00:48:20
ヘルプに書いてあるとおりですが
94デフォルトの名無しさん:2005/11/16(水) 00:52:24
このスレは何のためにあるんですか
95デフォルトの名無しさん:2005/11/16(水) 00:55:39
あなたは何のために生きているんですか
96デフォルトの名無しさん:2005/11/16(水) 00:56:56
質問に質問で答えるのは最低な行為です
97デフォルトの名無しさん:2005/11/16(水) 00:57:13
自分で調べた方が早そうですのでもう結構です
98デフォルトの名無しさん:2005/11/16(水) 01:16:19
意味不明な質問を超能力で見抜けない人は(質問に答えることは)難しい。

WindowsのUNICODE対応関係?
99デフォルトの名無しさん:2005/11/16(水) 01:17:35
違う
100デフォルトの名無しさん:2005/11/16(水) 01:23:46
いやまぁ、超能力者を目指すより

「それだけじゃ何が訊きたいかわからん。もっと詳しく書かんか!」

って補足要求するほうが御互いのためだけど。

そもそも”ヘルプ”って書いただけじゃ何のヘルプなんか誰も分からん。
まぁ、その程度のことも気がつかんレベルの質問者なわけだが。

VBからVCに移行したような人間は、開発環境と言語を分けて考えることが
出来ないので、この手の頓珍漢な質問をする嫌いがあるな。
101デフォルトの名無しさん:2005/11/16(水) 01:31:33
えっと細かく質問書くのがめんどくさかっただけなんで
ささっと答えが返ってくれば儲けもんってかんじですわ
それ以上は最初から期待してないから。
102デフォルトの名無しさん:2005/11/16(水) 07:56:10
首吊ればいいと思うよ(^o^)
103デフォルトの名無しさん:2005/11/16(水) 11:05:54
_T()T
104デフォルトの名無しさん:2005/11/16(水) 15:11:01
TCHARに対応したマクロだったと思うが
105デフォルトの名無しさん:2005/11/16(水) 18:01:03
Cで可変個の動的引数を持つ関数内で、
関数にフォーマットと引数を可変個で渡してさらにその関数内でprintf
にそれらを渡すにはどうすればいいですか?
うまくいかなかったソースは以下です

void Func(char *cpFormat, ...)
{
va_listargs;

/* 引数を取得 */
va_start(args, cpFormat);

       /* 出力 */
printf(cpFormat, args);

return;
}
106デフォルトの名無しさん:2005/11/16(水) 18:03:11
仮に呼び出し側はこんな感じで…

int main() {

Func("val = %d, str = %s", 10, "値");
return 0;
}
107デフォルトの名無しさん:2005/11/16(水) 18:19:37
printf→vprintfに汁
108デフォルトの名無しさん:2005/11/16(水) 18:25:01
>>107
ありがとうございます!
ファイル出力もやりたかったんですがvfprintfていうのもあるんですね。
何とかなりそうです。どうもでした。
109デフォルトの名無しさん:2005/11/16(水) 20:09:42
C++もWindowsもほとんどわかってないのにあるアプリの国際化関連に手を出して嵌まってしまいました。
SDLを使ったゲームです。元はLinuxですがWindows(一応98以上が動作対象)に移植されています。
使ってるライブラリはSDL(net,image.mixer,ttf)とstlportぐらいです。
ゲームデータは内部的にはUTF-8をstringで扱っているようです。 
ファイルパスもUTF-8のまま渡すので、たまに特定の文字(日本語)を含むファイルパスが破壊されます。
linuxだと文字化けすることはあってもパスが書き換わってしまうことはないので問題ないのですが、Windowsだとどこかでぶっこわされるようです。
fstreamの生成の時に渡すファイルパスが正しいことは確認してあります。
ここで割り込んでCP932に変換してもいいのですが、できればUnicodeのまま渡したいのです。

前置きが長くなってしまいましたが、UTF-8で保持しているファイルパスを使ってWindowsのファイルを開くにはどうしたらよいのでしょうか?
USC2に変換して*W系のAPIを使えばよいのでしょうか?その場合はハンドラをどのようにfstreamに結びつけたらよいのでしょうか?
9x系切り捨てちゃっても大丈夫です。

長くなってしまい申し訳ありませんが、どうかよろしくお願いします。
110109:2005/11/16(水) 20:12:01
ビルド環境としてはVS TheSpokeを使っています。MinGWでもビルドはできます。
111デフォルトの名無しさん:2005/11/16(水) 20:36:45
>>109
コンストラクタでUTF-8の文字列を受け取ってUTF-16へ変換し、(ここまではコンストラクタでやるべきではないかもしれないが)
CreateFileWを呼びその戻り値のWindowsのハンドルを保持して、そこへ入出力するような
basic_i/o/iostreamとbasic_streambufの派生クラスを作る。
というのが(おそらく)C++のiostreamで想定されているやり方になると思う。
112デフォルトの名無しさん:2005/11/16(水) 21:41:59
質問です。
LinuxでGCCつかってプログラム練習しているのですが、
WindowのGetTickCountの様にミリ秒で経過時間が分かる関数は無いでしょうか。
113デフォルトの名無しさん:2005/11/16(水) 22:36:53
Bcc developer使ってるんですが、リダイレクションのやり方教えて下さい
114デフォルトの名無しさん:2005/11/16(水) 23:15:43
int n;
double x[1000];
double sum, max, min, avg;

n = input( x );

int input(double *xx){
int i=0;

while(scanf("%lf",xx+i)!=EOF){
i=i+1;
}

return i;
}
これってどういう計算をしてますか?配列xを確保して、input関数にとんで、int input(double *xx)のとこがよくわかりません
*xxというのはポインタですよね?
115デフォルトの名無しさん:2005/11/16(水) 23:29:59
8f10.6型のデータが書き込まれたテキストファイルから、
数値一つ一つを分けて読み込むにはどうすれば良いんでしょうか?
116デフォルトの名無しさん:2005/11/17(木) 01:14:07
>>114
ポインタのあたりを勉強しなおせ。
scanf呼び出しの中のxx + iは結局&x[i]を意味することになる。
117デフォルトの名無しさん:2005/11/17(木) 02:02:51
>>112
gettimeofday
118デフォルトの名無しさん:2005/11/17(木) 06:54:30
C++で起動させたDOSプロンプトに文字列を送りたいのですが、
よい関数はありませんか?
sendMessageなど試したのですが、DOSプロンプトは受信しないので
無理でした。
よろしくお願いします。
119デフォルトの名無しさん:2005/11/17(木) 07:14:46
>>118
Dosプロンプト?コンソールアプリのこと?
起動した後だと無理じゃね?
起動前ならShellExecuteから呼び出すときに引数に突っ込んでやればいいんじゃね?
120デフォルトの名無しさん:2005/11/17(木) 08:25:37
C++でコンソールアプリケーションを起動し、そこに文字列を送り込み
反応によって動作を変えようと思ってます。

完成されたコンソールアプリケーションを外部から操作したいのですが、
C++上で処理することは可能でしょうか?
121デフォルトの名無しさん:2005/11/17(木) 08:39:12
無理
122デフォルトの名無しさん:2005/11/17(木) 08:46:15
可能です。
>>121はバカですか?
123デフォルトの名無しさん:2005/11/17(木) 08:56:31
>>120
無名パイプ
124デフォルトの名無しさん:2005/11/17(木) 09:03:18
無理
125デフォルトの名無しさん:2005/11/17(木) 09:12:55
>>122
いいえ、>>122がバカなのです。
このことは、この先いくら待っても>>122の口から
「ではどうすれば可能か」の説明が出てこないことで
証明されることでしょう :-)
126デフォルトの名無しさん:2005/11/17(木) 09:23:20
要は>120の解釈次第だね。

そのコンソールアプリが標準入力を受け取るようにできているのならpopen()すればいい話だし、
コマンドライン引き数で済むならもっと簡単。
しかし、そうでないならまず操作するのは無理って話だと思うけど。
127デフォルトの名無しさん:2005/11/17(木) 09:35:57
説明不足ですみませんでした。
DOS版FTPのように、多少引数は取りますが、最初から入力待ちの状態です。

popen()というのを調べてみます。

一般的には、どのような方法が使われているのでしょうか?
128デフォルトの名無しさん:2005/11/17(木) 09:47:19
129デフォルトの名無しさん:2005/11/17(木) 09:59:40
>>128さん
ありがとうございます。サクっと読んでみたところ>>123さんの
無名パイプの意味が分かってきました。

もっと簡単に操作できると思ったのですが、意外と複雑でびっくりです。

みなさん、ありがとうございました。
130デフォルトの名無しさん:2005/11/17(木) 10:21:28
popen()が難しいと思うのならプログラミングなんか止めちまえ。
131112:2005/11/17(木) 10:46:14
>>117
うまくいきそうです、ありがとうございました。
132109:2005/11/17(木) 16:26:55
>>111
ありがとうございました。
C++のクラス関係よくわかってないのです。まあヘッダファイルでも追ってググりながらがんばります。
>>115
単純にやるならfscanfとか?
>>115
LinuxならCPUクロック取得できたはずだよ。
Linux タイマとかでググれば必ず出るはず。
gettimeofdayもその系統の関数だけど
133デフォルトの名無しさん:2005/11/17(木) 17:56:44
FILE *fp;を使って計算txtファイルに出力したいのですが、リダイレクションでデータを入力した時はうまくいくのに、
手動で入力して、手動でEOFを入力した時はtxtファイルは生成されるんですが、中身がありません。
どうしたらいいでしょう?


FILE *fp;


n = input( x );
printf( "number of data=%d\n", n);
printf( "sum=%f, max=%f, min=%f, avg=%f\n", sum, max, min, avg );



fp=fopen("result10-2.txt","wt");

fprintf(fp,"number of data=%d\n", n);
fprintf(fp,"sum=%f, max=%f, min=%f, avg=%f\n", sum, max, min, avg );

fclose(fp);

int input(double *xx){
int i=0;

while(scanf("%lf",xx+i)!=EOF){
i=i+1;
}

return i;
}
134デフォルトの名無しさん:2005/11/17(木) 18:00:20
C++で相談です。
class Base {
};
class Parent : public Base {
};
class ChildA : public Parent {
};
class ChildB : public Parent {
};
class ChildC : public Base {
};

という構成の時に、BaseクラスのポインタがChildA,ChildB,ChildCを
指し示している時に、これがParentから派生しているかどうかを
判定したいのです。
if(typeid(*base) == typeid(ChildA)) {
}
とするとChildAを指し示しているかどうかは判定できますが、Parentの
子クラスかどうかはどうやって判定すればいいのでしょうか。
135デフォルトの名無しさん:2005/11/17(木) 18:05:18
>>133
そろそろ宿題スレいけや。114よ
136デフォルトの名無しさん:2005/11/17(木) 18:12:09
>>134
Parent*にdynamic_castしてみるというのはどうか?
137デフォルトの名無しさん:2005/11/17(木) 18:14:43
private継承はどうするの?
138デフォルトの名無しさん:2005/11/17(木) 18:16:02
それぞれのクラスに識別フラグを用意しといたらいいだろ
1ビット目のフラグが立ってるときはParentからの派生で
2ビット目の(略
139デフォルトの名無しさん:2005/11/17(木) 18:20:29
>>133
>printf( "number of data=%d\n", n);
ではなにが出力されている?
140デフォルトの名無しさん:2005/11/17(木) 18:29:48
>>139
それは正しく自分の入力した個数だけ出ます
141デフォルトの名無しさん:2005/11/17(木) 18:33:22
それじゃぁ問題ないはずだ。
・実際にリダイレクトではOKで手入力ではNGのソースを貼る。
・デバッガで動かしているなら、プログラムが終わったのを確認してからファイルを見る。
・諦める。

お好きなのをどうぞ。
142デフォルトの名無しさん:2005/11/17(木) 19:38:47
>>133
よくわからないけどバッファがフラッシュされてないんじゃね?
明示的にやるならfflush(FILE *fp)をfcloseの前に呼ぶ。
143デフォルトの名無しさん:2005/11/17(木) 19:44:25
意味ない。
144デフォルトの名無しさん:2005/11/17(木) 20:34:50
cinにstringが使えないのはなぜでしょうか?

#include <iostream>

using namespace std;

int main()
{
string str;
//char str[1327];

cin >> str;
cout << str << endl;

return 0;
}
145デフォルトの名無しさん:2005/11/17(木) 20:51:25
>>144
#include <string>
146デフォルトの名無しさん:2005/11/17(木) 20:58:12
>>145
うまくいきました
ありがとうございます
147デフォルトの名無しさん:2005/11/17(木) 21:04:37
このときに数字が1.00000
のように現れてしまうのはどうすれば直るでしょうか。
#include <stdio.h>

int main(void)
{
printf("%f",1.0);
printf("%f",2.0 - 1.0);
return 0;

}
148デフォルトの名無しさん:2005/11/17(木) 21:10:08
>>147
別に故障じゃないから直らない
149デフォルトの名無しさん:2005/11/17(木) 21:12:30
そうなのですか。ありがとうございます。
小数点を第一位までしか表示しないようにするのは難しいのでしょうか。
150デフォルトの名無しさん:2005/11/17(木) 21:16:47
おまえの使っている参考書はなんだ?相当初心者向けの書籍にも書いてあるぞ。
フォーマット指定子使えないならfputで十分じゃ。
151デフォルトの名無しさん:2005/11/17(木) 21:47:33
巻末に載っていました、、がまったく使い方がわからないので
きっとそのうちわかるようになるでしょう。
ありがとうございました〜
152デフォルトの名無しさん:2005/11/17(木) 22:06:25
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
JMぐらいはチェックしようぜ。ちょっとだけ古いのだが。
153デフォルトの名無しさん:2005/11/17(木) 22:13:07
次のように画面に出力するソースコードを、
変数aの値を変数bに代入し、変数aに新しい値を代入することで作成したいのですが
下記のソースコードでは最初のaも2になっちゃうのですがどのようにすれば良いのでしょうか
-----------
 a=1
 b=1
 a=2
-----------
/* likemeet2 */
#include <stdio.h>

int main(void)
{
int a;
int b;

a=1;
b=a;
a=2;

printf("a=%d\n",a);
printf("b=%d\n",b);
printf("a=%d\n",a);
return 0;
}
154デフォルトの名無しさん:2005/11/17(木) 22:21:07
>>153
だってaに2いれてんじゃん。
155デフォルトの名無しさん:2005/11/17(木) 22:24:01
う〜ん。。。ヒントが『aにもう1回代入すれば』とあったので
上記のコードを打ってみたのですが。。。
ごめんなさい無知なもので ><
156デフォルトの名無しさん:2005/11/17(木) 22:32:48
>>155
つーか、変数ってのは箱だと考えるわけよ。
int a;
って書くと、aって名前の箱が用意されるわけよ。
printf("a=%d\n",a);
の直前で
a=2;
ってやってるから最初に描画される数字が2になっちゃうわけよ。
って考えるとどこで2をaにぶち込むべきか見えてくるんじゃないだろうか?
157デフォルトの名無しさん:2005/11/17(木) 22:35:57
>>155
あ、重要な文が抜けてたw

箱っちゅーことはそこに入れたり出したりできるわけよ。

a = 1;

でaっちゅー箱に1を入れておく。
次に、

a = 2;

ってやると、aに入ってた1は破棄されて代わりに2が入るわけよ。
158デフォルトの名無しさん:2005/11/17(木) 22:37:47
説明してて思うんだけど、
a=1;
をいれてから、
a=2;
をいれた時点でaに入ってた1が綺麗さっぱり消えちまうところが
箱って表現は駄目駄目なんだなw
むぅー。どう説明したものか?w
159デフォルトの名無しさん:2005/11/17(木) 22:42:36
>>156
なるほど〜では最初のaの値を出力してから
再度計算しなおしたものを出力するのですかね
下記のように修正すれば。。。

a=1;
b=a;

printf("a=%d\n",a);
printf("b=%d\n",b);

a=2;

printf("a=%d\n",a);
160デフォルトの名無しさん:2005/11/17(木) 22:47:40
>>158
新しく中身を入れるとき(その例ではa = 2;を行うとき)には、
前に入っていたものは捨てられると表現してはどうでしょうか。
161デフォルトの名無しさん:2005/11/17(木) 22:53:06
おぉ^0^できましたっ!
ありがとうございます
162デフォルトの名無しさん:2005/11/17(木) 23:02:29
>>160
そのびっくり箱を理解する前に変数理解してらw
163デフォルトの名無しさん:2005/11/17(木) 23:15:53
またまた質問なのですが
演算子にて『¥』とは何を示すのでしょうか?
問題の説明不足かもですが。。
164デフォルトの名無しさん:2005/11/17(木) 23:22:44
%dを表示させるためにはどうすればいいのでしょうか。
普通だと言語の一部になってエラーとなるのですが、
表示させる文字として認識させる方法。。
165デフォルトの名無しさん:2005/11/17(木) 23:22:45
>>163
演算子?
166デフォルトの名無しさん:2005/11/17(木) 23:23:16
>>164
%%d
167デフォルトの名無しさん:2005/11/17(木) 23:36:00
>>164ありがd
168デフォルトの名無しさん:2005/11/17(木) 23:37:05
>>165
えとint型の変数aを使って、下記のように画面に出力するソースコードを書いてください。
という問題のヒントに(演算子『\』を使う)とあったので。。。

90min=1h30m
169デフォルトの名無しさん:2005/11/17(木) 23:46:10
この二種類ってcharかint(文字コード?)かの違いはわかったのですが、
intの時getchar(a);putchar(a);にできなくて
charの時gets(a);puts(a);のようにできるのですか?
逆もまた然り
それからgets・putsの「s」は何の略ですか?
char a[80];

gets(a);
puts(a);

_/_/_/_/_/_/_/

int a;

a=getchar();
putchar(a);
170デフォルトの名無しさん:2005/11/17(木) 23:57:59
こんばんわ。

アプリケーション自分自身を再起動する実装を行いたいのですが、
どうすればいいのでしょうか?

もしくは他アプリケーションに監視させて、
監視先アプリが終了したことを感知して何秒後かに
再起動させる方法でもいいのですが、
監視アプリが受身じゃない為(メッセージを受け取らない)、
どうすればいいのかわかりません。

環境はVC++.NETです。

よろしくおねがいいたします。
171デフォルトの名無しさん:2005/11/17(木) 23:59:35
>>164
>普通だと言語の一部になってエラーとなるのですが
%dは言語の一部ではない。printf関数の仕様だ。
172デフォルトの名無しさん:2005/11/18(金) 00:03:35
>>170
A=アプリ, B=Aを起動するだけのプログラム

Aが終了する前にBを起動。
A終了。
BがAを起動する。
173デフォルトの名無しさん:2005/11/18(金) 00:03:41
>>170
プロセスを監視しとけ
174デフォルトの名無しさん:2005/11/18(金) 00:10:28
170です。

ご返答ありがとうございます。

再起動対象アプリはいつ終了するかわからない状態です。
173さんのご回答を実装したく思います。

プロセス監視というのはタスクマネージャを監視することでしょうか?

A:再起動対象
B:監視

A→B起動(BはAのハンドルを取得)
BはAのハンドルを用いて監視する?
175デフォルトの名無しさん:2005/11/18(金) 00:13:05
>>169
文字を表すにはchar型で充分だが、それもやはり整数型なので暗黙の型変換などで
しばしばintとして扱われる。また、getchar()の戻り値は異常を示す必要があるために
intとなっている。gets()に渡しているのはcharではなく、charへのポインタであることにも注意。
gets()/puts()のsはstringのsだろう。
但し、gets()はfgets()に置き換えることを強く推奨する。

>>168
それはbasicの演算子ではないのかな?
176デフォルトの名無しさん:2005/11/18(金) 00:21:17
>>175
すみません。。演算子にも色々あるのですね
まだ独学で勉強はじめたばかりで ><
177デフォルトの名無しさん:2005/11/18(金) 00:30:31
>>174
プロセスが終了すると、そのプロセスハンドルはシグナル状態になる。
あとプロセスハンドルはプロセス固有なので、そのまま他プロセスに渡しても意味無いぞ。
178デフォルトの名無しさん:2005/11/18(金) 00:42:03
>>176
独学はいいけど、一体君は何の勉強をしているのかね。
179デフォルトの名無しさん:2005/11/18(金) 00:55:17
>>178
えと…C言語なるものですが(汗
本を読みながら、メモ帳とGCCというコンパイルソフト(?)で
実際に動かしてます ><
180デフォルトの名無しさん:2005/11/18(金) 00:58:58
Windowsのプログラムで、
ウィンドウプロシージャやダイアログプロシージャで、
子ウィンドウ(コントロール)上にマウスが載ったときや、離れたとき、どのようなメッセージが送られて来るのですか?
(MouseEnterとかMouseLeaveイベントのような)
 それともマウスが動くたびにコントロールのサイズ内かどうかを調べる他無いのでしょうか。
181デフォルトの名無しさん:2005/11/18(金) 01:05:49
>>179
それではどの本(など)のどこに>>168のような戯けたことが書いてあったのかね。
182デフォルトの名無しさん:2005/11/18(金) 01:21:31
>>175
ありがと
183デフォルトの名無しさん:2005/11/18(金) 01:31:56
ここは馬鹿に個人授業するスレでつか?
184デフォルトの名無しさん:2005/11/18(金) 04:00:06
>181
すみません 寝てました ><
秀和システムが発行している
『世界でいちばん簡単なC言語のe本』
                   著者:堀江 幸生

この本の90ページにある練習問題3
int型の変数aを使って、次のように画面に出力するソースコードを書いてください。

90min=1h30m
------------
解答
#include <stdio.h>

int main(void)
{
int a;

a=90;

printf("%dmin=%dh%dm\n",a,(a\60),(a%60));

return 0;
}
185デフォルトの名無しさん:2005/11/18(金) 04:04:32
もしかすると
(a\60)は誤字で(a/60)が正しいのですかね(汗
正直何がわからないのかもわからず
書かれてることを鵜呑みにしちゃうので。。。申し訳ありません ><
186デフォルトの名無しさん:2005/11/18(金) 04:28:56
うはぁ、すげぇ誤字だ。まぁ、斜線の傾きの違いだけといえば言えなくもないが。
187デフォルトの名無しさん:2005/11/18(金) 04:40:42
>>斜線の傾きの違いだけといえば言えなくもないが。

すみません。ここですでに理解できないレベルでして。。。汗
傾きによる角度かなにかです?
188デフォルトの名無しさん:2005/11/18(金) 04:49:55
>>187
「\」と「/」の違い。
189デフォルトの名無しさん:2005/11/18(金) 05:03:51
>>187
「バックスラッシュ」でぐぐれ
190デフォルトの名無しさん:2005/11/18(金) 05:06:39
なるほどぉ
そっちでも金マーク入力できたのですね 丁寧にありがとです
191デフォルトの名無しさん:2005/11/18(金) 05:40:02
これがわかりません。おねがいします。

>次のプログラムがどのような動作をするか考えましょう。
#include <stdio.h>
int main(void)
{
int x, y, z;
x = 2;
y = 7;
z = x >= y;←これがわかりません。x>=yは偽ですがそれでzはどうなるのですか?
z = 4;
x = y = y > これはまったく見当も。z;←y=y>zとはなんぞや。。
y++;←+1ですよね。
x--;←−1ですよね。

printf("x = %d, y = %d, z = %d\n", x, y, z);

return 0;
}
192デフォルトの名無しさん:2005/11/18(金) 05:43:17
全部同じ奴か?
氏ねよ。

以降スルーでよろ。
193191:2005/11/18(金) 05:58:43
た、多分何かの誤解かと。。
194デフォルトの名無しさん:2005/11/18(金) 06:11:30
たぶん私と間違えたんだろうね^^;
んじゃ私のレベルが上記のコードと見解すると。。。。

>>int x, y, z;
これってアリなの?便利でいいね
いつも3行にしてたぁ^0^;
195デフォルトの名無しさん:2005/11/18(金) 06:18:41
って途中でカキコしちゃった^−^;
実際に動作させてみたけど
9行目って
>>x = y = y > これはまったく見当も。z;←y=y>zとはなんぞや。。
x = y = y > z;
ってことでいいのかな?

結果は『x=0、y=2、z=4』となったよぉ^0^意味わからないけど(汗
196デフォルトの名無しさん:2005/11/18(金) 06:18:53
てゆうか入門書ぐらい買えよ。
197デフォルトの名無しさん:2005/11/18(金) 06:25:29
まぁどんな駄レスにもレスをつけない191に教える気は毛頭ないがな
198191:2005/11/18(金) 08:50:07
林晴比古某のを併読させてもらってるのですが、そこがわからなかったです。
x = y = y > z; のミスです。
以下のようにして地道に調べてみたのですが。。
その不等号が正であれば1で偽であれば0。
x = y = y>z;
はxにyの値を代入。y>zは正。yは1。xは1。
という理解でいいのでしょうか?
int x,y,z;

x=2;
y=7;
printf("x = %d, y = %d, z = %d\n",x,y,z);
z = x>=y;
printf("z = x>=y 偽\n");
printf("x = %d, y = %d, z = %d\n",x,y,z);
z = x<=y;
printf("z = x<=y 正\n");
printf("x = %d, y = %d, z = %d\n",x,y,z);
z = 4;
printf("z = 4\n");
printf("x = %d, y = %d, z = %d\n",x,y,z);
x = y = y>z;
printf("x = y = y>z 正\n");
printf("x = %d, y = %d, z = %d\n",x,y,z);
y++;
printf("y++\n");
printf("x = %d, y = %d, z = %d\n",x,y,z);
x--;
printf("x--\n");
printf("x = %d, y = %d, z = %d\n",x,y,z);
return 0;
}
199デフォルトの名無しさん:2005/11/18(金) 08:51:16
200デフォルトの名無しさん:2005/11/18(金) 09:47:04
abcすら読めない奴に英語を教えるようなもんだな。
201デフォルトの名無しさん:2005/11/18(金) 09:53:34
>>191
> z = x >= y;

z に式「x >= y」の値を代入。
式「x>=y」の値は、x>=y の真偽値で、真の時は1で偽の時は0。

> x = y = y > z;

x に式「y = y > z」の値を代入。
式「y = y > z」の値は、y に式「y > z」の値を格納した結果。
つまり、y に格納した値(式「y > z」の値)。
式「y > z」の値は、y > z の真偽値で、真の時は1で偽の時は0。
202デフォルトの名無しさん:2005/11/18(金) 09:55:05
あーあ、これでまたabcから教えろって奴が寄ってくるぞ。
203デフォルトの名無しさん:2005/11/18(金) 10:08:02
abcはわかります。更に自分でdefgまで学びました。
続きを教えてください!
204191:2005/11/18(金) 10:25:50
>>192-
ありがとうございました。abcもわからない私共奴をどうか何卒宜しく。
205デフォルトの名無しさん:2005/11/18(金) 10:28:24
日本語もわかってないようだね
206デフォルトの名無しさん:2005/11/18(金) 11:47:42
質問です。
開発環境は、Microsoft Visual C++ .NETです。

class.group.method()のような記述方法を可能にしたく、
groupを構造体、methodをその構造体内の関数として以下のように宣言しました。

class Test
{
public:
struct a
{
void b();
}a;
};

void Test::a::b()
{
}

これにより、以下のような記述でコンパイルは通りました。

void hoge()
{
Test tes;
tes.a.b();
}
207続き:2005/11/18(金) 11:48:03
しかし、問題がIntelliSenseで、tes.a.までタイプすると、
「. or -> の左側の式を理解できません」と言われ、メソッド一覧が機能してくれません。
(tes.ならば構造体の一覧が出てきます)
これは、IntelliSenseのバグなのでしょうか?
または、C++でクラス内の構造体の中に関数を置くことは言語仕様上イリーガルなのでしょうか?
他にも、良い方法がありましたら教えていただけると有り難いです。
以上です。よろしくおねがいいたします。
208デフォルトの名無しさん:2005/11/18(金) 11:56:22
コンパイラよりもIntelliSenseを信用するのか……
209デフォルトの名無しさん:2005/11/18(金) 11:57:09
>>207
VisualStudioの使い方につきスレ違い。該当スレへどうぞ。
210デフォルトの名無しさん:2005/11/18(金) 11:58:10
>>136
出来ました。ありがとう!
211デフォルトの名無しさん:2005/11/18(金) 12:02:03
>>208-209
レスポンスいただきありがとうございます。
IntelliSenseが狂うということは、言語的におかしい書き方をしたのかと不安になって質問した次第です。
えーと、この書き方は特に問題ないということでしょうか?
それなら良かったです。IntelliSenseについてはVSスレにて聞いてみます。
どうもありがとうございました。
212デフォルトの名無しさん:2005/11/18(金) 13:15:58
>>206
構造体のタグ名と変数名がどっちも aなのは意味があるのか?
コンパイルは通るがあまり良くはないだろう。
IntelliSenseがとちるのはそのせいでは?
タグ名を変更するか省略するかしたほうが良いと思うが。
213デフォルトの名無しさん:2005/11/18(金) 13:36:01
長方形の右上と左下の座標を取得して
面積の計算をしたいんですけど、どうすればいいですか?
宿題で出ちゃって分からないんです!
オブジェクト指向って何・・・
214伝説新人タクシ:2005/11/18(金) 13:37:47
>>213
それにどうオブジェクト指向が関係するかがわからん‥。
215デフォルトの名無しさん:2005/11/18(金) 13:37:50
>>213
とりあえず本買って勉強してください。
216デフォルトの名無しさん:2005/11/18(金) 13:41:38
>>213
右上座標を(x1, y1)、左下座標を(x2, y2)とする。
このとき、面積はabs(x1 - x2) * abs(y1 - y2)となる。

尚、座標の取得の仕方については何ら情報が与えられていないので了解済みと仮定した。
217デフォルトの名無しさん:2005/11/18(金) 13:44:56
このスレには教えたがりさんが多いでつね。
218デフォルトの名無しさん:2005/11/18(金) 13:49:31
教えたがりっつ-か、皮肉屋な希ガス。
219デフォルトの名無しさん:2005/11/18(金) 14:32:13
あと1時間でやらないとだめなんです???
長方形がある。縦横の辺は垂直水平である。左下および右上の頂点座標を与えて長方形の面積をオブジェクト指向で計算せよって問題でした。
220デフォルトの名無しさん:2005/11/18(金) 14:35:19
先生が生徒がまったくわからない宿題出すわけが無いだろ。
自業自得。
221デフォルトの名無しさん:2005/11/18(金) 14:36:07
>>219
スレ違いだ。
宿題スレに逝け。
C/C++の宿題を片付けます 53代目
ttp://pc8.2ch.net/test/read.cgi/tech/1132102992/
222デフォルトの名無しさん:2005/11/18(金) 14:56:10
>>212
ビンゴでした!タグ名を変更したらきちんと一覧可能になりました!
タグ名については、最初タグ無しで書いていたのですが
関数宣言の際に、Test::a::b()とすると
error C2039: 'a' : 'Test' のメンバではありません。
と言われ、どうやらタグ名が実際には使用されるらしく(?)
タグ名に変数名を入れていたのです。
しかしこれが盲点だったのですね。(^^;
いやいや、やっとスッキリしました。どうもありがとうございました!
223デフォルトの名無しさん:2005/11/18(金) 15:21:00
>オブジェクト指向で計算せよ
>オブジェクト指向で計算せよ
>オブジェクト指向で計算せよ

難しい問題だ。
224デフォルトの名無しさん:2005/11/18(金) 15:35:15
質問です。
friend void Hoge(); でフレンド関数が
friend class CTest; でフレンドクラスが設定できますが、

フレンドクラス関数というのは設定できないのでしょうか?
イメージ的には
friend class CTest.run();
といった感じに、クラスの特定の関数にだけフレンド設定したいのです。
225デフォルトの名無しさん:2005/11/18(金) 15:59:36
>>224
friend void Hoge()に実装を書いて、
そいつをCTest::run()から呼べばいいじゃん。
226デフォルトの名無しさん:2005/11/18(金) 16:02:15
確かにそれはそのとおりですが、なるべくならClass外を汚したくないものです。
227デフォルトの名無しさん:2005/11/18(金) 16:18:17
>>224
friend void CTest::run();
228デフォルトの名無しさん:2005/11/18(金) 17:45:39
>>227
それは試してダメだっ…

どうみても返り値をつけるのを忘れていたからエラーが出てただけです。
本当にありがとうございましたorz

229デフォルトの名無しさん:2005/11/18(金) 21:20:35
型とか数はどうでもいいんですが、
例えば、int array[10]; と宣言してある場合に、arrayだけ書けばそれは配列のポインタでいいんですよね?
230デフォルトの名無しさん:2005/11/18(金) 21:41:58
先頭要素へのポインタになる
231デフォルトの名無しさん:2005/11/18(金) 21:46:25
232デフォルトの名無しさん:2005/11/18(金) 22:07:15
>>230
うそこけ。
233デフォルトの名無しさん:2005/11/18(金) 22:31:42
プログラム自体全くの初心者で、卒論で使うためC++を勉強している者です。
Aクラスのprivateなデータメンバxに対して、Bクラスのある関数からアクセスしたいときに、
Aクラスに戻り値をxとしたxのgetterを作ってそれ経由でアクセスするのは何となく理解できたのですが
xが構造体や配列である場合はどのようにしてアクセスすれば宜しいでしょうか?
Aクラスのインスタンスが持つ座標や行列を構造体や配列で書いており、それをBクラスのインスタンスが取得したいです。

friendを使うとできそうなのですが、「friendの乱用はよくない」という記述を見かけたので・・・
234デフォルトの名無しさん:2005/11/18(金) 22:35:53
void A::getter(x* value);とでもすればいいんじゃないかな
235デフォルトの名無しさん:2005/11/18(金) 22:44:22
>>233
構造体は戻り値として返せる。(が、効率を考えるとconstな参照を返すのが良い)
配列は返せないが、配列の先頭要素へのポインタを返せばよい。(constならなお良い)
236デフォルトの名無しさん:2005/11/18(金) 23:19:39
構造体やポインタを理解出来ないのならムリしてC++使わなくてもいいんじゃないの?
237デフォルトの名無しさん:2005/11/18(金) 23:37:06
>227
うわっ、今の今までフレンドメンバ関数?はできないと思ってた。
何でそう刷り込まれていたんだろう?
238デフォルトの名無しさん:2005/11/18(金) 23:39:26
あまり使い道がないからじゃない?
239233:2005/11/18(金) 23:43:33
レベルの低い質問にも関わらず
丁寧なアドバイスをいただきありがとうございました。

>>236さん
教官の前に作った植物の成長シミュレーションモデルを改良しているのですが、
元のコードがC++なので足りない頭ながらも勉強中なのです。
240デフォルトの名無しさん:2005/11/19(土) 00:16:53
>>236
最初は誰だって知らなくて勉強始めるもんだけどな。
オマイはこの世に生を受けた時からC++理解してたか?
241デフォルトの名無しさん:2005/11/19(土) 00:21:49
>>232
嘘ではないだろ。
242デフォルトの名無しさん:2005/11/19(土) 00:25:35
>>241
そだよな
配列名はその配列の先頭要素へのポインタとして読みかえられる
FAQなんだがなぁ
243デフォルトの名無しさん:2005/11/19(土) 00:27:45
>>240
何の話?
244デフォルトの名無しさん:2005/11/19(土) 00:34:42
2005で#includeするフォルダ指定どうやんの?
245デフォルトの名無しさん:2005/11/19(土) 00:40:26
その話とC/C++とどういう関係があるのかね?
246デフォルトの名無しさん:2005/11/19(土) 01:00:11
ポインタとアドレスの違いを理解してない奴が居るな
247109:2005/11/19(土) 01:10:19
時間が取れたので作業再開しているのですが、C++の継承がよくわかりません。
Javaみたいにもろにオーバーライドしてしまえるのかと思ったらそうではないようですね・・・
fstreamに_wfopenを使わせたいのですが、basic_filebufを継承(というより寄生)して
template<class _Elem,class _Traits>
class filebufw:public std::basic_filebuf
{
public:
filebufw(){};
virtual ~filebufw(){};

filebufw *open_wide(const char *_filename,std::ios_base::openmode _Mode){
wchar_t _wbuf[600];
FILE *_fp;
MultiByteToWideChar(CP_UTF8,MB_ERR_INVALID_CHARS,_filename,strlen(_filename)+1,_wbuf,sizeof(_wbuf));
if(_MODE && std::ios_base::in){
fp=_wfopen(_wbuf,L"rb");
}else{
fp=_wfopen(_wbuf,L"wb");}
if(fp == NULL){
return 0
}
basic_filebuf::_Init(_fp._Openfl);
return this;
};
};
みたいなの作ってこれとiostreamを継承させたクラスを作り、コンストラクタを適当に作ればいいのでしょうか?
まあ長いファイルパス使われると死にますが、その辺はあとで対処する方向で。
VC .NETのテンプレートパックってるので移植性もへったくれもないですね・・・
248デフォルトの名無しさん:2005/11/19(土) 01:30:42
>>246
ポインタとして使える≠ポインタ
って事が言いたいのか。

初心者スレだってのに。
249デフォルトの名無しさん:2005/11/19(土) 01:38:40
なんか訂正する気がうせるほどのtypoが含まれていますね。
古いほうのやつをコピーしてしまったようです。スルーをおねがいします。
250デフォルトの名無しさん:2005/11/19(土) 01:48:11
>>246
>>248
なにが言いたいのかいまいち分からんが、二人そろって変な勘違いしてる可能性が高そうだ
251デフォルトの名無しさん:2005/11/19(土) 01:56:28
アドレス:メモリ上の番地
ポインタ:型を伴ったアドレス値
ポインタ変数:ポインタを入れる変数

なお、ポインタ変数のことをポインタと呼ぶ場合もある。
例えば、strcpyやmallocはポインタを返すが、ポインタ変数を返すわけではない。
252デフォルトの名無しさん:2005/11/19(土) 02:36:14
http://www.fides.dti.ne.jp/~tokai/vc/vcpipe.html

を、実行してみたのですが、
wsprintf(str,"vpncmd\r\n");
WriteFile(hDupPipeP2CW,str,strlen(str),&dwByte,NULL);
これでは、1つの処理で終わってしまいます。

継続して、処理させるにはどうすればいいのでしょうか?
CreateFileでCONIN$を指定してみましたが、うまくいきませんでした。
253デフォルトの名無しさん:2005/11/19(土) 03:39:48
>>232がアフォなこと言うからいかんのだな。
254デフォルトの名無しさん:2005/11/19(土) 09:07:18
>>247
少しは参考になるかもしれない。
http://www.jah.ne.jp/~naoyuki/Writings/ExtIos.html
255デフォルトの名無しさん:2005/11/19(土) 12:02:47
>>252
その一連の処理を、必要なだけ繰り返せばいいのでは?
256デフォルトの名無しさん:2005/11/19(土) 14:40:34
ちょっとお聞きしたいのですが、
findを使った文字検索で、一文字目に見つかったとき1じゃなくて
0って表示されるのはなぜなんですか?
あと検索文字が半角スペースだとうまく検索できません。
257デフォルトの名無しさん:2005/11/19(土) 14:53:08
>>255
wsprintf(str,"vpncmd\r\n");
WriteFile(hDupPipeP2CW,str,strlen(str),&dwByte,NULL);
wsprintf(str,"2\r\n");
WriteFile(hDupPipeP2CW,str,strlen(str),&dwByte,NULL);

とすると、vpncmdを実行され、終了したのち2が表示されます。
vpncmdを入力した直後のハンドル取得をできれば・・・と思ったのですが
方法が分かりませんでした。
258デフォルトの名無しさん:2005/11/19(土) 16:05:34
>>257
wsprintf(str,"vpncmd\r\n2\r\n");ではだめか?
259デフォルトの名無しさん:2005/11/19(土) 16:11:31
>>256
配列
260デフォルトの名無しさん:2005/11/19(土) 16:36:36
#include <cstdio>#include <cstdlib>#include <conio.h>
#include <windows.h>#include <D3DX9.h>
const float SPAN_X0=-1.0f;const float SPAN_Y0=-1.0f;const float SPAN_Z0=0.0f;
const float SPAN_X1=1.0f;const float SPAN_Y1=1.0f;const float SPAN_Z1=1.0f;
const int SPHERES=1;
float g_fdelta=0.1f,g_fvoldelta=0.0f,g_fspr=0.75f;
D3DXVECTOR3 g_vec3Sphere[SPHERES];
float g_fSphere[SPHERES][3]={{0.0f,0.0f,0.0f}};
float VolumeSphere(float r){return (4.0f/3.0f*D3DX_PI*r*r*r);}
bool Contain(D3DXVECTOR3 vp,float vpr,int n){
 vp-=g_vec3Sphere[n];
 float f=D3DXVec3Length(&vp)-vpr;
 return (f<=g_fspr);
}
261デフォルトの名無しさん:2005/11/19(土) 16:37:25
int main(){
 char ch;
 float vol,fr;
 int i;
 for(i=0;i<SPHERES;i++)
  g_vec3Sphere[i]=D3DXVECTOR3(g_fSphere[i][0],g_fSphere[i][1],g_fSphere[i][2]);
 D3DXVECTOR3 vp;
 printf("vol= %f\n",VolumeSphere(g_fspr));
 do{
  printf("delta=");
  scanf("%f",&g_fdelta);
  g_fvoldelta=g_fdelta*g_fdelta*g_fdelta;
  fr=g_fdelta/2.0f;
  //g_fvoldelta=VolumeSphere(fr);
  vol=0.0f;
  for(vp.z=SPAN_Z0;vp.z<=SPAN_Z1;vp.z+=g_fdelta){
   for(vp.y=SPAN_Y0;vp.y<=SPAN_Y1;vp.y+=g_fdelta){
for(vp.x=SPAN_X0;vp.x<=SPAN_X1;vp.x+=g_fdelta){
      if(Contain(vp,fr,0))vol+=g_fvoldelta;
  }}}
  printf("vol=%f\n",vol*2.0f);printf("Quit:q\n");
 }while((ch=getch())!='q'&&ch!='Q');
 return 0;
}
上手くいきません。間違い教えてください。
262デフォルトの名無しさん:2005/11/19(土) 16:38:51
>>260-261
質問の仕方が間違ってる
263260:2005/11/19(土) 16:40:39
球を積分して体積を求めるプログラムです
264デフォルトの名無しさん:2005/11/19(土) 16:50:29
要所要所で変数内の値を吐き出させたらどこが悪いのか分かるんで無い?
265デフォルトの名無しさん:2005/11/19(土) 16:56:50
そうではなくて何がうまくいかないのか書けってことだろ?
266デフォルトの名無しさん:2005/11/19(土) 16:57:29
>>263
間違いはおまえ自身
267デフォルトの名無しさん:2005/11/19(土) 16:57:57
>>258
これはなるかも!と思いましたが、
http://www.lain.cc/this.JPG
このような画面の処理になり、終了してしまいました。

一連の流れとして処理するには、どうすればいいのでしょうか?
すみませんが、よろしくお願いします。
268260:2005/11/19(土) 16:59:31
ええと、デルタを小さくすると体積に収束するはずなんですが、
どんどん小さくなっていきます。
ブレークポイントで見ても量が多くてよく分かりません。
269デフォルトの名無しさん:2005/11/19(土) 17:02:07
小生、質問がござる。

ちとこちらのヘルプを見て下され。
ms-help://MS.VSExpressCC.v80/MS.NETFramework.v20.en/cpref8/html/T_System_Drawing_Image.htm

このように画像にフィルターを掛けたいと思うのじゃが、サンプルプログラムが非常に遅い。
できれば画像を扱っているメモリに直接アクセスしたいのだが、
いかんせんGDI+での情報が見つからぬときたものじゃ。

如何にすればメモリアクセスが可能になるのか、知識のある方にご教授願う次第に候。
270260:2005/11/19(土) 17:05:22
g_fsprが球の半径
g_vec3Sphereが球の中心座標
です。
271デフォルトの名無しさん:2005/11/19(土) 17:12:36
>>260殿。

if(Contain(vp,fr,0))vol+=g_fvoldelta;
は半径fr中に入っていればvolに微小単位を累積加算する式と見受けたがよろしいかな?

frはfr=g_fdelta/2.0f; であり、デルタの値によって小さくなるので、
これでは正確な値は求められぬと思われる。

frを球の半径にしてみてはいかがでござるか。
272260:2005/11/19(土) 17:18:37
bool Contain(D3DXVECTOR3 vp,float vpr,int n){
 vp-=g_vec3Sphere[n];
 float f=D3DXVec3Length(&vp)-vpr;
 return (f<=g_fspr); //←ここで、現在位置が球の半径内なら真
}
なんですが・・・
273矢崎:2005/11/19(土) 17:18:40
クリックを自動でやってくれるシステムを作れる方探しています。
私は愛知県名古屋市在住です。
報酬は100万円だします。
腕に自信のある方は連絡下さい。
274>>273:2005/11/19(土) 17:20:12
RoketMouseがござろう。もしくは百万円で人を雇うが吉。
275デフォルトの名無しさん:2005/11/19(土) 17:20:25
>>269
ms-helpはローカルのアドレスだから張っても俺らは見れない。
URLから推測するにSystem::Drawing::Imageの話だと思うが,
BitmapクラスのオブジェクトならBitmap::LockBitsメソッドを使えばよい。
そうでない場合は知らない。
276デフォルトの名無しさん:2005/11/19(土) 17:24:16
>>275氏、かたじけない。
くっ、ms-helpはローカルでござった...申し訳ない。さんまの腹を切ってお詫び申す。
小生のプログラムでは、Bitmapクラスを利用して候。
LockBitsでござるか、なるほど、、、参考にさせ頂きまする。
277デフォルトの名無しさん:2005/11/19(土) 17:30:03
うざいからその口調やめろ
278デフォルトの名無しさん:2005/11/19(土) 17:36:33
(´ω`)ノ
279デフォルトの名無しさん:2005/11/19(土) 17:40:33
友人がC/C++で組み込みの開発をしたいとのこと

とりあえずEcpliseならC/C++のプラグイン入れればいいんじゃね?
的なこといっても??って感じでした。
おいらもやったことないから分かりませんが、

・CPUは不明
・RS485を使い他の聞きと通信を行う
としたときに
・開発環境は何が一版良いでしょうか?
・参考となる図書はありますか?

現在進行形で自分でも探しています。

よろしくお願い暇す
280デフォルトの名無しさん:2005/11/19(土) 17:43:33
>>279
なんで、詳しくも無い君が調べなきゃいけないの?
自分で調べさせれ。

組み込みなんてCPUが決まれば環境も大体決まる。
281デフォルトの名無しさん:2005/11/19(土) 17:45:30
>>280
友達は全然しらないんです。
それで少し知っているおいらに聞いたんです。

CPUが決まれば環境も大体決まるとありますが、
なんか参考になるサイトがあったら教えてください。
282デフォルトの名無しさん:2005/11/19(土) 17:46:43
そもそも環境を探す前にCPUを決めれ
283デフォルトの名無しさん:2005/11/19(土) 17:49:15
たいていgccでクロスコムパイルじゃね?
284デフォルトの名無しさん:2005/11/19(土) 17:50:45
>>260
自作プログラムで試したら、こうなりました。

[float型]
delta = 0.500000 , vol= 2.375000
delta = 0.250000 , vol= 3.171875
delta = 0.125000 , vol= 3.779297
delta = 0.062500 , vol= 3.974365
delta = 0.031250 , vol= 4.083832
delta = 0.015625 , vol= 4.138393
delta = 0.007813 , vol= 4.163671
delta = 0.003906 , vol= 1.000000
delta = 0.001953 , vol= 0.125000

[double型]
delta = 0.500000 , vol= 2.375000
delta = 0.250000 , vol= 3.171875
delta = 0.125000 , vol= 3.779297
delta = 0.062500 , vol= 3.974365
delta = 0.031250 , vol= 4.083832
delta = 0.015625 , vol= 4.138393
delta = 0.007813 , vol= 4.163671
delta = 0.003906 , vol= 4.176482
delta = 0.001953 , vol= 4.182632
285sage:2005/11/19(土) 17:53:18
おそらく、微小単位g_fvoldeltaが
入力されたΔの3乗ですのでfloatで扱いきれない小さい数値に
なったものと思われます。

#include <stdio.h>
#include <stdlib.h>

int main(){
double vol,r=1.0,g_fdelta,x,y,z;
// float vol,r=1.0,g_fdelta,x,y,z;
for(g_fdelta=0.5;g_fdelta>=0;g_fdelta/=2){
vol=0.0f;
for(z=-1.0;z<=1.0;z+=g_fdelta){
for(y=-1.0;y<=1.0;y+=g_fdelta){
for(x=-1.0;x<=1.0;x+=g_fdelta){
if(r*r>x*x+y*y+z*z+g_fdelta/2.0)vol+=g_fdelta*g_fdelta*g_fdelta;
}}}
printf("delta = %9.6f , vol=%9.6f\n",g_fdelta , vol);
};
return 0;
}
286260:2005/11/19(土) 17:54:40
>>284
ありり。
floatじゃ丸められちゃうのかな。
求める球の半径はいくつでやりましたでしょうか?
287260:2005/11/19(土) 17:57:44
ごめん。リロードミスです。
288デフォルトの名無しさん:2005/11/19(土) 17:58:27
>>281
知らないのに組み込みの開発?
頭狂ってんじゃねーのか
289デフォルトの名無しさん:2005/11/19(土) 18:00:20
>>288うっさいボケ
290デフォルトの名無しさん:2005/11/19(土) 18:01:28
絶対狂ってますよ
291デフォルトの名無しさん:2005/11/19(土) 18:02:00
>>288
C/C++をやる前は、知らないのにC/C++の開発?
頭狂っていたんだぁpgr
292デフォルトの名無しさん:2005/11/19(土) 18:04:13
知らないなら、多少なりでも自分で調べるだろ、真っ先に○投げはしない。
293デフォルトの名無しさん:2005/11/19(土) 18:08:00
わからなかったから聞いてるんだろ
これ以降、下らない煽りは止めて下さい
294デフォルトの名無しさん:2005/11/19(土) 18:10:39
プギャーm9(^д^)
295279:2005/11/19(土) 18:11:48
荒れてきてしまいましたな

一応自分でも軽く調べたけど分からなかったんです。
引き続きよろしくお願いします。
296デフォルトの名無しさん:2005/11/19(土) 18:14:32
本人かどうかわからないが、
CPUがわからずに、どうやって環境探す気だよ。
ネタにしか見えないぞ。
297デフォルトの名無しさん:2005/11/19(土) 18:15:18
組込って話だが、PICでもかまわないか?結構面白いのがあったので紹介。

http://www.ipishop.com/index.html

部品がモジュール単位で増設可能なシステム。
おそらくここで購入すればサポートも受けれるかも。こんなんでどう?
298デフォルトの名無しさん:2005/11/19(土) 18:16:10
ネタじゃありません。
Z80やH8でそんなに環境が違うものなんですか?
どの辺りが異なるのか分かりません。
299デフォルトの名無しさん:2005/11/19(土) 18:18:32
>>298
pcやプレステや家電が、全部同じ環境で開発できると思ってるのか?
300デフォルトの名無しさん:2005/11/19(土) 18:19:00
ネタ決定
301デフォルトの名無しさん:2005/11/19(土) 18:19:30
>>297
有難うございます。よさげな感じがしますね。
とりあえず、送ってみます。

いまさらながら、CPU毎にコンパイラが存在しますよね。
そこら辺を環境と皆さん呼んでいたんでしょうか。環境と一言で言われても大きすぎて良く分かりませんでした。
302279:2005/11/19(土) 18:20:30
>>299
はい。思っていました。だって知らないし。
303デフォルトの名無しさん:2005/11/19(土) 18:21:40
>>302
CPUや開発環境を紹介してるサイトを一個も見てないって事だろ?
それで何を調べたと?
304デフォルトの名無しさん:2005/11/19(土) 18:22:31
>>303
そこまで目が行き届きませんでした。
305デフォルトの名無しさん:2005/11/19(土) 18:26:05
>>いまさらながら、CPU毎にコンパイラが存在しますよね。
CPU毎だったらセリロンとペンチウムで別のコンパイラが必要になるぞ。
306デフォルトの名無しさん:2005/11/19(土) 18:27:23
アーキテクチャごとだよな。
中間言語に落としてアーキテクチャごとに最適化するコンパイラとかもあるけど。
307297:2005/11/19(土) 18:32:23
>>306
あ、そうでした。有難うございます。
308デフォルトの名無しさん:2005/11/19(土) 18:51:03
もういいよ
お前に教えてたらいくらスレがあっても足らんよ
309デフォルトの名無しさん:2005/11/19(土) 18:59:49
ということで、次の人どうぞ。
310デフォルトの名無しさん:2005/11/19(土) 19:07:47
m9(^Д^)プギャー
311デフォルトの名無しさん:2005/11/19(土) 19:37:37
なんでこのスレはこんなに厨が多いんだ?
312デフォルトの名無しさん:2005/11/19(土) 20:31:30
セマフォをつかって、ある処理に関してロック、アンロックの処理が
したい場合、ソースは以下のようなかんじ問題ないですか?
※以下のプログラムを2つ同時に動かした場合、
セマフォの開放は1つ目のプロセスによって行われているので、
2つ目のプロセスはIPC_RMIDの際に、エラーが出てしまいますよね。
これって、基本的にはどうするといいんですかね?

313デフォルトの名無しさん:2005/11/19(土) 20:32:18
C言語と何の関係が?
314デフォルトの名無しさん:2005/11/19(土) 20:32:38
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> 
#include <sys/sem.h>
union semun { int val;
struct semid_ds *buf; unsigned short int *array;
struct seminfo *__buf; };
int lock(int argc, char *argv[]) {
union semun semaphore_union;
struct sembuf semaphore_buffer;
int semaphore_id;
semaphore_id = semget((key_t)1000, 1, 0666 | IPC_CREAT);
semaphore_union.val=1; //sem init
if ( semctl(semaphore_id, 0, SETVAL, semaphore_union) != 0 ) {
exit(1); } //lock
semaphore_buffer.sem_num = 0;
semaphore_buffer.sem_op = -1;
semaphore_buffer.sem_flg = SEM_UNDO;
if ( semop(semaphore_id, &semaphore_buffer, 1) == -1 ) {
exit(1);  }
sleep(30) // 何かの処理の変わり  //unlock
semaphore_buffer.sem_num = 0;
semaphore_buffer.sem_op = -1;
semaphore_buffer.sem_flg = SEM_UNDO;
if ( semop(semaphore_id, &semaphore_buffer, 1) == -1 ) {
exit(1);
}
//sem end
if ( semctl(semaphore_id, 0, IPC_RMID, semaphore_union) != 0 ) {
exit(1);
}
return(0);
}
315デフォルトの名無しさん:2005/11/19(土) 20:34:36
//sem end
if ( semctl(semaphore_id, 0, IPC_RMID, semaphore_union) != 0 ) {
exit(1);
}
 この際に、一つめのプロセスが既に削除しているので、
 2つ目のプロセスでは、エラーが帰ってきてしまいます。
 基本的にセマフォの扱いって、どう記述するものなんですか。
316デフォルトの名無しさん:2005/11/19(土) 20:45:23
正しいやり方かはわからないが。
@プロセス1の処理が終わったら、セマフォに「プロセス1終わったよ」書き込む。
A「プロセス1終わったよ」になるまで待機してから、
 「プロセス2も終わったよ」を書き込んでから、プロセス2を削除。
B「プロセス2も終わったよ」を確認してから、プロセス1を削除
317315:2005/11/19(土) 22:00:29
>>316
 それぞれのプロセスをIPC_RMIDさせる直前までwait させろってことですよね。
  そのケースは、事前に立ち上がるプロセス数(たとえば、自分で
  fork して作成したプロセス)が分かっている場合、有効ですよね。
 
 何個のプロセスがあがるか分からないときの手段としては、
 IPC_RMID させる時は、手動で打つがいいのかな。
 
318デフォルトの名無しさん:2005/11/19(土) 23:09:09
よく読んでないけどマルチスレッドスレで聞くべきじゃないのか?
319デフォルトの名無しさん:2005/11/19(土) 23:27:43

int x[5]={1,2,3,4,5};
int y[5];
for文を使って配列xの並びを逆順にしたものを配列yにコピーするプログラムを書け。


これなんですけど、自分で考えても思い浮かばなかったので
質問させていただいたのですが、どうやってやればいいのでしょうか?
320デフォルトの名無しさん:2005/11/19(土) 23:29:15
>>319
スレ違い
321デフォルトの名無しさん:2005/11/19(土) 23:30:57
自分で考えても思い浮かばなかった≠何も考えてない

日本語は正しく使いましょう
322デフォルトの名無しさん:2005/11/20(日) 00:24:24
おまえがなw
323デフォルトの名無しさん:2005/11/20(日) 01:30:43
最初のうちは配列の長さの取得とか
添字の活用とか思いつかないもんだよ
324デフォルトの名無しさん:2005/11/20(日) 01:49:24
コンソールから数値の入力するときってscanfは使わないのが普通というのは聞いたのですが、
ではgetsで文字列で取って、それを
atoi
とか
atof
で数値に変換するのが一般的なんですか?
325デフォルトの名無しさん:2005/11/20(日) 01:55:55
fgetsで取得してsscanfで変換
326デフォルトの名無しさん:2005/11/20(日) 01:58:18
>>324
↓ぐらい全部読んでおけ

ttp://www.kouno.jp/home/c_faq/
327デフォルトの名無しさん:2005/11/20(日) 01:59:49
getsはやばいです、バッファ・オーバーランっていう有名なバグ持ってます、
なので代わりにgetlineとかfgetsとか使います。
328デフォルトの名無しさん:2005/11/20(日) 02:01:56
getline使うぐらいならscanf_s使え
329324:2005/11/20(日) 02:05:29
>>325-328
初歩的な質問にご親切にありがとうございます!
>>326
をよく読んでみます。今ローカルに必要そうなページを保存してます。

すいません、あとひとつ、fgetsを使う場合というのは
事前にファイルに必要な値を書いておいてファイルから読み込むということで
いいですか?
330デフォルトの名無しさん:2005/11/20(日) 02:09:53
stdin
331デフォルトの名無しさん:2005/11/20(日) 02:10:57
>>329は最後に気付くだろう。そのページの一番下に「まとめてダウンロード」という言葉があることを・・・。
332324:2005/11/20(日) 02:18:33
>>330
stdinを引数に渡せば標準入力からインプットできるんですね。
知りませんでした。ありがとうございました。
>>331
いわれて気がついて笑ってしまいました。再度素直にそこから落としました。。orz
333デフォルトの名無しさん:2005/11/20(日) 04:57:03
テキスト入力で
istringstream ist(str);
int i = 0;
ist >> i;
if(i){(略)}
なんてやって先頭が数値かどうか判断、条件分岐ってやっていいですか。
なぜかデバッガで一行ずつ動かしてる時だけちゃんと動くプログラムになってしまって。
一応0の入力が無いという前提なんですけど。
atoi()使ったらちゃんと動くようになりました。
334デフォルトの名無しさん:2005/11/20(日) 09:48:07
2005
ってwindows.hついてこないの?
335デフォルトの名無しさん:2005/11/20(日) 09:49:36
>>334
付いてくるよ
336デフォルトの名無しさん:2005/11/20(日) 09:56:50
>>327
>getsはやばいです、バッファ・オーバーランっていう有名なバグ持ってます
いいえ。
バグではありません。
337windows.h:2005/11/20(日) 10:16:53
Program File内を
検索しても引っかからない
338デフォルトの名無しさん:2005/11/20(日) 10:22:53
339デフォルトの名無しさん:2005/11/20(日) 10:23:59
>>337
2005のどのEditionなのかと。
Expressなら自分でPSDK入れろヴォケ。
340デフォルトの名無しさん:2005/11/20(日) 10:32:22
ていうか、2005って何だよカス。
341デフォルトの名無しさん:2005/11/20(日) 10:43:42
マジレスすると整数
342デフォルトの名無しさん:2005/11/20(日) 10:47:29
整数にWindows.hがついてくるかって?
付いてくる訳ねーだおヴォケ!
343デフォルトの名無しさん:2005/11/20(日) 10:50:30
つ【カルシウム+適度な睡眠】
344デフォルトの名無しさん:2005/11/20(日) 10:53:50
>>343
牛乳よこしる!
345デフォルトの名無しさん:2005/11/20(日) 12:42:42
どうせまたパスの設定が云々ってなるんだから、早く日本語版出せやヴォケ!
346デフォルトの名無しさん:2005/11/20(日) 12:47:49
/ 冫─'  ~  ̄´^-                   
/  /ヽ丿彡彡彡彡彡ヽヽ
|  丿 Mr.Gates   ミ  
| 彡 ____  ____  ミ/
ゝ_//|-=^=-|⌒|-=^=-|ヽゞ
|tゝ  \__/_  \__/ | |    __________
ヽノ    /\_/\   |ノ  /
 ゝ   /ヽ───‐ヽ /  /   うっせーよ、貧乏人ども
  /|ヽ   ヽ──'   / <   
 / |  \    ̄  /   \
/ ヽ    ‐-            ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
347デフォルトの名無しさん:2005/11/20(日) 14:28:18
../../luna.lib

↑の
../../の意味何?
..フォルダってこと?
348デフォルトの名無しさん:2005/11/20(日) 14:34:27
>>347
スレ違い甚だしい
回線切って首吊って氏ね
349デフォルトの名無しさん:2005/11/20(日) 15:22:18
>>348
スレ違いじゃなくね?

>>347
それは現在のフォルダの上ってのを表す。
だから
../../luna.lib
だと
現在いるフォルダ(または基準となるフォルダ)の上の上のフォルダのluna.libを呼びまっせ。
って感じ。つまり、
c:/chinko/luna.lib
にluna.libがあったとして、基準となるフォルダがc:/chinko/unko/mankoだったら
そこからluna.libを使おうとしたらそうやってかかなければならない。
もちろん、c:/chinko/luna.libと書いても同じだがその場合はchinkoフォルダを丸ごと別の場所に
移動したらプログラムを書き変えなければならない。c:/chinchin/chinkoに移動したりしたときだ。
こうなると、ああ、相対パスで書いときゃよかったな。ってなる。

インクルードファイルやらリンク時のライブラリファイルならこの形の方が扱いは楽。
しかし、プログラム実行中だと基準のフォルダがどこになってるのかわからない
(原因のほとんどがPGが糞だからだが)からフルパスに直して使う場合が多い。

キーワード:相対パス、フルパス
で調べて勉強しる!
350デフォルトの名無しさん:2005/11/20(日) 15:23:28
まちがえ

キーワード:相対パス、絶対パス

だ。
なんか前の職場の人間が相対パスは相対パスって呼ぶくせに
絶対パスはフルパスって呼ぶから俺もおかしなってきたw
351デフォルトの名無しさん:2005/11/20(日) 15:26:22
fully qualified path だから別に間違ってないと思うが。
352デフォルトの名無しさん:2005/11/20(日) 15:33:45
まちがい:まちがえ
353デフォルトの名無しさん:2005/11/20(日) 15:58:38
thx
いい勉強になった
354デフォルトの名無しさん:2005/11/20(日) 16:18:51
>>351
統一したいじゃんw
355デフォルトの名無しさん:2005/11/20(日) 17:39:52
>>349
言語仕様とファイルシステムには、なんの因果関係もない。
よってスレ違い。
356デフォルトの名無しさん:2005/11/20(日) 17:46:49
そりゃ因果関係はないだろうが…
すれ違いだというのは同意。
357デフォルトの名無しさん:2005/11/20(日) 18:16:24
>>356
>>355に対して全面同意じゃねぇか・・・w
358デフォルトの名無しさん:2005/11/20(日) 20:09:49
自分の親ウィンドウのクライアント座標で指定したウィンドウ(コントロール)の矩形を取得するのに、
MapWindowPointsを使うのが一番効率的なんですか?
359デフォルトの名無しさん:2005/11/20(日) 20:13:30
どこの環境の話だよ
360デフォルトの名無しさん:2005/11/20(日) 20:14:45
GetWindowRect
361デフォルトの名無しさん:2005/11/20(日) 21:29:21
ライブラリが無いブラリ
362デフォルトの名無しさん:2005/11/20(日) 23:39:57
>>361
ちょっとうまかったとおもう。
363デフォルトの名無しさん:2005/11/21(月) 00:50:43
クラスとともに暮らす。
364デフォルトの名無しさん:2005/11/21(月) 01:29:25
>>359
スマンデス。win32。

>>360
GetWindowRectって、
スクリーン座標を取得するんですよね?
そこからその親ウィンドウのクライアント座標に変換するにはどのような方法が一番良さげですか?
365デフォルトの名無しさん:2005/11/21(月) 05:23:34
ScreenToClient
366デフォルトの名無しさん:2005/11/21(月) 06:10:50
/*素数を判定して約数を全て表示するプログラム*/
#include <stdio.h>
int main(void)
{
int num,i;

printf("数字を入力してください:");
scanf("%d", &num);

for(i=2;i<(num/2)+1;i=i+1)
if((num%i)==0) printf("%d ", i);

return 0;
}

独習Cでの問題です。
これでは入力された数字が素数であった場合は、そのまま終了してしまいます。
しかし、素数を入力したら、「素数です」と表示したいのですがどうしたら良いでしょうか?
自分で考えて作ってもどうも上手く行きません。よろしくお願いします。

CPad for Borland Ver.2.31を使用しています。
367デフォルトの名無しさん:2005/11/21(月) 06:35:08
int yakusu_count=0;
for(){
if(){printf("%d",i);yakusu_count++}
}
if(yakusu_count==0){printf("素敵です");}
else{printf("%d個の約数がござる。にんにん",yakusu_count);}
368デフォルトの名無しさん:2005/11/21(月) 06:44:20
にんにん
↑松井にしか見えん
369デフォルトの名無しさん:2005/11/21(月) 06:52:07
>>367
すいません、for()やらif()ってのは自分の書いたものを突っ込むんでしょうか?
人様に質問するのも初めてで、どういう風に教えてくれているのか理解できません。

申し訳ないんですけど、>>366をコピペして足したものを書いていただけないでしょうか?
後々のためにも、>>366をコピペして足してもらった物と>>367の文を見比べて
>>367のように教えてもらった時にどうすればいいかを理解したいので…。

簡単な質問な上に、めんどうな事を頼んで申し訳ないですが、なにとぞよろしくお願いします。
370デフォルトの名無しさん:2005/11/21(月) 06:54:59
自分で考える気がまったくない人はお帰りください。
371デフォルトの名無しさん:2005/11/21(月) 06:59:33
帰らない
372デフォルトの名無しさん:2005/11/21(月) 07:00:39
>>369
>>366のコードが自分でちゃんと理解できていて、その上で>>367のコードをよく読めば
どうしたらいいかわかるはずだよ。
わからないならまだ勉強が不足。人に頼る前にしっかりその本を読んで勉強しよう。
373367:2005/11/21(月) 07:02:32
>>371は私ではありません。

>>370さんの言ってる事もその通りだと思います。
本にも「理解できない所があっても最終的にはわかるだろうから飛ばせ」的な事もかいてる
ので、飛ばしても良いんですけどなんか気持ち悪くて…。
374367:2005/11/21(月) 07:07:02
>>372
そうですか…。
巻末にある回答を見ても>>366の通りで正解になっているので
ここは飛ばす事にします。

レスくれたみなさんありがとうございました。
それとスレ汚し失礼しました。
もうすこし修行してからお世話になろうとおもいます。
375デフォルトの名無しさん:2005/11/21(月) 07:17:09
なんだ、結局>>367を理解する努力はしないわけか ┐(´д`)┌
376デフォルトの名無しさん:2005/11/21(月) 07:20:46
近年稀に見る能力の無さだな
377デフォルトの名無しさん:2005/11/21(月) 07:24:30
>>376
そうでもない、最近どのスレもこんな奴ばかり。
378デフォルトの名無しさん:2005/11/21(月) 07:27:54
質問も糞も1回入門書のプログラムを通して打ってみようと思わないのか?
こいつらは。
アホ、あまりにもアホ。
見込みないからプログラム組むの辞めちゃえよw
379デフォルトの名無しさん:2005/11/21(月) 07:29:25
>>375
いや、for()やif()、"++"なんかも学んで無くて…
もちろん調べればいいんだろうけど、本の通りに順を追って学びたいなと。

もともと独習Cを持っていない人なんかだと、自分がどれくらいの事を理解しているか
わからないだろうから、知りたい答えは得られないかもと思いながらの質問でしたので。
私のような近年稀に見る能力の無い人間は順を追って学ぼうと思います。

上のは開き直りでは無くて素直に思っています。
もしかしてこういう独習Cを素直にクリアしていくような勉強法は問題ありますか?
もちろん勉強方法は人それぞれなので一概には言えないだろうけど
実体験を元にしたもので良いので参考程度に聞かせてください。
380デフォルトの名無しさん:2005/11/21(月) 07:37:28
>>379
>いや、for()やif()、"++"なんかも学んで無くて…

マジレス

話にならない。
だったらこれを先に学ぶのが先だろ。
その本は持ってないが、その本が上記のことを理解しているのが前提なら、
上記のことから解説してる本なりサイトをさがす。

わからない所は、わかるまで調べる。
何時間、何日でも。
ほとんどの事は解決する上に、探しながら色々読んでるうちに+αの事まで身に付く。

安易に人に頼ると、その事しか解決しないから上達しない。
次もまた頼ることになる。
381デフォルトの名無しさん:2005/11/21(月) 07:39:26
>>379
たぶん、あなたには「独習C」は難しすぎる
他のホントに入門者を対象にした本から始めた方が良さそうだ
382デフォルトの名無しさん:2005/11/21(月) 07:49:25
>>380
そうですか。
始めて1日目なんですけど、始める前にどこだか忘れましたが
「理系の考え方」みたいな記事があって「分からない問題はとりあえず置いておく」
みたいな事が書いてあったんですよ。
なので短絡的に「わかんない所は飛ばしておくかー。」と考えていたんですけど
プログラムを学ぶ上では間違えてるみたいですね。
もう少し自分で努力する事にします。ありがとうございました。

>>381
本の帯に「Cを始めて学ぶのにこの本に出合えたのはラッキーだ」みたいな事が
書いてあったので信じて買いました。書籍スレでの評価も悪く無かったので。

もしかしたら自分には難しいかも知れませんが、今の段階では答えが皆目見当も付かないような
自体も無く、出されている問題には苦労しないので、もう少し頑張ってみようと思います。
アドバイスありがとうございました。
383デフォルトの名無しさん:2005/11/21(月) 07:54:36
>>382
独習はその名の通り、分からないことは自分でとことん調べて理解できる奴だけを対象にしてる
お前には向いてない

俺は独習C++しか持ってないが、あれの問題は全てそれまでの章でやったor本を読む前提条件として
知っていることしか使われてなかった。
おそらく独習Cも同じだろうから制御構造使う問題なのに制御構造分からんとか話にならん
384380:2005/11/21(月) 08:01:04
>>382
だから、その本に読み飛ばしてもいいと書いてあって、
その本に合わせて学びたいなら読み飛ばせばいい。
読み進めて理解できるかも知れないし、できないかもしれない。
それは俺にはわからない。

でも、君は読み飛ばしたく無いんだろ?だったら別の何かで調べる必要があるでしょって言ってるの。

1日目って・・一日で全く何も知らない人が、>>366を理解できるようになると思ってるなら、
考え直したほうがいいかも。
385デフォルトの名無しさん:2005/11/21(月) 08:06:15
はじめまして。C++を独学しているものですが質問です。
クラステンプレートを勉強しているのですが、リンクができなくて困っております。

//配列のテンプレートクラス(tarray.h)
template <class Type>
class TAry {
private: Type *_ptr;
public: Type& operator[]( int );
};
// tarray.cpp
template <class Type>
Type& TAry<Type>::operator[]( int i ) { return _ptr[i]; }
// main.cpp
int main( void )
{
TAry<int> int_array( 10 ); // 10個のint型の要素をもつ配列
for ( int i = 0; i < 10; ++i ) { int_array[i] = i; }
return 0;
}
※コンストラクタなどは省略しました。
これらを別々にコンパイルすると、きちんとオブジェクトファイルができるのですが、
いざリンクとなるとoperator[]がみつからないとコンパイラに怒られてしまいます。
しかし、演算子の定義などをヘッダファイル内でおこなうと、きちんとリンクできます。
「プログラミング講義C++」で勉強しているのですが、
テンプレートの使い方が間違っているのでしょうか?
何かわかるかた、よろしくおねがいします。
環境はg++3.4.4, VC++.net の両方でためしましたが、やはり同じエラーでした。
386デフォルトの名無しさん:2005/11/21(月) 08:13:32
>>382
なんと言われようと理解できるまでやります。高かったし。

>>384
えっと>>366の問題は「素数を入力して約数を表示するプログラムを作れ」って問題なんです。
だから問題自体は出来たんですけど、「これじゃ素数渡された時わかりにくいじゃん」って思って
聞いてみたんです。
だからもう少し進めばやり方が理解できるような問題が出るんじゃないかと思ってます。

質問の意図は、「自分が学んだ範囲内で出来る事を出来なかったらやり直そう」って事なんですよ。
つまり、自分が学んで無いものを必要とするんであれば別に問題ないんです。
途中でも書いたように、独習Cを読んでいる人に聞いたほうが良かったですね。
質問するスレを間違えたと認識しています。
387デフォルトの名無しさん:2005/11/21(月) 08:16:43
>>385
大半のコンパイラはテンプレートクラスの実装をヘッダに書かないとビルドできません。
(TAry<int>とTAry<short>はオブジェクトファイル上では別々の実体を持つ)
388デフォルトの名無しさん:2005/11/21(月) 08:16:57
リアルじゃ決して見れない低脳に巡りあえるのが2chの楽しみの一つだな
また来るがよろし
389デフォルトの名無しさん:2005/11/21(月) 08:20:06
駄目な奴は何をやっても駄目
390デフォルトの名無しさん:2005/11/21(月) 08:39:04
理解はしなくていいから納得しろ。
391デフォルトの名無しさん:2005/11/21(月) 08:41:55
>>390
心にぐっと来るな
392デフォルトの名無しさん:2005/11/21(月) 08:49:41
>>387
早速のレスありがとうございます。
tarray.cppだけをコンパイルした時点では、
クラスの実体ができていないということですね。
その後しらべたところ、宣言と実装を分離したい場合は、
exportキーワードを使用すればいいみたいですが、
これ自体を実装した処理系はないみたいですねw
で、別の策としてはtarray.cpp内で
template class TAry<int>;
template class TAry<short>;
といった風に実体を作ってしまえばおけみたいですね。
でも、これだとテンプレートのありがたみが減ってしまう気が・・・。

やはりヘッダ内で実装してしまうのが、いいんですかね?
なんか、ヘッダ内で実装するのに違和感を覚えてしまいまつ。うーん。
393デフォルトの名無しさん:2005/11/21(月) 09:05:47
>>392
その違和感は正常な感覚だよ。
でもしょうがない。
コンパイラ(またはコンパイラ実装者)の気持ちになってあげると納得いくんだけどね。
394デフォルトの名無しさん:2005/11/21(月) 10:16:57
>>393
レスどもです。
コンパイラの気持ちになってw考えてみたところ以前よりはすっきりしました。
別個にコンパイルした場合は、クラスもメンバ関数もインスタンス化されてないから、
できあがったオブジェクトファイルをみても、該当する関数がなく、
コンパイラに怒られたわけですね。
それを回避するために明示的に.cpp内でインスタンス化すれば、
クラスやメンバ関数の実体ができる。そして、それらがコンパイルされ、
できあがったオブジェクトファイルを
参照すれば該当する関数があるわけで、おっけーなわけですな。

または、ヘッダファイル内で実装されていれば、それをインクルードすることで
クラスやメンバ関数をインスタンス化することができると。だから、呼び出すことも
できると。

聞く前よりもかなりすっきりしました。
ありがとうございました!
(間違えてたら指摘してもらえるとうれぴいです)
395デフォルトの名無しさん:2005/11/21(月) 10:23:00
exportをサポートしたコンパイラが実際に開発されたときは禿もびっくりしたそうな
396デフォルトの名無しさん:2005/11/21(月) 23:35:25
>>386
#include <stdio.h>
int main(void)
{
int num,i,a,yakusuu_count=0;

printf("数字を入力してください:");
scanf("%d", &num);

for(i=2;i<(num/2)+1;i=i+1)
if((num%i)==0){ printf("%d ", i);
yakusuu_count=yakusuu_count+1; /*yakusuu_count++でも同じ*/
}
if(yakusuu_count==0)
printf("素数です。");

return 0;
}
独学で始めて3日だが>>367を見て考えたらこんな感じになった。
要するに約数をカウントする変数を作ればいいって事を言ってんじゃない?
一日でそこまでできたなら、もう一日あればここまでわかると思うよ。
397デフォルトの名無しさん:2005/11/21(月) 23:50:56
>>365
ありがとう。
まんまな名前でつねw

>>382
確か内容が高度だという話を聞いたような。
同じ初心者という立場から言わせてもらうと、
はじめからやるならば、理解するかどうかよりも、さほど高度ではない本やらサイトやらを用いて、
取りあえず順々はじめからコードを打っていく(コピーするのではない)のが有効だと思う。
やさしいC とか、猫でもわかるC言語プログラミング あたりが良いのではないかな(題名的に"わかりやすい"事をウリにしているもの)。
ちなみに私は猫でも分かる〜を使っていますが、結構わかりやすいですよ。

これらの本は良く読む必要があって、流し読みには向いていないハズ。
"理解する"よりも"感じる"方が近いかもしれない(アレじゃないけど)
とりあえず、いったん"関数"の概念が解説されているところまで読んでみ。
そこまでたどり着けないのならば、使用している本があなたに向いていないのだと思う(なんにしろ相性はある)
基本中の基本をじっくり解説するタイプのものに乗り換えてみては。
その後、今あなたの持っている本をもう一度読めば、面白いぐらいに理解できると思う。
そしてその発展を読み進めることで消して無駄にはならない。

ttp://www.amazon.co.jp/exec/obidos/search-handle-form/250-0280339-8469069
アマゾン、C言語関連の本の売れている順番。
もちろん入門書以外も混じっているから要注意。
398397:2005/11/22(火) 00:19:10
>>366
ちなみにamazonのレビューですが、

>初心者にはお勧めできない。だけど、入門書で一通り学んだものの自信が無いという人が必要に応じて読み返すには非常によいと思う。 

>レベルは、まったくCを勉強したことがない人にはきついかもしれません。実際僕も「やさしいC」というものをやってこれをやってちょうどよかったと思ってます。

>まず最初に、この本を勉強する前に簡単なC言語の入門書みたいなやつをやっておくことをオススメします。

などなど、入門書には使えないことがしっかりかかれているではないですか(笑)
入門書の次に読む本、ということでしょうね。 いずれ必要になるものですよ。
やはり入門書を買っておいた方がよいのでは。
399デフォルトの名無しさん:2005/11/22(火) 01:08:36
つ[おまいら!今日からC言語を学んでいくぞー!パート2
http://pc8.2ch.net/test/read.cgi/tech/1128637438/]
400デフォルトの名無しさん:2005/11/22(火) 14:32:34
C++のことについて質問なんですが

Personというクラスを生成する時に関数内で

Person Eric;
とした場合インスタンスはスタックに作られて

Person* Eric;
Eric = new Person;
とした場合インスタンスはヒープに作られるといった考えでいいんでしょうか?
401デフォルトの名無しさん:2005/11/22(火) 14:35:25
>>400
いい。
一応、newで作られるインスタンスが割り当てられる場所は
「フリーストア」と呼ぶことになってるらしいが。
402デフォルトの名無しさん:2005/11/22(火) 15:37:08
>>401
回答ありがとうございました
403デフォルトの名無しさん:2005/11/22(火) 16:17:02
sleep(0)ってUNIX上のプログラムでも効果ありますか?
404デフォルトの名無しさん:2005/11/22(火) 23:26:25
試してみればよかと
405デフォルトの名無しさん:2005/11/22(火) 23:31:17
マニュアル読めよ。
406デフォルトの名無しさん:2005/11/23(水) 00:20:33
//[2.h]////////////////////////////////////////////////////////
//(重複読み込み防止は省略)
class hoge{
std::string name;
public:
void setName(char *);
std::string& getName(void);
};
//[2.cpp]////////////////////////////////////////////////////////
#include "2.h"
void hoge::setName(char *str){ this->name=str; } // ←inline化不可…?
std::string& hoge::getName(void){ return this->name; } // ←inline化不可…?
//[1.cpp]////////////////////////////////////////////////////////
#include <iostream>
#include "2.h"

int main(void)
{
hoge hoge;
hoge.setName("林晴比古");
std::cout << "私は" << hoge.getName() << "です。" << std::endl; return 0;
}
////////////////////////////////////////////////////////////////
例えば上のようなプログラムを作ってビルドした場合、
hoge::setName()やhoge::getName()をinline指定すると、VC7では以下のエラーがでます。

1.obj : error LNK2019: 未解決の外部シンボル "public: class std::basic_string<cha
r,struct std::char_traits<char>,class std::allocator<char> > & __thiscall hoge::
getName(void)" (?getName@hoge@@QAEAAV?$basic_string@DU?$char_traits@D@std@@V?$al
locator@D@2@@std@@XZ) が関数 _main で参照されました。

なぜinline化できないんでしょうか…?
407デフォルトの名無しさん:2005/11/23(水) 00:25:48
inline化は、コンパイル単位で完結するため、1.cppから2.cppの関数が見つからない。
2.cppではなく、2.hに実装を書けばいい。
408デフォルトの名無しさん:2005/11/23(水) 01:44:04
プログラミング言語C++(ソフトバンクパブリッシング)を
見て打ち込んでどうしても分からない点があります。

P317と318のlist13-1と13-2(カウンタクラスのヘッダと利用部。
実行すると1から5までカウントアップしたあと
3までカウントダウンするプログラム)を打ち込んで
一字一句セミコロン等の間違いもコンパイルエラーも無いのですが、
実行すると0の無限ループで本の通りにカウントアップ・ダウンになりません。

本の内容を知っている方にお願いいたします。
409デフォルトの名無しさん:2005/11/23(水) 02:43:16
>>407
速レスありがとうございました。解決しました。
ただ、実装をヘッダに書くのに抵抗あるんですが、これは仕方ないですよね…。
410デフォルトの名無しさん:2005/11/23(水) 02:50:11
>>409 >393
411デフォルトの名無しさん:2005/11/23(水) 04:34:18
>410
それとは違うんじゃない?
余計なinlineを書かなければ通るわけだし。
inline化は完全にコンパイル時の問題なんだから、目の届くところに書くのは当然。
412デフォルトの名無しさん:2005/11/23(水) 05:47:53
ソートするプログラム課題を作成中なのですが、
WindowsのAPIは使うな、と言われてます。どういう意味でしょうか。
413デフォルトの名無しさん:2005/11/23(水) 06:27:33
>>412
意味はそのままだろ。
理由は課題を出した奴しかわからない。
414デフォルトの名無しさん:2005/11/23(水) 06:28:04
>>412
どういう意味も何も自分でソートする関数を作れってことだろ。
415デフォルトの名無しさん:2005/11/23(水) 07:21:41
今度卒論のなかでFFTによる1/fノイズのプログラムが必要になったんですが、
先生に「まずはノイズを表示することからやってみろ」といわれました。
いったいどうやって表示すればよいのか・・・わからないんです。

なにかWEBでいい例とか良い本とかあったりしますかね?

使用しているのはVisual C++ .NET 2003です
416デフォルトの名無しさん:2005/11/23(水) 07:34:52
>>415
本買え。
417デフォルトの名無しさん:2005/11/23(水) 07:36:33
>>415
今さらそのレベルの質問かよ。それで卒論書けんのかよ。
418415:2005/11/23(水) 07:54:56
即レスはありがたいが・・・

そのレベルじゃ書けないから焦ってるんだって。
まあ、また本屋いくしかないか。
この場合は信号処理の方の本ですかね?
419デフォルトの名無しさん:2005/11/23(水) 07:56:08
>>418
おまいの分からない事が解説してある本
420デフォルトの名無しさん:2005/11/23(水) 07:59:48
>>418
正直な話、教授に参考書を聞きに行ったほうがいいぞ。
教授が嫌なら修士とか博士の連中に聞きにいけ。
下手な本を掴むとただの時間の無駄になるからな。
421415:2005/11/23(水) 08:15:36
分かったッス。
なんとかやってみますわ〜
422デフォルトの名無しさん:2005/11/23(水) 08:53:52
>>406,407
2.hの宣言部と2.cppの実装部、両方にinline書いちまえよ
423デフォルトの名無しさん:2005/11/23(水) 08:58:24
>>422
それじゃinline化されないだろ。
424デフォルトの名無しさん:2005/11/23(水) 09:03:00
バレた
425デフォルトの名無しさん:2005/11/23(水) 09:11:55
>>412
#include <Windows.h>するなとほぼ同義だと思えばよい。
426デフォな梨:2005/11/23(水) 10:36:28
つかCってなんの役に立つの・・・
独習C読んで基本的なことは理解できるけど、
なんに使うのかイマイチ。
427デフォルトの名無しさん:2005/11/23(水) 10:40:11
>>426
なんで独習Cなんて読もうと思ったの?
428デフォルトの名無しさん:2005/11/23(水) 11:24:50
大多数のGameや周辺機器ドライバや、あとxyzzyも Cで書かれていますが。
429デフォルトの名無しさん:2005/11/23(水) 11:27:50
>>426はプログラミング言語を学んでも自分には使い道がないことに気が付いたと言いたいんだよ
430デフォルトの名無しさん:2005/11/23(水) 12:05:50
習う方向が逆だと大抵が駄目になっちまうんだよな。
だいたいは、たまたまサンプルソースがC言語でかかれていてそれをみるために
C言語覚えるとかそういう流れなんだが、
学校の教科にC言語があるからC言語で書いてみるってのはどっかおかしくなっちまうんだよな。
言語の入門書なんて何千冊よんだって何に使うかなんてどこにも書いてない。
これは当然のことだ。
431デフォルトの名無しさん:2005/11/23(水) 18:06:12
ってか、>>426が求めているのはHSPみたいなやつって落ちでしょ
432デフォルトの名無しさん:2005/11/23(水) 19:38:25
つか>>426ってなんの役に立つの・・・
>>426のレス読んで基本的なことは理解できるけど、
なんに使えるのかイマイチ。
433デフォルトの名無しさん:2005/11/23(水) 22:57:13
なんかのAPIの知識がなければCの標準ライブラリで出来ることなんて
何もないようにおもえるわな。ウインドウ1個も出せないんだし。
それが気に入らない奴はjavaでもやってろ。ケッ
434デフォルトの名無しさん:2005/11/23(水) 23:09:56
コンソールアプリなんか作るとへんなメモリ制限あるしね。
435デフォルトの名無しさん:2005/11/23(水) 23:12:10
>>434
それってC/C++の問題って言うより、処理系の問題なんじゃね?
436デフォルトの名無しさん:2005/11/23(水) 23:31:24
んだんだ
437デフォルトの名無しさん:2005/11/23(水) 23:46:02
>>435
いや、だから、やっぱWindows上ではじめは作ってみるもんじゃん?
そのままWinMainもいじらないでC言語の入門書の延長で
何かできること考えたらその辺にぶち当たるじゃん。
438デフォルトの名無しさん:2005/11/23(水) 23:54:41
>>437
そもそもメモリ制限ってなんだ?
ばかでかい配列を宣言できないとかか?それなら確か何かの
コンパイルオプションで回避できたはずだが
439デフォルトの名無しさん:2005/11/24(木) 00:05:44
>>437
コンソールだけでも相当のことは出来るんだがな。
Windowsにおけるコンソールアプリケーションってのは、
デフォルトでコンソールを持ってるというだけの差しかないと言うことは置いておくとしても。
440デフォルトの名無しさん:2005/11/24(木) 01:00:44
いや、ウィンドウズのコンソールアプリってエミュで
しか動いてないと思ってたけどちがうんかな(特にXPとか)
で、なんか使っていいメモリも設定によって制限なかったっけ?
441デフォルトの名無しさん:2005/11/24(木) 01:40:40
それはWin32コンソールアプリではなくDOSアプリ。
442デフォルトの名無しさん:2005/11/24(木) 03:34:32
コンソールアプリを作るとDOSアプリになる時代もあったのかもしれない。
でも、今のVCが生成するコンソールアプリは32bitのwindowsアプリケーションです。
mainとWinMainじゃ引数の形式が違うのでそのへんの変換とかコンソールとの接続を確認したりとかそういった操作をし、そのあとでmainを呼び出すようなWinMainを勝手につけてくれるだけだったような。
うろ覚えなので間違ってたらすまぬ。
443442:2005/11/24(木) 03:51:40
ごめんよ。書き込んでから気になったので調べたらちがったぽ。
どこでこんなことを覚えてしまったのだろう・・・。
444デフォルトの名無しさん:2005/11/24(木) 04:30:46
>>443
以前(Win98時代)にVC6で作ったコンソールアプリをWindows起動前に実行させようとしたら動かなくて、
LISC試食版でコンパイルしたら動いた。

ってことがあって、>>442みたいな事をしてるんだろうなと思っていたんだけど違うの?
445デフォルトの名無しさん:2005/11/24(木) 06:30:58
>>443
何がどうちがったのか書いていってよ。
446デフォルトの名無しさん:2005/11/24(木) 07:46:19
>>444
だからVC6もWin32コンソールアプリを作るからDOS上(Windows起動前)では動けない。
447デフォルトの名無しさん:2005/11/24(木) 10:59:52
>>444
そりゃカーネル立ち上がる前にWin32アプリが実行できるわけがない。
Win98のDOSはブート時に使ってるだけ。(MeはDOS非使用)
448デフォルトの名無しさん:2005/11/24(木) 15:44:21
>>447
ダウト。
より隠れただけでMeも起動時にDOSを使っているのは間違いない。
449デフォルトの名無しさん:2005/11/24(木) 16:32:01
ぶっちゃけどうでもいい
450デフォルトの名無しさん:2005/11/24(木) 16:50:24
そうやって興味を持つ姿勢をないがしろにしているから
君は成長しないのだよ。
451デフォルトの名無しさん:2005/11/24(木) 16:57:11
ふーん
452デフォルトの名無しさん:2005/11/24(木) 18:26:24
必要になったらオベンキョしましょ
453デフォルトの名無しさん:2005/11/25(金) 13:18:52
PC/AT互換機は起動するときには必ず最初に16bitリアルモードで起動する。
454デフォルトの名無しさん:2005/11/25(金) 18:47:58
EFIでもそうなんか?
455デフォルトの名無しさん:2005/11/26(土) 14:48:27
質問です。XP、.NET です。

あるダイアログを管理するクラス CHogeDialog を作っています。
ダイアログのコールバック HDProc 関数をメンバ関数にするため、static 宣言にしました。
しかし、CreateDialog では、コールバック関数に値を渡す場所がないため、this ポインタを渡すことができず、
static な HDProc 内ではメンバにアクセスしようにも、インスタンスのポインタを取得することができません。

そこで、SetProp を用いて、ハンドルとオブジェクトを結びつける方法を学んだのですが、
結び付けを行えるのは、CreateDialog が完了した後です。
HDProc が WM_INITDIALOG で呼ばれたときには、まだ結びつけが行われておらず、
オブジェクトのポインタを取得できません。
そのため、WM_INITDIALOG で呼び出されたときの処理において、
メンバにアクセスすることができません。

何か解決方法はないでしょうか。
よろしくお願いします。

456デフォルトの名無しさん:2005/11/26(土) 14:53:47
>>455
DialogBox/CreateDialogの代わりにDialogBoxParam/CreateDialogParamを使う。
457455:2005/11/26(土) 15:06:30
>>456
解決です!ありがとうございます。
458デフォルトの名無しさん:2005/11/27(日) 02:09:47
質問させてください。いま、Linux上で任意のウィンドウのスクリーンキャプチャを連続で行う簡単なプログラムを書こうと思い、以下のように書きLinuxに用意されているコマンドxwdを呼び出すようにしました。

popen("xwd -name \"xxx\" -nobdrs -silent -out test.xwd ","w"); /* xxxは任意のウィンドウネーム */

これをループさせていこうと思ったのですが、ファイル名を変更できないので上書きされてしまいます。なので、ループごとに変数をインクリメントし、その数値をファイル名にしたいと思うのですがどうすればよいでしょうか?

459デフォルトの名無しさん:2005/11/27(日) 02:20:25
Cでやる必要ないような...
460デフォルトの名無しさん:2005/11/27(日) 02:24:07
>>458
sprintf
461デフォルトの名無しさん:2005/11/27(日) 04:47:57
CreateProcess()でプログラムが終了するまで次の処理を待つように
しているのですが、
リダイレクトしようとしても、実行されません。
if( !CreateProcess( NULL,
"C:\\Program Files\\Microsoft Baseline Security Analyzer 2\\mbsacli.exe > results.xml",
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi ) )

どうすれば、リダイレクトされるのでしょうか?
462デフォルトの名無しさん:2005/11/27(日) 04:53:35
>>461
CMD.EXEを通さないとだめなんじゃない?
463デフォルトの名無しさん:2005/11/27(日) 06:59:12
Win32APIスレへどうぞ
464デフォルトの名無しさん:2005/11/27(日) 07:10:50
cmdの後に、手入力でパスを打ち込むとなんとかいけました。
残りはwin32APIスレにいてきますorz
465デフォルトの名無しさん:2005/11/27(日) 23:04:28
質問です。XP、.NET です。

あるグローバル変数の値を、常にあるダイアログに表示させたい場合、どのような方法が効果的でしょうか。

例えばダイアログのエディットコントロールに値を表示する場合、
変数の値を更新するたびに Edit_SetText を呼ぶわけにはいきません。
WM_PAINT を受け取るたびに表示しても、ダイアログに触らない限り表示が更新されません。
WM_TIMER を利用して定期的に更新するしかないでしょうか。
それとも、ある変数の値が更新されたときに呼ばれるメッセージなどを定義することができるのでしょうか。

よろしくお願いします。
466デフォルトの名無しさん:2005/11/27(日) 23:06:59
>>465
> 変数の値を更新するたびに Edit_SetText を呼ぶ
> ある変数の値が更新されたときに呼ばれるメッセージ

同じことな希ガス
467465:2005/11/27(日) 23:14:42
>>466
前者は手動、後者は自動ってつもりで書きました。
イメージとしては、前者は、変数の値を変更する全ての箇所で Edit_SetText を呼びだし、
後者は、監視する変数のアドレスを登録すると、
そのアドレスの中身が変更されるたびに自動的にメッセージが飛ぶ、って感じです。
468デフォルトの名無しさん:2005/11/27(日) 23:17:15
>>467
SetterとGetterを作ればいい話では。
クラスでカプセル化してもいいし
469デフォルトの名無しさん:2005/11/27(日) 23:22:42
>>465
>変数の値を更新するたびに Edit_SetText を呼ぶわけにはいきません。
ダイアログのエディットコントロールってEdit_SetTextで更新されないんだっけ?
470465:2005/11/27(日) 23:35:13
>>469
更新されます。
変数の値を変更する全ての箇所に Edit_SetText を記述するわけには行かない、という意味でかきました。

>>468 の方法しかなさそうですか。
申し訳ないながら、使用用途を書くのを失念していました。
デバッグウィンドウのようなものを作る予定でした。
汎用的に使えるものは無理そうですので、
>>468 の方法で、今回チェックしたいものに特化したものを作ることにします。
後出しで申し訳ありません。

ありがとうございました。
471デフォルトの名無しさん:2005/11/27(日) 23:55:13
変数をpublicになんておいておくからそういう事態になるわけだな。
これにこりたら変数はprivateにおいてsetとget関数を作るようにするんだ。
472デフォルトの名無しさん:2005/11/28(月) 22:23:13
数値計算した結果をグラフィックにする手段としてはどんな物がよく使われているのでしょうか?
xlibですか?
473デフォルトの名無しさん:2005/11/28(月) 22:29:49
自分の都合にあった方法。
474デフォルトの名無しさん:2005/11/28(月) 22:30:11
Excel
475デフォルトの名無しさん:2005/11/28(月) 23:34:09
グローバル変数の定義を一つのファイルにまとめられるように
Cプログラミング専門課程を参考にして

//GlobalDefine.h
#ifdef MAIN
#define GLOBAL
#else
#define  GLOBAL extern
#endif

GLOBAL int hoge;

というファイルを作ったのですが
二つのファイル(一つはインクルードする前にMAINを#defineして)からこのファイルをインクルード
すると二重定義になっているとコンパイラに言われてしまいます・・・
どこがまちがっているのでしょうか?
476デフォルトの名無しさん:2005/11/28(月) 23:37:53
二つのファイルで二重定義にしているところが間違っている。
477デフォルトの名無しさん:2005/11/28(月) 23:39:02
>>475
先にMAINをdefineするソースがコンパイルされてしまうと、
後からGlobalDefine.hをincludeするソースでもdefineされていることになるから
その類のことをやりたいならば

#ifdef MAIN
#define GLOBAL
#undef MAIN
#else
・・・

のようにマクロ定義を消してやる必要がある。
それ以前に、普通はそんなややこしいことせずに

Global.h
extern int hoge;

Global.cpp
int hoge;

のようにすりゃいい話。
478475:2005/11/29(火) 00:04:25
>>477
二つのファイルに分けるといいんですね。ありがとうございました

あと
「先にMAINをdefineするソースがコンパイルされてしまうと、
後からGlobalDefine.hをincludeするソースでもdefineされていることになる」

の部分について質問なんですが

#includeの場合ソースファイルごとに行われる
#defineの場合一つのソースファイルで定義をしたら他の全てのソースでも定義したことになる

という考えでいいんでしょうか?
479デフォルトの名無しさん:2005/11/29(火) 06:35:03
>>475
>グローバル変数の定義を一つのファイルにまとめられるように
デスマーチに自ら突入する君の勇気に乾杯!
それってー、すべてのcppに#includeする気だろ?
グローバル変数が定義してあるヘッダファイルはマスターヘッダになって
それに1つ変数を追加するとフルビルドがはじまるんだよな。
俺のこれまでの経験で最高記録は10000行のマスターヘッダだ。
フルビルドに40分かかるすさまじい環境だったw

バグってもすべてのcppで#includeされてるもんだから原因の特定にかなりの時間がかかる。
また、マスターヘッダにすべて定義してあるから、責任の分配もないので、
これもバグったときの原因の特定に時間がかかる。
仕事でやれと言われたからしょうがなくやるのか・・・、
その組み方しか知らないからとりあえずやってみるのか・・・。
いずれにしろその組み方が極上の糞であることは知っておかなければならない。
それはわかった上での行動だろうな?
480デフォルトの名無しさん:2005/11/29(火) 11:05:06
「Cプログラミング専門課程」
481デフォルトの名無しさん:2005/11/29(火) 22:11:32
テンプレートクラス内で頻繁に使用されるデータ型を、
テンプレートクラス内でtypedefすることは出来ないのでしょうか?
例えば以下のようなケースなのですが、
///////////////////////////////////////////////////
template <class T>
class hoge {
  typedef std::deque<T *> hoge_list;  // ←(1) 型の宣言
private:
  hoge_list list;
public:
  hoge_list& getList(void);
  void addList(T *);
};

template <class T>
hoge_list& hoge<T>::getList(void){return this->list;}  // ←(2)

template <class T>
void hoge<T>::addList(T *ptr){this->list.push_back(ptr);}

int main(void)
{
  hoge<std::string> ihoge;
  ihoge.addList( new std::string("あいうえお") );
  return 0;
}
///////////////////////////////////////////////////
クラスの宣言部の(1)で行っている型の宣言は、できればグローバルで
宣言したいものの、未定義の型Tを含むのでクラスの外では宣言できませんよね…?
かといって、このままでは(2)の部分で構文エラーが出てしまいます。

どうすれば宜しいのでしょうか。よろしくお願いいたします。
482デフォルトの名無しさん:2005/11/29(火) 22:21:50
>>481
template <class T>
hoge<T>::hoge_list& hoge<T>::getList(){return this->list;}
とするのが普通だと思う。
483482:2005/11/29(火) 22:22:33
hoge_listはpublicで定義することにした上で。
484デフォルトの名無しさん:2005/11/29(火) 22:43:40
>>483
getListがhogeのメンバだからhoge_listがhoge内でprivateだったとしても問題ないよ。
485デフォルトの名無しさん:2005/11/29(火) 23:12:54
すみません、処理系を書いていませんでした。
VC7を使用しています。

>>482,483
教わったとおりに、型の前にクラススコープを付けてみたのですが、
(2)における構文エラーは消えず、新しく以下の警告が加わりました。

warning C4346: 依存名は型ではありません。
型を指定するには、'typename'を含むプレフィックスを使用してください。

そこで以下のように修正してみたところ、コンパイルが通りました。

template <class T>
typename hoge<T>::hoge_list& hoge<T>::getList(void){
  return this->list;
}

なぜこれで上手くいくのか良く分かりませんが…。
C++の仕様は複雑ですね…。
レスありがとうございました。

>>484
逆に、publicで型宣言すれば、クラスの外部からも
その型を指定可能になるということですよね。
とりあえずはpublicにしておくことにします。
ありがとうございました。
486デフォルトの名無しさん:2005/11/30(水) 03:39:55
487奈々 ◆Xl6OTFSLJ2 :2005/11/30(水) 11:14:54
BCC5.5.1を使ってインポートライブラリを作りたいのですが、上手くいきません。
一番分かりやすいサイトを参考にしました。→ttp://www6.plala.or.jp/mnagaku/cmag/ac20005/
*.dllの作成、そこから*.libの作成までは上手くいきました。
しかし、最終的にライブラリを呼び出すプログラムをコンパイルしようとするとエラーが出ます。
エラーの内容は、「外部シンボル 'DLL内の関数名' が未解決 (なんたら.OBJが参照)」です。
問題箇所が分かる方、よろしくお願いします。

//DLLのソース
#include <stdio.h>
extern "C" __declspec(dllexport) int Test(char *buf){
    printf("Aさん「%s」",buf);
    return 0;
}

//ヘッダファイル
int Test(char *);

//呼び出すプログラム
#include <stdio.h>
#pragma comment(lib,"test.lib")
#include "test.h"
int main(){
    char a[256]="テストです。";
    Test(a);
    return 0;
}
488デフォルトの名無しさん:2005/11/30(水) 12:50:52
>>487
//ヘッダファイル
extern "C" __declspec(dllexport) int Test(char *);
489奈々 ◆Xl6OTFSLJ2 :2005/11/30(水) 13:21:52
>>488
できました!
ありがとうございます!
490デフォルトの名無しさん:2005/11/30(水) 17:41:40
待て待て。そのヘッダファイルがtest.hなら、
呼び出すほうからも__declspec(dllexport)になってまずくないか?
491デフォルトの名無しさん:2005/11/30(水) 21:09:48
windows XPはflockをサポートしてるそうですが、flockを使うにはどうすればいいのでしょうか?
windows XP,Platform SDK,bcc32です。
492デフォルトの名無しさん:2005/12/03(土) 03:02:03
//---------------------------------------------------------------------------
#include <iostream>
#include <fstream>
//---------------------------------------------------------------------------
typedef unsigned char uchar;
using namespace std;
struct finish{};
//---------------------------------------------------------------------------
uchar getByte(ifstream &ifs)
{
if(!ifs) throw finish();
uchar out;
ifs.read(reinterpret_cast<uchar *>(&out), sizeof(uchar));
//out = static_cast<uchar>(ifs.get()); //bug
return out;
}
//---------------------------------------------------------------------------
すみません。
これはプログラムの一部ですけど、
//bugの行のコメントをはずすと動作が不定になるみたいなんですけど、
どこがおかしいですか。
493デフォルトの名無しさん:2005/12/03(土) 03:15:19
>>492
istream::get()が返すのがint_typeだからではないだろうか?
494デフォルトの名無しさん:2005/12/03(土) 17:49:12
sprintfみたい事したい時に
cout.write(lpBuf, 0) << nLine << "文字列 : " << nErrorNum << endl;
こんな使い方していいもんなんですか?
495デフォルトの名無しさん:2005/12/03(土) 18:55:21
つーかSTLスレ行けや?
496デフォルトの名無しさん:2005/12/03(土) 22:22:35
>>494
もちろんいいさ。そういう使い方もできるように作られているんだから。

>>495
何ゆえ?
497デフォルトの名無しさん:2005/12/04(日) 00:03:46
>>496
ありがと!
498492:2005/12/04(日) 02:23:23
>493
ども。
int_typeってintと違うのかなと思ったんですけど普通はintっぽいですし、
intの変数に格納してからキャストしても結局ダメで。
結局C++では引数なしget()は使うべきではないのかなと。
引数ありget()だと大丈夫でしたし。
でも引数なしget()はCのget()と基本的に同じって書いてあったから
それだとC時代だとどうなってるんだということに。

バイナリでは一字読み取りでもread()の方が無難ですか。
ちなみにgetByteはプログラム中で使ってなくても動作は不定みたいです。
不定って怖いですね。
499デフォルトの名無しさん:2005/12/04(日) 09:14:32
>>498
引数なしget()がint_typeを返すのはEOF(istream::traits_type::eof)を返すことがあるため。
だからchar型にする前にEOFかどうか調べろ。
500デフォルトの名無しさん:2005/12/04(日) 16:30:49
>>498
動作が不定って、何のことを言ってるの?
プログラムで使ってないなら、それは getByte() の動作とは関係ないんじゃないの?
501デフォルトの名無しさん:2005/12/04(日) 22:58:32
>>475
GLOBAL int hoge = 0;
みたいに初期化してるところがあるのでは。

>>479
> フルビルドに40分かかる
別にすさまじいとは思わんが、
スコープはちゃんと考えよう、な。
502498:2005/12/05(月) 03:19:06
>499
EOFはif(!ifs)で代用してたつもりでした。
ただ、intの変数に格納したあとキャストしてもダメだったんでチェックしてもあまり変わらないような気がします。
確かめないと何とも言えません。
というかそれで大丈夫だったらショックなんですけど。

>500
具体的に言いますと1Byteずつ入力してたのがいきなりアドレスが飛んだり
CodeGuardは違法なメモリアクセスみたいに言ってる。
件の行をコメント化するだけで解決するので原因はそこだと思うのですけど。
あからさまに挙動がおかしいのでちゃんと書いてるように見えても動作が不定になるような事を書いてるのかなと思ったのです。
不定は何が起きてもおかしくないと言われてますし。
ただ、CodeGuardが実際に文句を言うのは出力の時です。
503デフォルトの名無しさん:2005/12/05(月) 04:06:15
CodeGuardって適当だから
504デフォルトの名無しさん:2005/12/05(月) 11:53:17
>>502
アクセス違反の原因は、
大抵はエラーが起こった箇所とは違う場所にある。
505デフォルトの名無しさん:2005/12/05(月) 15:42:32
数字遊びを作る宿題で、途中経過をフロッピーへ保存する部分が上手くいかなくて困っています。

http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1208.txt

関数「file」のところが上手く動作しません。
どなたか指導宜しくお願いします…
506505:2005/12/05(月) 16:05:49
>>505他板で解決しました。ご協力頂いた方申し訳ありません。
507デフォルトの名無しさん:2005/12/05(月) 20:19:00
死ね
508デフォルトの名無しさん:2005/12/05(月) 23:27:57
std::stringの最初の一文字だけを表示と二文字目以降の文字列を表示ということをやりたいのですが
これってどうやるんですか?
509デフォルトの名無しさん:2005/12/05(月) 23:47:07
>>508
std::string s = "hoge";
std::cout << s[0] << std::endl;
std::cout << s.c_str() + 1 << std::endl;
510デフォルトの名無しさん:2005/12/05(月) 23:51:40
>>509
あ、なるほど。よくわかりました。
どうもありがとうございました。
511498:2005/12/06(火) 02:42:48
全体的なソース出さないとあれなんで問題が起こる範囲でまとめてみました。
これでおかしい所がありますか?
//---------------------------------------------------------------------------
#include <iostream>
#include <fstream>
//---------------------------------------------------------------------------
typedef unsigned char uchar;
using namespace std;
struct finish{};
//---------------------------------------------------------------------------
uchar getByte(ifstream &ifs)
{
int out;
out = ifs.get();
if(out == EOF) throw finish();
return out;
}
//---------------------------------------------------------------------------
int main(int argc, char **argv){
if(argc != 2) return 1;
ofstream output(argv[1]);
if(!output) return 1;
output << "hoehoe" << endl;
return 0;
}
//---------------------------------------------------------------------------
512デフォルトの名無しさん:2005/12/06(火) 07:43:57
>>511
getByteがどこからも使われていない。
513最近テレビでみた芸人:2005/12/06(火) 22:47:10
>>512
使われてるさ。
君のこころの中で。

アマーイ!アマイヨアマスギルヨ!マルデ〜略〜グライアマイヨ!
514デフォルトの名無しさん:2005/12/06(火) 23:00:02
>>513
残念だが俺の心の中身はどれも1Byte如きで表せるようなものではないのさ。
515515:2005/12/06(火) 23:26:46
環境:winXP+Cygwin
やりたいこと:ある数字が連続的に100回表示される間にカーソルキーを使って
その数字を1ずつ変更(増減させる)することです。
cursesを使うとできるかと考えて、以下のようなプログラムを書いてみたのですが、
カーソルキーを打たないと次に進まないプログラムになってしまいました。
アドバイスをいただけないでしょうか?
516515:2005/12/06(火) 23:27:20
#include <stdio.h>
#include <curses.h>
int main() {
initscr();
noecho();
cbreak();
keypad(stdscr, TRUE);
int j, ch;
double x;
x = 1;
for (j=0; j < 100; j++)
{
while (j < 100) {
ch = getch();
switch (ch) {
case KEY_LEFT:
x -= 1;
break;
case KEY_RIGHT:
x += 1;
break;
default:
break;
}
break;
}
printf("%f \r\n", x);
}
exit(0);
echo();
endwin();
}
517デフォルトの名無しさん:2005/12/07(水) 01:15:48
getch関数使ったらブロッキングされるだろ
518デフォルトの名無しさん:2005/12/07(水) 12:51:46
処理系によっては、
int a = 5 / 2の時にaは2であったり3であったりするらしいですが、
どんな処理系でも2になるようにするにはどうしたらいいんでしょ?
519デフォルトの名無しさん:2005/12/07(水) 12:58:24
3返す処理系なんてあるのか‥‥(゚д゚)コワー
520デフォルトの名無しさん:2005/12/07(水) 14:34:00
>>518
整数型同士の除算の結果は必ず切捨てされる。
問題は負の数が含まれているときにどうなるかが実装依存。
しかしそのときもdiv/ldivなどでは0方向への切捨てと決まっているのでこれを使えばよい。
さらにC99では除算演算子の挙動もdivなどと同じ挙動へ修正された。
521デフォルトの名無しさん:2005/12/07(水) 15:57:51
5/2が3になるのは規格違反だろ
522デフォルトの名無しさん:2005/12/07(水) 16:03:59
どうしても、小数点以下の処理を気にせず計算したいなら剰余を減算してから除算しろ
523デフォルトの名無しさん:2005/12/07(水) 21:27:51
Visual C++ 6.0で、Cを勉強中なんですが
helpの設定をどうしたら良いのか良くわからないんです
レジストリをいじる様なのは分かるのですが、どうすれば
良いんでしょうか。MSDNライブラリを買うべきでしょうか。
どなたか、助言お願いいたします。
524デフォルトの名無しさん:2005/12/07(水) 21:30:43
>>523
何を言ってるかさっぱり分からないので、さようなら。
525デフォルトの名無しさん:2005/12/07(水) 22:29:58
>>523
スレ違い。このスレへGo
★初心者にVisual C++を教えるスレ★ Part22
http://pc8.2ch.net/test/read.cgi/tech/1131443284/
526523:2005/12/08(木) 20:37:43
申し訳ないです
スレちがいだったんすね
527523:2005/12/08(木) 20:49:52
ところで、教えて欲しいのですが
以下の文でファイル操作を勉強してるところ
#include <stdio.h>

int main() {
char str[] = "abcd";
int count ;

for (count = 0 ; str[count] != 0 ; count++) {
fputc(str[count] , stdout);
}
return 0;
}
のstr[count] != 0での判定が、理解出来ないです。
0以外の値が入ったらfor文終了という文と思ってるんですが
最初のstr[0]の時点で0以外が入ってるとおもうのですが
なぜ、コンパイル可能なのでしょうか、教えてください
528デフォルトの名無しさん:2005/12/08(木) 20:52:41
>>527
str[count] == 0 で for終了です。間違えないよう。
それと、文法的には間違いないので、コンパイルと動作は別。
529デフォルトの名無しさん:2005/12/08(木) 20:52:58
>>527
話にならない。
思ってるんじゃなくて、確認しろや。
530デフォルトの名無しさん:2005/12/08(木) 21:03:49
むしろ何故コンパイル不可能だと思うのかがわからない
適当な入門書を買って一から勉強したほうが早そうだ
531デフォルトの名無しさん:2005/12/08(木) 21:07:27
入門書も読まずに、人に質問して進めて行くのが今の流行です。
532デフォルトの名無しさん:2005/12/08(木) 21:11:29
末期だな
533527:2005/12/08(木) 21:15:23
>>528
即答、ありがとうございます
条件式の意味を、不十分に理解していました。
A !=B ならAがBでなければ真というのを、偽と思ってました。
ありがとうございました。
534デフォルトの名無しさん:2005/12/08(木) 21:16:14
>>528
str[count] == '\0'
のが適切な希ガス
535デフォルトの名無しさん:2005/12/08(木) 21:37:41
>>534
Cの場合は表現の違いなだけ。


'\0'はint型の0
536デフォルトの名無しさん:2005/12/08(木) 21:43:21
そうはいっても、ヌル文字は0より\0の方がわかりやすいのは確かだな
537デフォルトの名無しさん:2005/12/08(木) 22:16:53
>>536
確かに意味的には数字でなく文字だからな
538デフォルトの名無しさん:2005/12/08(木) 22:32:27
>>533
終了条件じゃなくて継続条件。
539デフォルトの名無しさん:2005/12/08(木) 23:15:53
このことがコンパイルの可・不可に関わることだと思ってる誤解のほうは
未だそのまんまだが、まぁ皆にならって放っておこう。
540527:2005/12/08(木) 23:49:47
すいません。コンパイル可能、不可能に関わることではないというのは、理解しています。
理解してたのに、なぜコンパイル出来るのかと、馬鹿な書き足しをしてしまったのはすいません。
コンパイル不可能ならエラーが出るのに、馬鹿です。
ところで、引き続き質問さして頂きたいです。
例えば
char str[]="abcd";
と宣言したらstr[4]に0が入ってたのはしってたのですが、レスを見ると'\0'
が入ってると見受けられるのですが、実行して見ても0が表示されるのです。
文字列の最後は0でないといけないと理解してたのですが
\0と表示させる方法はあるのでしょうか。
重ね重ね質問して申し訳ありません。
541デフォルトの名無しさん:2005/12/08(木) 23:51:17
542デフォルトの名無しさん:2005/12/08(木) 23:51:55
0が表示されるというのは面白いなw
543デフォルトの名無しさん:2005/12/08(木) 23:52:33
>>540
\0というのは\nみたいなもので、\0という物それ自体が0を示す
\0はあくまでソース中のみの表記。\nが表示されないのと同じ
544デフォルトの名無しさん:2005/12/08(木) 23:56:43
入門書も読まずに、人に質問して進めて行くのが今の流行です。
545デフォルトの名無しさん:2005/12/08(木) 23:58:26
>>540
文法エラーと、論理エラーの区別が出来るといいね。
546540:2005/12/09(金) 00:16:27
>>543
ありがとうございます。
丁寧に説明していただき助かります。
>>545
まだまだ、その区別が出来るのは先だと思います。
文法エラー=コンパイル時にエラーが出る?
論理エラー=実行時にエラーが出る?
初心者の初心者ですので、つっこみ所は多いと思います。
547デフォルトの名無しさん:2005/12/09(金) 00:27:57
>>546
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/503-9798954-2696751

とりあえず明日にでもこれを買え。わからないことがあったら他人に訊く前にこの本を百回読め
初心者という自覚があるならついでに入門書も買っとけよ
548デフォルトの名無しさん:2005/12/09(金) 14:26:57
文法エラー: コーヒーが砂糖はミルクの入れて飲む。
論理エラー: コーヒーに塩とミルクを入れて飲む。
549546:2005/12/09(金) 14:39:00
>>547
書評を見ると、初心者向けというより、ある程度C言語を通して理解した
人が見て便利な本のようなので、いつか買うかもしれません。

基本的に、どんな分野でも高い金を出して知識を吸収するために
本を買うのは、あまり僕は理解出来ないです。
案の定、この前ブックオフで別分野の本を買いました(ラッピングされてるので
中身はみれない)が、中身は、あまり親切ではなかったです。
基本的に、市民図書館、近辺の大学の図書館で本を借りて
かつ、ネットの入門サイト等で勉強してます。
そして、2ちゃんで、質問してるという感じで、help workshopで自分用にhelpを作るつもりです
ちなみに、いま参考書として借りてるのは、”明解C言語 入門編 柴田望洋[著]"です
550デフォルトの名無しさん:2005/12/09(金) 14:40:58
うわぁ、よりによって……
551デフォルトの名無しさん:2005/12/09(金) 14:44:30
自己中の見本みたいな奴だなw
552デフォルトの名無しさん:2005/12/09(金) 16:39:23
知識を得るために高々数千〜1万ちょっとの金を出し惜しみするような奴は
しねばいいんでないかな?
553デフォルトの名無しさん:2005/12/09(金) 17:18:44
>>546
>まだまだ、その区別が出来るのは先だと思います。
こんな考えじゃダメダメ
今すぐにでもできるようになる心構えでやれ
554デフォルトの名無しさん:2005/12/09(金) 17:20:06
>546
それは大変結構なお考えだと思いますが、ろくに理解できてませんね?
ちなみに、受身の姿勢でお勉強するとどんな教材も不親切だと思うぞ
555デフォルトの名無しさん:2005/12/09(金) 17:40:50
>>549
ちなみに、その本を書いた人達はC言語の中の人なんだが、ご存じない?
その辺のサイトよりも為になると思うぞ

あとな、本を買うか買わないかは自由だと思うが
備忘録くらいは用意しておけよ?C言語の全てを頭に叩き込んでおくのは無理なんだから
556デフォルトの名無しさん:2005/12/09(金) 17:58:26
別にすべてを頭にたたき込む必要はないけどね。
557デフォルトの名無しさん:2005/12/09(金) 19:57:20
>>548
非常に分かりやすい…か?
558デフォルトの名無しさん:2005/12/09(金) 20:23:59
構文/文法エラー:問題外
なのは間違いない。
559デフォルトの名無しさん:2005/12/09(金) 22:10:32
enum FLAG {
FLAG_DEAD = 0x01,
FLAG_LOVE = 0x02
};

FLAG flag;
flag |= FLAG_LOVE;

とすると、コンパイラエラーになる。
これを避ける方法はflagをint型の変数として定義する以外にない?
560デフォルトの名無しさん:2005/12/09(金) 22:19:26
>>559
演算子多重定義は列挙型に対してもできる。
FLAG& operator |=(FLAG& x, FLAG y)
{
    x = static_cast<FLAG>(x | y);
    return x;
}
561559:2005/12/09(金) 22:42:38
へえ、知らんかった。どうもです。
562546:2005/12/09(金) 22:46:39
なんか、色々、たたかれてますね俺。
ちなみに、547の本の書評を色々みましたが
初心者に本当に向いてるの?もちろん、Cに関するすべての
事柄を頭に覚え込むなんて無理なのはわかってますが
書評で、星を4つ以上付けてる人の内容は、ある程度Cを
理解した人の書き込みで、新たな発見や、理解度の深遠さが深まる
と書いてあり。星一つの人は、複雑で最初からよく分からないと書いてました。
あと、知識を得るために高々数千円〜1万と言いますが、それは人の価値観
による物でしょう。金が無いが、勉強はしたいという人の為に図書館という設備
があるんですよ?金なしは、勉強するなと言うことですか?
だから俺は、ウェブページや、本を見ながら、例文等をノートに書いて勉強してます。
レス見てると、ここは、初心者歓迎じゃないんじゃないんですか?
もちろん、質問に対して、端的に注釈そえて馬鹿にもせず、答えてくれる方がいます。
その方達には感謝しています。自分の至らなさに申し訳ないとも思います。
しかし、547の本を100回読んでも、ここに来て質問する人は初心者ですか?
質問に対して、冷やかしを言って、肝心の答えやアドバイスをしない人は
なにしに来てるんですか?
MXのチャット室の初心者歓迎ページと名を表した初心者を馬鹿にするページ
と似ているようなレスな気がしてきました。
お願いがあります。
私じゃなくても、質問する人が来るでしょうが、スレッド名通り初心者として
みてあげてください、そして馬鹿にしたり冷やかしたりするだけなら書き込まない
で下さい。「入門書をもっと良く読め」「話にならない」等の言葉。
それで事たりるなら、どんな質問が来ても私でも答えれます
「入門書百回読んでからもっかい来い」
って言えばすむ話ですから。
563デフォルトの名無しさん:2005/12/09(金) 22:54:35
>>562
本人かどうか知らんがここはくだすれじゃない。
そして何より長文キモイ
564デフォルトの名無しさん:2005/12/09(金) 22:58:32
>>562
うんうん、俺もそう思うよ。
何書いてるか知らないけど。
565デフォルトの名無しさん:2005/12/09(金) 22:58:46
>>562
最後の二行だけ読んだ

入門書百回読んでからもっかい来い
566デフォルトの名無しさん:2005/12/09(金) 23:07:07
>>562
>妹のめしべはぐっしょりと濡れていた。
まで読んだ。
567デフォルトの名無しさん:2005/12/09(金) 23:08:05
Cを真面目にやるならK&R(>547の本)は買え。Cの全てが書いてあるから。安いし。
そして100回読んでも初心者スレでバカな質問をするようなら、
それはもうプログラミングに向いてないとしか。
568546:2005/12/09(金) 23:12:56
そして、もう一つ言わしてくれ
君らの罵詈雑言が、俺をむかつかせ、いらつかせ
「じゃぁ、文句ないような質問できるようになるよう
スキルをあげたるわ」と、向上意欲を上げさせられる。
だから、寝ようにもいらつくから、寝れずに、今からまた
勉強します。
ある意味「ありがとう」、ある意味「おめーら死ね」
感謝されて喜んで、死ねと言われてむかついてください。
以上!!
これ以上、駄文は書きません。もっと知識を身につけ
また質問にこさせて頂きます。納得いく質問用意します。
569デフォルトの名無しさん:2005/12/09(金) 23:13:55
>>562
2chは初めてかい?坊や
親切に手取り足取り教えて欲しいなら、君の行くWebサイトで聞きなさい
570デフォルトの名無しさん:2005/12/09(金) 23:14:44
書けば書くほど皆食いつくってのに・・・
ここがどこだかわかってないなぁ。
571デフォルトの名無しさん:2005/12/09(金) 23:14:55
>>546
で、どこを縦読みするんだい?
572デフォルトの名無しさん:2005/12/09(金) 23:15:46
>>568
病院行ったほうがいいよ。身体じゃなくて心な。
573デフォルトの名無しさん:2005/12/09(金) 23:18:19
おー、すごいすごい。
これがゆとり世代ってやつ?
574デフォルトの名無しさん :2005/12/09(金) 23:22:58
>>567
わかりました。
そうします。
575デフォルトの名無しさん:2005/12/09(金) 23:24:09
>>568
馬鹿じゃねーのか?こいつ。
576デフォルトの名無しさん:2005/12/09(金) 23:33:49
ここの回答者の多くは、好奇心の赴くままプログラミングで遊び続けて、
気がついたらここで回答者をやれるレベルになってたって感じだと思うんだよな。
546はそういったあたりの前提がなんかズレてる。
577デフォルトの名無しさん:2005/12/09(金) 23:33:59
>>562
ここに限らずどこも質問するときには「自分で調べてどうしてもわからなかったら」というのが常識だと思ってほしい。
「どうしても」というのはそれなりに努力した上でということ。
たとえば527や540の質問は547の本でなくとも、どんな入門書でも書かれているほど基礎中の基礎。
図書館でもまあ1冊くらい何かCの本はあるだろうに。そしてそいつをペラリとめくれば書いてあるはず。
それで誰も煩わせずに解決することなんだよ。

このスレは初心者歓迎だよ。だけど、初心者未満は門前払いだからそこんとこよく理解しておいてちょうだい。
あと547の本をもし本当に100回読んだらもはや初心者脱出だろうね。ちなみにここは初心者を超えた人の質問も歓迎だよ。
578568:2005/12/09(金) 23:34:02
馬鹿だから、こんだけ叩かれてんだよ
それぐらいわかれ馬鹿。
579デフォルトの名無しさん:2005/12/09(金) 23:38:28
馬鹿というより無礼というか自己中心的ですな
580デフォルトの名無しさん:2005/12/09(金) 23:41:25
小学生なんて大体そんなもんだろ
581578:2005/12/09(金) 23:47:17
分かりました。精神科に掛かってきます。
582デフォルトの名無しさん:2005/12/10(土) 00:03:17
>>568
スキルあげてもまだ2ちゃんで質問する側なのかよw
583デフォルトの名無しさん:2005/12/10(土) 00:06:11
>>568
本人だと信じて。
がんばって優しく初心者に解答してあげられる人間になってください。
584デフォルトの名無しさん:2005/12/10(土) 00:09:20
>>583
しかし、一向にそういう奴は増えていかない不思議w
585デフォルトの名無しさん:2005/12/10(土) 00:11:29
IT業界最大の謎。
技術力と人間性反比例の法則を打ち破れ!
586デフォルトの名無しさん:2005/12/10(土) 00:28:38
技術力に反比例して、>>568の人間性が素晴らしいと?
587デフォルトの名無しさん:2005/12/10(土) 00:41:45
>>584
少しはいます。例えばここにも。
588デフォルトの名無しさん:2005/12/10(土) 00:43:14
IT業界最大の謎が打ち砕かれたらしい
とりあえず記念下記子
589デフォルトの名無しさん:2005/12/10(土) 00:44:32
>>586
こうやって2ちゃんで荒らす奴ってのは意外とリアルで普通の奴だと思う。
逆に2ちゃんで普通でいられる奴ってのはリアルでヤバゲだと思う。
590デフォルトの名無しさん:2005/12/10(土) 00:47:50
>>589
つまり一見普通に見えるお前はリアルでヤバゲなのか
591デフォルトの名無しさん:2005/12/10(土) 00:52:45
>>590
ヤバイよーw
だって、会社で普通に会話できねぇもん。
内戦電話に恐怖を覚えるね。
飲み会だって1人で欠席多いし、ていうか、根本的に飲み会嫌い。
ノリ悪い、会話つまんない、でも技術力はある、の上司にとっては扱いづらいことこの上ないだろうな。
592デフォルトの名無しさん:2005/12/10(土) 00:55:05
>>568
人間性も糞だから反比例の法則を打ち破ってる

>>562
私でも答えられますって、お前じゃ入門書を読めばわかる内容なのかどうか判断できないだろ
貧乏人は勉強するなとは言わないが一から十二ぐらいまで誰かに教えてもらわなきゃ出来ないような奴は迷惑だから勉強するな
593568:2005/12/10(土) 01:09:38
一時間半経ったから休憩
おれは、基本的に電気回路系の仕事してた
今は、病気が長続きして失職して、傷病手当で療養中

駄文書かないと書いたが、暇なので駄文を書く。
休憩中の暇つぶしの書き込みです。
594デフォルトの名無しさん:2005/12/10(土) 01:55:13
なんで、人に頼るのが大前提なんだろう・・・
595デフォルトの名無しさん:2005/12/10(土) 02:05:31
>>593
VIPでやれ
596デフォルトの名無しさん:2005/12/10(土) 02:09:54
無意味な数字コテつけてるくせに毎回変えるもんだからNGに登録も出来やしねえ。
これ以上糞吐き続けたいならどっかいくか、コテでもトリでも付けとけ。
こっちであぼーんしとくから。
597デフォルトの名無しさん:2005/12/10(土) 02:11:37
>>584
ここにも居るよ。
598& ◆D3ra0B2LiQ :2005/12/10(土) 02:42:14
はいはい、名無しにしますよ
別に人に頼るのが大前提なんて思ってないよ
ただ、俺が質問した一つめは、俺がちゃんと演算子を理解できてなかった
2つめは、文字列の最後の¥0を表示できるかどうかの質問
で、丁寧に回答してくれたのはそれぞれ一人ずつ。
あとは、つっこみと冷やかしで、回答無しが多数。
で、人に頼るのが大前提という前提はいつなされたのかな?
>>596
ID導入してくれれば良いのにね
出来るだけ、ちゃんと回答してくれる人をしっときたいし
おまえみたいなのは、見たくないしね
599デフォルトの名無しさん:2005/12/10(土) 04:22:10
>>598
懇切丁寧に教えて欲しいんだったら、金払ってそういう施設へ逝け。
人の好意にケチを付ける香具師は来るな。「タダ」とはそういうものだ。
600デフォルトの名無しさん:2005/12/10(土) 04:35:54
自分が悪いとは微塵も思ってない典型だなw
601デフォルトの名無しさん :2005/12/10(土) 04:53:08
>>598
ちゃんと教えてくれた人には、ありがとうを言ってるよ?
人の好意にケチをつけるというのは、質問して回答して
もらった内容に文句を言うということだよ?
>>528さんや>>543さんにはちゃんとお礼言ってるけど?
日本語わかる?
おまえに、なにか好意的な文章を俺は頂いたのかな?
ケチをつけられてるのはわかるけど。
ケチを付けて来る人にも君は、好意をいだくのかい?めづらしいね
602デフォルトの名無しさん :2005/12/10(土) 04:54:29
はは、まちがえた
俺にレスしちまった
>599あてだな
603デフォルトの名無しさん:2005/12/10(土) 05:05:09
>>601
そうか。ならば言わせてもらおう。
君が信じようが信じまいが、俺は>>528だ。
君の不遜な言動を今まで黙って見ていたが、君がそういう考えの
持ち主なのなら、もう二度と教えまい。

見ていて不快だ。何ならレス削除の要望を出したっていいぞ。スレ違いだからね。
604デフォルトの名無しさん:2005/12/10(土) 05:40:30
>>598
一つ目は演算子ではなくfor文に対する誤解
二つ目は文字リテラルに関する無知

>で、丁寧に回答してくれたのはそれぞれ一人ずつ。
既に誰かが答えてて、その内容が適切だったらわざわざ重複して回答したりはしないだろ。必要なら補足ぐらいはするけど
どうして冷やかされるのかを考えてみたほうがいい
605デフォルトの名無しさん :2005/12/10(土) 07:50:38
>>603
どうぞ削除依頼出してください,見ていて不快なのは
あたりまえです。そういう風に書いたんですから
528があなたならば、それ以降の俺への発言も
「528だが〜した方が良いぞ」と書けば良いでしょ?
ID無いんだから。
あなたにケチを付けていたとしても、あなたと断定出来る
物は無い以上、どの文があなたの文か判断できるわけないでしょ?
その上で人の好意にケチをつけると言ってますが、どの好意ですか?
もちろん528の内容は、助かりましたし、自分の未熟さを見直せました
でも、それ以降にごちゃごちゃ書かれた文の中に好意は感じませんよ
質問して、明確な答えを頂く。感謝する。それ以外は雑音です。
しかし、ありがとうございました
あなたが528であっても無くても、俺が書き込めば誰かがケチ付きレス
が夜中なのに返ってくる。勉強の休憩時に、どう書こうか考えるのが
面白かったですよ。

はい、長文ですよ、読み飛ばしましょうね。
606デフォルトの名無しさん:2005/12/10(土) 08:27:39
悔しさが文章に滲み出てるなw
607デフォルトの名無しさん:2005/12/10(土) 08:38:26
>>598
> で、人に頼るのが大前提という前提はいつなされたのかな?
今までのあなたの言動からそうだと判断させていただきました。
608デフォルトの名無しさん:2005/12/10(土) 08:40:58
おまいら暇だな、こんな馬鹿放っておけばいいのに。
609デフォルトの名無しさん:2005/12/10(土) 09:09:02
こりゃ、プログラミング以前に、頭の方を何とかしないとだめだな。
今流行のアスペルガー症候群って奴だ。
610デフォルトの名無しさん:2005/12/10(土) 09:24:20
顔真っ赤にしてキーボード叩いてんなよw
煽り耐性の無い奴だなあ。そんなんじゃ社会に出てもロクに生きていけないぜ?
611デフォルトの名無しさん:2005/12/10(土) 09:24:23
矢張り強制IDは必要であろうか
612デフォルトの名無しさん:2005/12/10(土) 09:50:49
漏れはID表示されていようとも煽りと甘やかした回答の両方をするから関係ないな。
613デフォルトの名無しさん:2005/12/10(土) 10:15:34
いや、これはただの煽り耐性の無さではないような希ガス。
明らかにファビョっている。
という事は、あの国の国籍を持つ者の書き込みかもしれない。
614デフォルトの名無しさん:2005/12/10(土) 10:23:06
>>612
IDないとブラウザであぼーんできない件について
615デフォルトの名無しさん:2005/12/10(土) 10:37:58
めづらしい←なぜか変換できない><
616デフォルトの名無しさん:2005/12/10(土) 11:37:52
弱い子ってたいへんね
617デフォルトの名無しさん:2005/12/10(土) 13:10:12
アスペル厨UZEEEEEEEEEEEEEEEEEEEEEEEE
618デフォルトの名無しさん:2005/12/10(土) 13:20:44
話の流れをぶった切って、諸兄に質問です。


他の方が作られたWindows95以降向けソフトウェア "Application.exe" があり、
私は、それのプラグイン "plugin.dll" を作っています。

自分の開発環境は Win2000+VC6 ですが、ターゲットはWin95〜XPを想定しています。
95やNT4は面倒なら動作対象外として切り捨てても問題はありません。
開発言語はC/C++で、Win32APIも使用可能です。

Application.exe で特定のコマンドが呼ばれる度に、
プラグインファイルの置かれたディレクトリ ./file/ 内を検索し、そこにある plugin.dll が動的にロードされます。
ただし、ディレクトリ名はユーザによって変更される可能性があります。
このとき、"Application.exe" ←→ "plugin.dll内の関数" 間で渡されるデータ(引数など)は無いとします。


ここで質問です。
plugin.dll の設置ディレクトリを取得したいのですが、どのようにすれば良いでしょうか。
619デフォルトの名無しさん:2005/12/10(土) 13:21:22
こちらで考えた方法は以下の2つです。

(1)
GetModuleHandle ( "plugin.dll" ) ; でモジュールのハンドルを取得し、
その後に GetModuleFileName でフルパスを得る。
得られたフルパスからディレクトリ名を抽出する。

# プラグインのファイル名をソース中に埋め込む必要があり
# スマートな方法とは思えません。
# また、plugin.dll という名前のプログラムが別の場所で複数動いていた場合、どうなるか自分には予想できません。


(2)
_getcwd で Application.exe のカレントディレクトリを取得し、
そこに file/ を付記する

# Application.exeのプラグインディレクトリ file/ はユーザによって変更される可能性がある。
#(デフォルトでは file/ 内だが、フルパスでDLLの場所を指定することもできる)
# ランチャーなどから Application.exe を起動したとき、カレントディレクトリが Application.exe の場所にならない場合がある。
620デフォルトの名無しさん:2005/12/10(土) 13:28:58
DllMainのhModuleでGetModuleFileName。
621デフォルトの名無しさん:2005/12/10(土) 13:39:19
早速の回答、ありがとうございます。
DllMainは無くても動作するらしく、関数自体を見落としておりました。

622デフォルトの名無しさん:2005/12/10(土) 18:28:54
struct {
const char* name;
void (__cdecl *func)();
} const funcs[] = {
"hoge1", hoge1
"hoge2", hoge2
}

void hoge1() { printf("hoge1"); }
void hoge2() { printf("hoge2"); }

こんな感じの関数ポインタの配列があったとします
これをC++でスマートに(BoostやSTLを用いても可)書く方法、ありませんか?
623デフォルトの名無しさん:2005/12/10(土) 18:49:48
>>622
関数のポインタ配列を作る必要になった動機しだいじゃね?

class Base { virtual function() {} };
class hoge1 : public Base { viratual funcstion() { printf("hoge1"); }
class hoge2 : public Base { viratual funcstion() { printf("hoge2"); }

としといて class Base の配列作れば似たような意味になると思うけど
624デフォルトの名無しさん:2005/12/10(土) 18:52:58
ゴメン 日本語おかしい。
× 関数のポインタ配列を作る必要になった動機しだいじゃね?
〇 関数のポインタ配列で何をやらせるか次第じゃね?
625デフォルトの名無しさん:2005/12/10(土) 19:05:28
>>624
何をやらせるか。。。
アプリケーションにマクロ機能を実装することですね。
具体的にはCmdOpenFileとか、CmdPaste、CmdCopyなどという文字列を与えられると
それに対応した関数を実行させるという事です
多分、Cで書くよりスマートにはならないかとも思いますが
C++風に書く方法があれば、教えて頂きたいです
626デフォルトの名無しさん:2005/12/10(土) 19:07:04
>>622
スマートとは何を意味する?
"hoge1"とhoge1という反復が嫌なのなら
BOOST_PP_STRINGIZEが使える。
もし本当に「hoge1」「hoge2」という関数名で、数値部分の繰り返しを避けたいなら、
BOOST_PP_REPEATが使える。
627デフォルトの名無しさん:2005/12/10(土) 19:29:59
>>626
自分でも曖昧になってました・・・

前者の反復は気になっていたので、早速取り入れてみようと思います。
628デフォルトの名無しさん:2005/12/10(土) 21:15:22
質問です
Win32環境でGIFアニメーションを表示したいと考えています
今はMFCのCHtmlViewを使ってるんですがスマートな方法とは思えません
何か別の方法があったら教えていただけないでしょうか
629デフォルトの名無しさん:2005/12/10(土) 21:23:16
>>623
> viratual
英語もおかしい。
630デフォルトの名無しさん:2005/12/10(土) 21:32:55
>625
文字列から何かを取り出す、ということがしたいならstd::mapかな。
631デフォルトの名無しさん:2005/12/11(日) 19:07:10
Win32でFlashを再生したいんだが、何使えば良い?
632デフォルトの名無しさん:2005/12/11(日) 19:19:24
IE
633デフォルトの名無しさん:2005/12/11(日) 21:25:35
>>631
Macromedia Flash Player
634デフォルトの名無しさん:2005/12/12(月) 11:07:31
>>631
確かMPCが自前で再生できなかったっけ?
ソース公開されてる筈だから見てみれば?
外部から引っ張って来てるだけかもしれないけど。
635デフォルトの名無しさん:2005/12/12(月) 11:19:59
>>634
その通り
636デフォルトの名無しさん:2005/12/12(月) 11:20:49
>>631
ActiveX
637デフォルトの名無しさん:2005/12/13(火) 11:08:41
質問です。
環境は WinXP Pro SP2、VC++.NETです。

isalpha(int)の引数にEOFまたは0x00〜0xFF以外の値を与えると、
Debug版で走らせた場合にassertが返されて終了してしまいます。
これを回避する方法はないのでしょうか?

私としては、isalphaには「引数がアルファべットであれば真」、そうでない場合は
「引数がEOFまたは0x00〜0xFFの範囲であろうとなかろうと偽」を返すようであって
欲しいのです。isalphaを呼び出す前に、引数がEOFまたは0x00〜0xFFの範囲に
あるかどうか、わざわざ自前で調べなければならないのでしょうか?

よろしくお願いします。
638デフォルトの名無しさん:2005/12/13(火) 11:16:54
>>637
>isalphaを呼び出す前に、引数がEOFまたは0x00〜0xFFの範囲に
>あるかどうか、わざわざ自前で調べなければならないのでしょうか?
その通り(7.4の1, ISO/IEC 9899:1999)。
もし必要なら、自分で関数を書くといい。
639637:2005/12/13(火) 11:56:07
>>638
ありがとうございます。(;´Д`)
640デフォルトの名無しさん:2005/12/13(火) 17:54:37
いかに引数の型がintだろうと、普通はchar範囲の値を渡すものだが
ワイド文字版でもないのにchar範囲に入らない値を渡すなんてただのバカ
641デフォルトの名無しさん:2005/12/13(火) 22:08:33
クラス内でenumして使ってる定数があるんですけど、
このクラスのインスタンスをメンバにもつクラスのさらに上のクラスでも
この定数の値を使いたいのですが、なにかいい方法はないでしょうか?

class CHoge{
enum{
HOGEGE,HOGEGEGE,HOGEEEEEEEEEEEEEEE,
}
}

class CHoger{
CHoge mHoge;
}

↓enumの値を使いたいクラス
class CHogest{
CHoger mHoger;
}

というわけなんです。
よろしくおねがいします。
642デフォルトの名無しさん:2005/12/13(火) 22:17:06
>>641
そのenumをpublicにして
CHoge::HOGEGEなどと使う。
643デフォルトの名無しさん:2005/12/13(火) 22:39:39
>>642
それだとCHogerではいいんですけど、
CHogestで困ってしまうという状況です。
644デフォルトの名無しさん:2005/12/13(火) 22:42:20
別に困らない。
645デフォルトの名無しさん:2005/12/13(火) 22:46:15
>>643
なぜ困るのかその理由が書かれない限り
644のように答えるしかないんだが
646デフォルトの名無しさん:2005/12/13(火) 22:48:08
他のクラスで使うなら
そのenumをpublicにするか
使うクラスをCHogeでfriend指定するかしかない
普通のメンバと同じ話だよ
647デフォルトの名無しさん:2005/12/13(火) 22:51:33
CHogest::HOGEGE
できれば↑こんな感じで呼びたかったんですよ。
上からみればCHogeって誰?って感じじゃないですか?
648デフォルトの名無しさん:2005/12/13(火) 22:53:25
>>647
だったら、CHogestの中で宣言すればいい。
649デフォルトの名無しさん:2005/12/13(火) 22:57:32
>>647
CHogeが誰?なのに、CHogeのメンバを使おうとするのはこれ如何に?
650デフォルトの名無しさん:2005/12/13(火) 22:57:58
>>647
バカだこいつ
651デフォルトの名無しさん:2005/12/13(火) 23:35:08
えーとですね。
クラスを使う人にはCHogestクラスだけを使ってほしいわけですよ。
でも、enumで宣言されてる定数はCHogeでもCHogestでも使いたいわけですよ。

>>648
CHogestで宣言したら、CHogeで使えないじゃないですか。

まとめるとこんなですよ。

CHoge     enumの宣言がされていて、enumの値をクラス内で使っている
CHoger    CHogeクラスをメンバにもち、CHogeで宣言されているenumの定数が必要
CHogest   CHogerクラスをメンバにもち、CHogestクラスを使う人間はCHogeで宣言されているenumの定数が必要

って状態によくなるわけですよ。
652デフォルトの名無しさん:2005/12/13(火) 23:41:39
>>651
わざわざまとめなくても分かってないのは君だけだから
653デフォルトの名無しさん:2005/12/13(火) 23:42:11
>>651
CHogerでCHogeのenumと同等なものを再定義する。
というのが「正しい」解決策だと思う。
654デフォルトの名無しさん:2005/12/13(火) 23:43:48
>>651
>CHogestクラスを使う人間はCHogeで宣言されているenumの定数が必要
それなら>>649だって
結局>>650
655デフォルトの名無しさん:2005/12/13(火) 23:46:05
>>651
場合によってはenumを名前空間レベルで定義するのがいいかもしれない。
656デフォルトの名無しさん:2005/12/13(火) 23:46:06
>>653
正しくない
657デフォルトの名無しさん:2005/12/13(火) 23:46:54
>>656
なんで?
658デフォルトの名無しさん:2005/12/13(火) 23:47:08
名前空間hogeの中にその列挙とCHoge/CHoger/CHogestを平等に入れる。
これでどうだ。
659デフォルトの名無しさん:2005/12/13(火) 23:49:09
>>657
それぞれの列挙型同士は別の型。
たとえばCHoge内の列挙型とCHogerの列挙型同士の暗黙的な変換はエラーになる。
変換演算子を作ればよいという問題ではない。
どのクラスにあるかという違いだけで同じものを表す列挙が複数存在するというのが問題。
660デフォルトの名無しさん:2005/12/13(火) 23:49:44
>>657
Hoge の enum に新しい値を入れたあと Hogest の enum の更新を忘れるかもしれないとかじゃ?
同じ名前空間に入れないんだったらもう include するしかないな
661デフォルトの名無しさん:2005/12/13(火) 23:50:39
例えばメンバに変数 x をもつ TEST というクラスがあったとして、

TEST test1, test2;

test1.x = 1;
text2.x = 3;

などと x を色々と変更した場合に、引数が x と等しい時に、
その TEST 型のオブジェクトのポインタを返すような関数は作れないでしょうか?

色々考えたんですがどうにも思いつきません。
どうか力をお貸し下さい。
662デフォルトの名無しさん:2005/12/13(火) 23:50:43
>>659
あぁ、そういう意味か
漏れがアホだった
663デフォルトの名無しさん:2005/12/13(火) 23:51:12
CHogest と CHoge を互いに隠蔽する必要があるなら、
enum を両者とは独立に定義しなきゃならんのは自明だ
664デフォルトの名無しさん:2005/12/13(火) 23:53:55
>>659
いやこの場合は違うんじゃまいか?

CHogeとCHogerは独立したクラスであって、
(使い古された例で言えば)CHogerはCHogeを隠蔽しているのだから
要求を満たすために、必ずしもCHogeに依存する必要はない。
仮にCHogeを別の(同じ要求を処理する)クラスに変えた際にインターフェースを変更しないためには
CHogerに別の列挙型があってしかるべきだし、CHogeと同じ物である必要もない。
あくまで別の列挙型として扱い、明示的な変換をすればいいだけの話かと。
665デフォルトの名無しさん:2005/12/13(火) 23:54:29
>>661
あいまいすぎて、力の貸しようがない
もっとまともな仕様を書け
666デフォルトの名無しさん:2005/12/13(火) 23:54:36
って書いてたら>>663に書かれてしもた(´・ω・`)
667デフォルトの名無しさん:2005/12/13(火) 23:55:02
>>661
struct TEST {
void f(int arg) { if (arg == x) { /* イクワヨアナター */ throw new TEST; } }
int x;
};

main()
{
TEST test1;
test1.x = 0;
try {
test1.f(0); // バッチコーイ
}
catch (TEST* test) {
// キタ━━━━━━(゚∀゚)━━━━━━ !!
}
668デフォルトの名無しさん:2005/12/13(火) 23:55:17
>>659
>それぞれの列挙型同士は別の型。
>たとえばCHoge内の列挙型とCHogerの列挙型同士の暗黙的な変換はエラーになる。
>変換演算子を作ればよいという問題ではない。
そんなことは分かっている。

>どのクラスにあるかという違いだけで同じものを表す列挙が複数存在するというのが問題。
CHogerのインターフェースからCHogeを隠蔽している限り、二つのenumは
たまたま同じものを表しているだけで、これはCHogerの実装の詳細。
669668:2005/12/13(火) 23:56:34
ごめん。たくさんかぶった。
670デフォルトの名無しさん:2005/12/14(水) 00:00:38
>>667
返すところを投げてどうする
671661:2005/12/14(水) 00:08:05
>>665>>667
説明力が足りなくてごめんなさい


あるクラス型のオブジェクトを大量に作ったときに、
それらのオブジェクト群の中から、メンバ変数 x の値が、例えば 3 のものを抜き出したいんです。
672デフォルトの名無しさん:2005/12/14(水) 00:08:13
static const intの代わりとしてのenumなら
class CHogest{
enum {HOGE = CHoge::HOGE}
};
とか
673651:2005/12/14(水) 00:09:21
えーと・・・つまり・・・
CHogeのヘッダあたりにドスンとおいてしまうしかないって感じでいいでしょうか?
674デフォルトの名無しさん:2005/12/14(水) 00:09:26
>>671
find_if使え
675デフォルトの名無しさん:2005/12/14(水) 00:10:42
>>673
互いに隠蔽している以上、CHogeにもCHogerにもCHogestにも
個別のenum定義を置くのが最善策
676デフォルトの名無しさん:2005/12/14(水) 00:16:51
>>674
ありがとうございます!
677デフォルトの名無しさん:2005/12/14(水) 00:27:38
少しわからないことがあるので教えていただきたいのですが、
printf("数値をいれてください:");のような文の、「:」について
なのですがこのスレで教えてもらったものをコピーで使うと
実行したときに改行されるのですが、自分で「:」を入力すると
「:」が出力されるだけで改行されません、どなたかわかる方
いたらよろしくお願いします。
678デフォルトの名無しさん:2005/12/14(水) 00:36:43
まさか\nの有無じゃあるまいな
679デフォルトの名無しさん:2005/12/14(水) 00:37:01
>>677
またまたぁー
680デフォルトの名無しさん:2005/12/14(水) 00:40:43
>>677
双方のソースを晒せ。
681デフォルトの名無しさん:2005/12/14(水) 06:40:31
>>673
CHogeでもCHogerでもCHogestでもない別のクラスでpublicメンバとしてenumしてpublic継承すれば?
682デフォルトの名無しさん:2005/12/14(水) 16:01:36
bool型の変数をfalseならtrueにtrueならfalseにする方法を教えてください

bool b = false;
b = ~b; // b = trueにしたい

としたらコンパイラに警告を受けました。
683デフォルトの名無しさん:2005/12/14(水) 16:03:01
>>682
b = !b;
684682:2005/12/14(水) 16:03:54
あ、なるほど。
685デフォルトの名無しさん:2005/12/14(水) 16:07:13
なんでそんなにバカなの?
686デフォルトの名無しさん:2005/12/14(水) 19:29:33
思考が停止してるから。
687デフォルトの名無しさん:2005/12/15(木) 22:49:51
死ねッ!
688デフォルトの名無しさん:2005/12/15(木) 22:59:24
void func(const string& str);

とかすると、funcの中でstrを変更できない、ということですよね

void func(string& const str);

とするとどういう意味になるのでしょうか?
689デフォルトの名無しさん:2005/12/15(木) 23:26:28
それってコンパイル通る?
690デフォルトの名無しさん:2005/12/15(木) 23:44:52
VC++.net2003で警告が出たけど通りました
(warning C4227: 旧形式が使用されています : 参照の修飾子は無視されます)
旧形式というのがよくわかりません。この書き方だと参照になっていないのでしょうか?

コードはこんなのです

#include <iostream>
#include <string>
using namespace std;

void func(string& const str){
str.append("test");
cout << str << endl;
}

int main(){
func(string("test"));
return 0;
}
691デフォルトの名無しさん:2005/12/16(金) 00:10:55
>>690
ISO確認したけど、今は文法上誤りっぽい。
692デフォルトの名無しさん:2005/12/16(金) 00:17:53
C++じゃ参照は別名と違って参照先を変えられないしね。
693デフォルトの名無しさん:2005/12/16(金) 01:31:39
>>690
const string& または string const&。
一時変数を束縛させるのだから、constは前に持ってこないと。
694デフォルトの名無しさん:2005/12/16(金) 01:36:51
#include <iostream>
#include <string>

using namespace std;

void func(string& s) {
 string tmp;
 s = "hoge";
 __asm {
  lea eax, tmp
  mov s, eax
 }
 s = "foo";
 cout << tmp << endl;
}

int main() {
 string str;
 func(str);
 cout << str << endl;
}
695デフォルトの名無しさん:2005/12/16(金) 15:21:30
描画がしたくて色々調べたところ、
UNIX系ではnxgraph.hを使って描画ができるらしいですが
WindowsXPではどうすればできるのでしょうか?
696デフォルトの名無しさん:2005/12/16(金) 15:24:41
#pragma once
#include "クラスBが定義されたファイル"
クラスAの定義

というソースと

#pragma once
#include "クラスAが定義されたファイル"
クラスBの定義

というソースを使う場合にクラスAのデータメンバにクラスBのインスタンスやポインタ、
クラスBのデータメンバにクラスAのインスタンスやポインタを持とうとするとコンパイル時にエラーが出てしまいます
関数の時はプロトタイプ宣言を使えるんですがクラスの場合はどうしたらいいのでしょうか?
697デフォルトの名無しさん:2005/12/16(金) 15:26:58
前方宣言
698デフォルトの名無しさん:2005/12/16(金) 15:54:09
>>695
windows.h

>>696
関数同様、宣言だけ先に置くことができる。但し、不完全型となるのでポインタまたは参照のみ定義することになる。
699695:2005/12/16(金) 16:37:22
>>698
ありがとうございます!!早速試してみます。
700デフォルトの名無しさん:2005/12/16(金) 16:45:56
>>698
プロトタイプ宣言って名前だけで探してましたorz
ありがとうございます
701デフォルトの名無しさん:2005/12/16(金) 17:20:58
class test{
};
class testA:public test{
};
class testB:public test{
};

main(){
test* pt = &testA;
}

この場合はtestクラスのポインタの中にtestAが入っていますが
Aが入っているのかBが入っているのかわからないものとして
どちらが入っているかスマートに判定する方法はありますか?
702デフォルトの名無しさん:2005/12/16(金) 17:29:24
>>701
まずはそもそも根本的な解決として、
仮想関数を使ったポリモーフィズムで何とかならないか考えろ。
(どちらが入っているかなんて考えないようにできる)

それで駄目ならdynamic_castを使うことを考えろ。
どうしても駄目なら最後の手段typeidを使うのも仕方がない。
703デフォルトの名無しさん:2005/12/16(金) 17:51:12
>>702
極力仮想関数は使いたくないなぁと思ってたのですが
typeidとどっちを使おうかこれから迷ってみます
どうもありがとうー
704デフォルトの名無しさん:2005/12/16(金) 18:03:55
>>703
そんなに仮想関数を嫌がる理由もないだろうに。

それに動的なtypeidはポリモーフィズムを前提としているから、
testに仮想関数が1つもないとtypeid (*pt)は常にtypeid (test)を返してしまい意味ないからな。
705TOM:2005/12/16(金) 18:09:00
こんなこっとてできる?

map<key, value>で、mapのkeyがpair<class a, class b>ってできるのかな?
706デフォルトの名無しさん:2005/12/16(金) 18:11:14
>>705
比較する方法さえ与えればできる。
707デフォルトの名無しさん:2005/12/16(金) 19:07:56
>>703
>極力仮想関数は使いたくないなぁと思ってたのですが
超衝撃的発言
708703:2005/12/16(金) 19:27:31
>>704
>>707
何か恥ずかしいことを言っちゃったのかしら・・・(*´A`*;)
とにかくこれからは、何でも変に嫌わないで中身が見えてくるまでは使ってみることにします。
いっぱいレスありがとございました
709デフォルトの名無しさん:2005/12/16(金) 22:06:10
アプリケーションの実行時パスの取得の方法はどうすればいいんでしょうか?
iniファイル読み出そうと思ったんですが、フルパス指定じゃないと駄目みたいなんで…。
環境はwindowsXP、VC.NETです。
710デフォルトの名無しさん:2005/12/16(金) 22:09:26
>>709
コンソールならargvを見る
Win32APIを使うならGetModuleFileName
711デフォルトの名無しさん:2005/12/16(金) 22:17:47
仮想関数使わなきゃクラス継承なんてやってらんね
712デフォルトの名無しさん:2005/12/16(金) 22:35:22
>>710
ありがとうございます。
きちんとできました。
検索ワードが悪かった見たいでなかなか見つからなかったので助かりました。
713デフォルトの名無しさん:2005/12/17(土) 00:04:35
>>703
それは禁じ手。
お前型に不都合があるたびにそうやって誤魔化し続けるのか?
つvoid*使え
714デフォルトの名無しさん:2005/12/17(土) 00:49:20
>>713
そんな餌に釣られないクマー
715デフォルトの名無しさん:2005/12/17(土) 05:23:02
WindowsのC++で質問です。
CreateThreadでスレッドを新しく作成し、そのスレッド内で例外が発生した場合、
スレッド内でcatchされなければ、例外はスレッドの作成元へ伝搬されるのでしょうか?
そのままunexpected->terminateが呼び出されてしまうのでしょうか。
716デフォルトの名無しさん:2005/12/17(土) 08:06:22
グラはファミコン以下ですが、
個人的には結構面白いサッカーゲームです。
一人用ですが。

某雑誌に掲載されてた記事
「一試合3分から楽しめる本格派サッカーゲーム。
グラフィックは簡素だが、やり込み派にはオススメしたい一本。
 
こだわりのカスタマイズが面白い。
簡素なグラフィックとは逆に、戦術面は細部まで作りこまれている。
システムやプレスのON/OFFから、なんと選手一人一人のポジショニングまで設定可能だ。
こだわりのチーム作りが楽しめる。」

フリーゲームなんですが、管理人がいないらしいので、
サッカー好きでプログラムのできる方居たら助けてやってください。
このゲームで対戦できたら面白いと思うので

RolePlaying Eleven
http://ime.st/www.geocities.co.jp/Bookend-Kenji/2279/

最近立った2chスレ
http://game10.2ch.net/test/read.cgi/netgame/1134392861/
717デフォルトの名無しさん:2005/12/17(土) 09:34:04
マルチ宣伝UZEEEEEEEEEEEEEEEEEE!!11!!!!!!
718デフォルトの名無しさん:2005/12/17(土) 20:25:50
遅レスだけど

>>641
ママ!これコンパイルできたよ!ママー!
class CHoge {
public:
 enum HOGE {
  HOGEHOGE
 };
};

class CHogest : public CHoge {
public:
 using CHoge::HOGE;
};

int main() {
 CHogest::HOGE hoge = CHogest::HOGEHOGE;
}

gcc3.4。文法的に正しいのかは知らん。本来は不正だたらゴメン。
719デフォルトの名無しさん:2005/12/17(土) 20:34:52
C言語のprintf()関数についてですが10進数を表示する%dと16進%x,8進%oがありますが。
2進数を表示するにはどうすればいいのでしょうか?
720デフォルトの名無しさん:2005/12/17(土) 20:41:17
>>710
環境によっては %b が存在する可能性もあるけど、
基本的には、一度文字列に変換するしかない。
721720:2005/12/17(土) 20:43:34
つーか俺はなんでいつも余計な事を言うんだ(;´Д`)
しかもレス番間違えてるよ!

>>719
> 環境によっては %b が存在する可能性もあるけど、

ただし、俺は見た事ない。
722719:2005/12/17(土) 20:52:28
>>720-721
ありがとうございました。

もし%bが存在しなければ自分で工夫して変換するということなんですね。
何とかしてみます
723デフォルトの名無しさん:2005/12/17(土) 20:58:51
C++ならstd::bitsetがあるんだがな。
724デフォルトの名無しさん:2005/12/17(土) 21:02:41
>>718
神降臨!
ありがたく使わせていただきます!
725デフォルトの名無しさん:2005/12/17(土) 21:03:46
C++ならstd::bitsetがあるんだがな。
726デフォルトの名無しさん:2005/12/17(土) 21:03:58
そりゃ継承してるならusingでいい話だけど、
合成じゃなかったの?
727デフォルトの名無しさん:2005/12/17(土) 21:08:26
>>726
あ、そうだ。
駄目じゃんw
728デフォルトの名無しさん:2005/12/17(土) 21:12:54
>>718
     人    
    (__)  ウンコー
   (__)           人 ガッ
   ./) ・∀・)')    -=≡●<  >__Λ∩
(( /     / ))          V`Д´)/
  し――J               / <<718

729719:2005/12/17(土) 21:59:23
重ね重ねで申し訳ないですが、2進数に変換できるよう書いてみたんですが
このコードだと数値が1の場合1111という風になってしまってしまいます。
色々試行錯誤してみましたがわからなかったので何かアドバイスお願いします('A`)

#include <stdio.h>

void print(short);

int main(void)
{
int ret;
ret = 0;
short std = 10;

std |= 0x0003;
print(std);
std &= 0xFFF1;
print(std);
std ^= 0x000E;
print(std);

return ret;
}

730719:2005/12/17(土) 22:00:17
void print(short st)
{
int i, j, k;
int tmp[16];
printf("%d\n", st);
for(i = 0, k = st; ; i++)
{
tmp[i] = k%2;
if(k < 2)
{
for(j = 0;j <= i; j++)
{
printf("%d", tmp[j]);
}
break;
}
k /= 2;
}
printf("\n%x\n", st);
}
731719:2005/12/17(土) 22:02:54
>このコードだと数値が1の場合1111という風になってしまってしまいます。
変数の値が1の場合、0001じゃなくて1111という風になってしまってしまいます。
732719:2005/12/17(土) 22:12:14
むしろ値が1の場合わざわざ0001にしなくてそのまま1を表示でいい気がしてきた(´・ω・`)
733デフォルトの名無しさん:2005/12/17(土) 22:12:54
>>731
俺がprint(1);を試してみたらきちんと1と表示されたが。

ちなみにtmpをchar配列にしてtmp[i] = k%2;をtmp[i] = '0' + k & 1;にし、
さらに配列の末尾に'\0'を加えればprintf("%s"やputsで出力できるようになる。
734719:2005/12/17(土) 22:18:57
>>733
('A`)・・・

その手があったかorz

回答有難うございました
735718:2005/12/17(土) 22:22:45
今年最高の脱力っぷりorz
736デフォルトの名無しさん:2005/12/17(土) 22:33:17
>>719
こんなのはどう?負数の扱いがどうなのかは問題だが。

void print(short st) {
int i;
char c[sizeof(short)*4+1];
for (i = 0; i < sizeof(short)*4; ++i) {
if ((st >> (sizeof(short)*4-i-1))&1) c[i]='1'; else c[i] = '0';
}
c[i]='\0';
printf("%s\n", c);
}
737デフォルトの名無しさん:2005/12/17(土) 23:17:42
つーか、再帰使えよ。

static void print_body(short n) {
if(n != 0) {
print_body(n >> 1);
putchar('0' + (n & 1));
}
}

void print(unsigned short n) {
if(n != 0) {
print_body(n);
} else {
putchar('0');
}
}
738デフォルトの名無しさん:2005/12/17(土) 23:18:42
あ、print_body の方で unsigned 忘れた。
739デフォルトの名無しさん:2005/12/17(土) 23:19:17
>>737
手動で再帰をループへ展開してしまえ。
740デフォルトの名無しさん:2005/12/17(土) 23:23:36
テンプレートについて少しご教授願います
[CAry.h]
template <class Type> class CAry {
public:
CAry& operator=(const CAry& x); @
Type& operator[](int i); A
};

[CAry.cpp]
#include "CAry.h"

template <class Type>CAry<Type>& CAry<Type>::operator=(const CAry& x)
{
〜〜〜〜〜
}
741デフォルトの名無しさん:2005/12/17(土) 23:24:58
すいません Enterする時にシフトが手に当たってしまいました・・・・

AをCAry.cppで定義したいのですが関数定義の仕方が解りません
宜しくお願い致します。
742デフォルトの名無しさん:2005/12/17(土) 23:26:37
>>719
void print(unsigned short n) {
 if(n != 0) {
  int i;
  for(i = 0; (n & 0x8000) == 0; i++)
   n <<= 1;
  for(; i < 16; i++, n <<= 1)
   putchar('0' + ((n & 0x8000) != 0));
 } else
  putchar('0');
}

こういうのはどうよ?
効率は少し悪いかもしれないけど、メモリは節約できる。
743デフォルトの名無しさん:2005/12/17(土) 23:28:33
>>741
そもそも、テンプレートの実装は .cpp に書いてはいけない。
宣言と実装を分離したいのであれば宣言の後に書く必要がある。
ファイルに分けたければ、それを宣言の後でインクルードすべし。
744740&741:2005/12/17(土) 23:35:29
>>743
申し訳ないのですがよく解りません。。。 一般的にテンプレートはヘッダに関数定義など全てを記述するってことですか?
2行目もよく解りません 宣言と実装を分離したいのですがその宣言の後とは
定義をそのまま書くってことですか?
745デフォルトの名無しさん:2005/12/17(土) 23:47:40
>>744
>一般的にテンプレートはヘッダに関数定義など全てを記述するってことですか?
C++ の仕様上は .cpp に実装を分離するためのキーワード export ってのがあるんだけど、
これをサポートしてるコンパイラってのがほとんどないので、
実際にはテンプレートはヘッダに関数定義など全てを記述する必要がある。


>2行目もよく解りません
ここでいう「宣言」ってのは class CAry 全体の宣言のこと。
つまり、template <class Type> class CAry { ... }; のこと。
そして「実装」ってのは、ここではそれぞれのメンバ関数の実装のこと。

(1) の実装がちゃんと書けてるんだから、
(2) の実装も同じように書けるはず。
746740&741:2005/12/17(土) 23:58:33
>>745
VCを使って書いてます。右クリックでクラスを新規作成するとhとcppができるのでそのままcppに定義使ってますがexportってキーワードはないようでした。

@はテキストそのままとってきただけです。
テキストにAはhに記述してあったのですがcppの方に記述できるなら書きたいと思ったので質問してみました。
@のcpp側ですがなぜ2個目の<Type>がいるのかがよく解りません。
Aの実装も書いていただけますか?
747デフォルトの名無しさん:2005/12/18(日) 00:08:33
>>719
sprintf(foo, "%x", bar);してから
http://pc8.2ch.net/test/read.cgi/tech/1134128493/508
748デフォルトの名無しさん:2005/12/18(日) 00:13:04
749デフォルトの名無しさん:2005/12/18(日) 00:14:01
>>746
クラステンプレートの関数を .cpp で定義できる条件は、

1. export がサポートされている。
2. その関数がその .cpp 内でしか使われない。
3. 特定の型に特殊化されている。

場合のみ。
それ以外では .cpp で定義すると使えない。
この場合 1, 3 はないので、
その本が 2 の条件を満たしていれば本は間違ってないし、
満たしていなければ、その本は間違っているので
本のタイトルと作者を速やかに提示すべし。


2つ目の奴の実装は、
 template <class Type> Type& CAry<Type>::operator[](int i) { ... }
となる。
(1) と (2) から大体のパターンが分かると思う。

(1) で2つ目の Type が必要なのは、
この地点までの構文解析では
まだこの関数が CAry<Type> のメンバ関数だと分からないので、
テンプレート引数を省略できないから。
CAry<Type> のメンバ関数だと分かった後にある引数の地点では、
<Type> を省略できている(暗黙に <Type> が指定される)。
750デフォルトの名無しさん:2005/12/18(日) 00:20:27
あ、もう1つ条件があった。

4. .cpp をコンパイルせず、.cpp をインクルードして使う。

でも、こんなことするなよー。
あとは、2. の亜種として、どこでも使われないってのもあるか。
751740&741:2005/12/18(日) 00:48:46
ttp://gamushara.net/
2のそのcpp内でしか使われてないってことではないみたいですので
5MBの1458,1459に見ているページをうpしましたw
本は 柴田望洋プログラミングシリーズ プログラミング講義C++ です

なるほど リストを作る時と同じですね そういうことも書かれてませんでしたw
後でhppについて調べてみます・・・
752デフォルトの名無しさん:2005/12/18(日) 00:49:31
>>751
おいおい何考えてんだよ!
753デフォルトの名無しさん:2005/12/18(日) 00:58:59
>>751
うーむ。
iostream.h も使われていて、拡張子が .c なんて書いてある古い本だから、
この頃だと仕様がこんなだったとかあったのかな??
少なくとも、今ではコンパイルは通っても、リンクで失敗するはず。

一応 tary.c で template Test<int>; と書いて
明示的にインスタンス化すれば通るけど、
使う型が予め決まってないとこうはできないので
テンプレートの意義が大幅に減る。
使う型を制限したいときにはいいかもしれないけど、
インライン関数は結局ヘッダに書かないといけなくて、
それのみを使う分には制限をかけられない点には注意。

>>752
まぁまぁ。
754740&741:2005/12/18(日) 01:14:49
そうですか あ、そういえばこの仕様は古いので#include <iostream>とusing namespace stdをするのを忘れるなとは言われました・・・・すいません。
ついでにhppとはただのヘッダですか?
755デフォルトの名無しさん:2005/12/18(日) 01:23:55
>>754
そう。C++ のヘッダ。
でも、別に h でも構わない。
開発環境が何か h か hpp かで機能や動作に差があるのであれば
hpp にした方がいいかもしれないけど、
そうでもなければ別に h でも構わないと思う。
756デフォルトの名無しさん:2005/12/18(日) 01:28:07
iostream.h はまだしも、.c はかなり古い。古すぎる。
別の本かサイトをあたってみるのも手かと。
757740&741:2005/12/18(日) 01:29:26
どうもでした オペレーター関数はヘッダに書くことにしてみます
758デフォルトの名無しさん:2005/12/18(日) 06:31:41
>>753
× template Test<int>;
○ template CAry<int>;

まあ、分かると思うが。
759デフォルトの名無しさん:2005/12/18(日) 09:12:46
STLじゃなくてテンプレートについて初歩から詳しく解説してる本ってないでしょうか?
プログラミング言語C++やModernC++は理解できませんでしたorz
760デフォルトの名無しさん:2005/12/18(日) 09:44:47
761デフォルトの名無しさん:2005/12/18(日) 11:23:18
>>760
参考になりました。ありがとうございます
762デフォルトの名無しさん:2005/12/18(日) 11:38:03
環境MSVC++2003.NET Excel2000での激しく環境依存の質問です。
恐らく、C++とは直接関係ないかもしれません。

Excelのセル内の値で取り消し線が書いてある文字を取り除こうとしています。
セル内の値で、取り消し線の引いてある文字とそうでない文字を判定するのに
どうやらIRengeオブジェクトからGetCharacterメソッドを使用して1文字1文字
ICharacterオブジェクトを取得してから、IFontプロパティを調べなければいけないようです。
これを使用して単純にループで処理を実行した場合、非常に処理が重くなってしまいます。
SAFEARRAYで配列でセルの情報を取得した場合は、IFontの情報は得られません。
一セル単位で1文字1文字判定するしか方法は無いのでしょうか。
763デフォルトの名無しさん:2005/12/18(日) 12:01:41
VBAで判定ルーチンを書いて、それを起動するってできないかな……

あー、やってできないことはなさそうだ。
・VBAの入ったブックを用意する。
・ターゲットファイル名、出力ファイル名の書かれた設定ファイル(固定名)を用意する。
・上記ブックを起動する。
・出力ファイルから結果を取り出す。

VBAの処理自体が遅いってんならお手上げだが。
764デフォルトの名無しさん:2005/12/18(日) 12:10:38
>>763
まずは回答ありがとうございます。
残念ながらVBAで同等の処理を行った結果、処理が遅くて使い物にならなかった為
C++とCOMで操作しています。

同等のアルゴリズムでパフォーマンス比較をすると、30800行×70列のデータで
完了時間 VBA  7時間40分
     C&COM 4時間弱
で終わっています。
目標は、約1時間で処理が完了することです。
765デフォルトの名無しさん:2005/12/18(日) 12:36:09
すいません。
asctime()
ってどんな仕様なんでしょうか?
使う上で何か問題ありますでしょうか?
日付系の関数なので自分の想定してない問題がありそうでこういう質問でもうしわけありません。
766デフォルトの名無しさん:2005/12/18(日) 12:43:56
>>762
取り消し線があるかどうか判定する必要はないと思うのだけど。
無条件に全ての文字に対して「取り消し線はない」という書式を設定すれば少しは時間短縮にならないか?
767764:2005/12/18(日) 12:50:02
悔しいのでCOMにアクセスする処理と、取り消し線判定ロジックを分離。
別スレッドで管理することに。しかし、結果ほとんど変わらず。
CPUがHT対応なので、速度に利くと考えましたが意味なしでした…。

IFontオブジェクトの扱いが重いということは、取り消し線どころか
文字ごとの背景色などの操作もパフォーマンスの制約を受けるということになります。
ExcelのOLB設計者はそこまで馬鹿じゃないと思うので(事実、Excelの手操作でのフォント編集は
遅いとは思わないので)、何か他の方法での扱い方があるんじゃないかと思うのですが…。
768764:2005/12/18(日) 12:55:35
>>766
回答ありがとうございます。

>無条件に全ての文字に対して「取り消し線はない」という書式を設定すれば
既に文言が入っている文字に対して取り消し線を設定する、という意味でしょうか?
ちょっと詳しく教えて欲しいです。

※今やりたい処理は、たとえば「ABCDEFG」という文字があって、"CDE"に取り消し線が
引いてあった場合、「ABFG」という値にセルを書き換えるという操作を行いたいと思っています。
769デフォルトの名無しさん:2005/12/18(日) 13:00:58
>>765
strftimeとセットで使うと吉
770デフォルトの名無しさん:2005/12/18(日) 13:27:55
>>769
すみませんまちがえました。
やりたいことは

通算秒→日付     mktime
日付  ←通算秒    localtime

のようなことをやりたいわけです。
2038年以降できないみたいですけど、いまのところそれは問題なさそうですし。
まあ、いいかなと思ってるのですが、これ、使っても問題ないでしょうか?
771770:2005/12/18(日) 13:34:10
馬鹿馬鹿俺の馬鹿w

通算秒→日付     mktime
日付  →通算秒    localtime
772766:2005/12/18(日) 16:33:23
>>768
すまん。その例で行くとABCDEFGはABCDEFGのままで単に取り消し線の書式だけ消したいのかと勘違いした。
773デフォルトの名無しさん:2005/12/18(日) 17:04:26
Excelの検索(置換)で、文字修飾を検索できれば一発なんだろうけどねぇ。
あれか、HTMLで保存してタグを探すか(無茶)。
774764:2005/12/18(日) 22:41:39
>>773
色々試してみましたが、選択肢は
・HTMLで保存してタグを探す ←どうも!
・XMLで保存して編集(但しExcel2000ではその機能は無い為、Excel2002以降)
・バイナリ解析

ぐらいしか思い当たりません。
どれも大変そうなので非常に萎えておりますが、一番有望なのがHTMLタグ解析です。
もうちょっと頑張って調べてみます・・・。

# バイナリ解析はOpenOfficeのサイトにフォーマット仕様書とソースがありました。
# これを精査して現アプリに組み込む気力が沸きません。
775デフォルトの名無しさん:2005/12/18(日) 22:56:33
じゃ、もう一つ選択肢。
・OpenOfficeでsxc形式で保存、実体はzipなので展開すると出てくるxmlファイル(達)を解析……
ダメだなw
776デフォルトの名無しさん:2005/12/18(日) 23:12:11
ファイルなんかに構造体を丸々コピーしてもそのまま受け取ることってできませんか?
777764:2005/12/18(日) 23:12:27
>>775
それでも、現段階では有力な選択肢になります・・・。
情報ありがとうございます。

そして、もうひとつ選択肢
・ExcelCreaterというライブラリパッケージ製品があって、それを購入

もう保守フェーズに移行しているのに、予算降りねぇよヽ(`Д´)ノ
778デフォルトの名無しさん:2005/12/18(日) 23:18:11
>>776
できます。バイナリを保存してバイナリで読み取って、memsetか何かで合わせてやるだけです。

但し、参照しているアドレスとかもそのままになっています。注意。
779デフォルトの名無しさん:2005/12/18(日) 23:23:34
>>778
レスありがとうございます。
例えば、

struct BIN{
char bin0;
char bin1;
char bin2;
char bin3;
char bin4;
};

として
BIN b;
write((char*)&b,sizeof(b));
※writeはファイルに書き出す関数

としてもバイナリにそのまま反映されるのでしょうか?
つまり、1バイト目にbin0の内容が必ずあって、5バイト目にbin4の内容が必ずあるということなのでしょうか?
780デフォルトの名無しさん:2005/12/18(日) 23:28:50
>>779
それくらい試せよ・・
781デフォルトの名無しさん:2005/12/18(日) 23:36:04
>>780
結果は駄目でした。
どういう法則かよくわからないのですが、0xCCとか0x00とか入ってしまうみたいです。
782デフォルトの名無しさん:2005/12/18(日) 23:45:00
つ #pragma pack
783デフォルトの名無しさん:2005/12/18(日) 23:45:35
>>780
駄目という結果がでましたが、
これは駄目という結果でいいのでしょうか?

構造体のファイル書き込みは、定義したバイトで綺麗にそろってるということはなく、
なにか間に入ってしまうということでいいのでしょうか。

これはそもそも構造体単位のファイル書き込みが駄目ということなのでしょうか?
それとも構造体単位で書きこんで構造体単位で読み込む分にはかまわないのでしょうか?

構造体単位でファイルに書き込んで読み込む方はまだ試していません。
784デフォルトの名無しさん:2005/12/18(日) 23:50:45
>>782
あ、デフォルトは8バイト単位になっているのですね。
ということは構造体→ファイル→構造体でやる分にはとくに問題は無いのですね。
#でも、結構危険ですねw
たしかにそうなっています。
ありがとうございました。
785デフォルトの名無しさん:2005/12/18(日) 23:58:23
使い方わかりました
#pragma pack(push,1)
struct BIN{

};
#pragma pack(pop)
ってやると間に何もはさまずにいけるわけですね。
でも、受け側のプログラムでもこれをやる必要があって
やっぱり構造体でファイルにコピーするのってアレなんですね。
786デフォルトの名無しさん:2005/12/18(日) 23:59:44
int* NEW()
{
  int *p;
  p = new int;
  return p;
}

という関数を作ったとして、

int *ptr = NEW();
delete ptr;

とすれば、ちゃんとメモリは解放されてるんでしょうか?
激素人な質問でごめんなさい
どうかお願いします。
787デフォルトの名無しさん:2005/12/19(月) 00:06:31
>>786
その通り。
788デフォルトの名無しさん:2005/12/19(月) 00:16:28
ありがとうございます!

あとひとつだけ。
逆のパターンなのですけども、

void DELETE(int* p)
{
  delete p;
}

という関数を作ったとして、

int *ptr = new int;
DELETE(ptr);

とした場合にもメモリ解放はなされるんでしょうか?
入門書読んでもこういう細かいところがさっぱりで、
どうかお願いします((o_ _)o))
789デフォルトの名無しさん:2005/12/19(月) 00:32:53
>>788
される。
「変数」がどういうものか理解していれば当然の挙動だと感じると思う。
790デフォルトの名無しさん:2005/12/19(月) 00:35:49
>>788
大事なのは「pがnewで確保したアドレスを指しているかどうか」だからね。
DELETEの引数pは「ptrの値をコピーした新たなポインタ」で、ptrとは異なる存在だけれど、
同じアドレスを指しているから目的は達成される。

ちなみにこの界隈にはこんな罠があるから注意。
void NEW(int* p)
{
  p = new int;
}

int* ptr;
NEW(ptr);
delete ptr; // ヤバスww
791デフォルトの名無しさん:2005/12/19(月) 00:40:33
>>790
**が無いって話?

>>788
メモリリーク検出コード

#include <crtdbg.h>

int* NEW()
{
int *p;
p = new int;
return p;
}

void DEL(int* p)
{
delete p;
}

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);

int *ptr = NEW();
DEL(ptr);

return 0;
}
792デフォルトの名無しさん:2005/12/19(月) 00:43:25
ところでこの↓コードってメモリリーク検出できないんだけど、

#include <crtdbg.h>
int* NEW()
{
int *p;
p = new int[1026];
return p;
}
void DEL(int* p)
{
delete p;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);

int *ptr = NEW();
DEL(ptr);

return 0;
}
配列を開放するときって
delete [] p;
じゃなきゃ駄目だったよねぇ?ちがうっけ?
793デフォルトの名無しさん:2005/12/19(月) 00:47:09
処理系によっては、たまたま意図した通りに動くこともある
・・・という、おなじみのパターンだと思うですよ。
794デフォルトの名無しさん:2005/12/19(月) 00:52:24
親クラス
class OYA {
public:
OYA *GetPtr();
}


class KO : OYA {

}

main () {
KO k;
k.GetPtr();
}

でk.GetPtr()の戻り値を親クラスのOYA*型ではなく、子クラスのKO*型として取得したいんですが、
取得時にキャストするとか、事前にオーバーロードでキャストして返す関数を宣言しておく以外に
もっときれいな書き方はないですか?
795デフォルトの名無しさん:2005/12/19(月) 01:06:46
>>794
つか、GetPtrが何を返すものかわからないんだけど。
796デフォルトの名無しさん:2005/12/19(月) 01:08:54
>>793
なるほど。
正しいのは
delete [] p;
でいいんですよね。
レスありがとうございます。
797デフォルトの名無しさん:2005/12/19(月) 01:23:34
>>795

return this;
です
798デフォルトの名無しさん:2005/12/19(月) 02:01:48
>>797
不毛な関数だな。
thisじゃわざわざGetPtrなんて作る意味あるのか?
799デフォルトの名無しさん:2005/12/19(月) 02:03:25
>>797
&k じゃダメなのか?
800デフォルトの名無しさん:2005/12/19(月) 02:09:15
>>799
同意
801デフォルトの名無しさん:2005/12/19(月) 02:25:48
すいません。細かい説明を省こうと思ってthisと言ってしまいましたが
実際はthisじゃないです。要は鎖状リストにするクラスを作るつもりで、
OYA *pNextとOYA *pPrevをメンバ変数に持っています。

class OYA {
private
OYA *pNext;
OYA *pPrev;
public:
OYA *GetNextPtr() { return pNext;}
OYA *GetPrevPtr() { return pPrev;}
}

class KO : OYA {
// 省略
 public:
void func();
}

int main () {
KO k;

// ここを毎回わざわざキャストせずに k.GetNextPtr->func()と書きたい
((KO *)k.GetNextPtr())->func();

return 0;
}
としていて、これを親クラスにして使いまわそうと思っているのですが、
GetNextPtr()、GetPrevPtr()を呼ぶたびに子クラスの方ではなく親クラスの型で返ってくるので
そのつどキャストするのが面倒くさいし、見た目にもごちゃごちゃしてわかりにくいので
もっとすっきりさせたいんです。
実は自分の知識不足で、こういう場合ほかに適切な構文でもあるのかと思ったのですが。。
802794:2005/12/19(月) 02:26:53
↑794です
803デフォルトの名無しさん:2005/12/19(月) 02:53:34
OYAにfuncつけるかKOにGetNextPtrつければええやん
804794:2005/12/19(月) 03:01:43
うーんせっかく親クラスと子クラスに分けてるのでできればそうしたくないのですが…
805デフォルトの名無しさん:2005/12/19(月) 03:47:40
>>804
だったらC++やめなよ。
806794:2005/12/19(月) 03:54:50
>>805わからないなら黙ってろ
807デフォルトの名無しさん:2005/12/19(月) 03:59:22
>>804
>>803で言われているように、OYAにvirtualでfunc()をつけるのが
一番まともだと俺も思う。でなければ、それは設計がおかしい。
808デフォルトの名無しさん:2005/12/19(月) 04:00:37
そうそう。>>794は頭がおかしい。
809807:2005/12/19(月) 04:07:48
>>808
ただの慣れだよ、慣れ。
810794:2005/12/19(月) 04:31:57
わかってる人いないのでしょうか?
素人ばっかりなのかな(´ρ`)
811デフォルトの名無しさん:2005/12/19(月) 04:36:52
>>810
お前が一番の素人。早く気づけバカ
812デフォルトの名無しさん:2005/12/19(月) 04:38:23
>>811
偽者に釣られるなよ・・・
813デフォルトの名無しさん:2005/12/19(月) 04:40:01
>>794に最適なソリューション
class OYA{
class KO *GetNextPtr2() { return (KO*)pNext;}
};
814デフォルトの名無しさん:2005/12/19(月) 04:46:08
バカばっかだな
>>794
covariant return typeでぐぐれ。現在のC++標準では仮想関数の戻り型
に関しては制限がゆるくなっており、以下のように記述できる。
あんたの持っているコンパイラが対応してるかどうかはしらん。

class OYA {
public:
  virtual OYA* GetPrevPtr();
}

class KO: public OYA {
public:
  virtual KO* GetPrevPtr();
}
815デフォルトの名無しさん:2005/12/19(月) 12:03:56
>>814
お前もな。 >803-804 をよく見ろ。
816デフォルトの名無しさん:2005/12/19(月) 12:09:47
>>814
既にVC2003でも対応されてんだな。コンパイル通るわ。
817816:2005/12/19(月) 12:14:52
いらんこと言うたわ。そういうわけで>>814氏ね。
818デフォルトの名無しさん:2005/12/19(月) 12:57:52
まあ、OYA に func 付けられないんなら、
>>814 にするか、dynamic_cast するしかないわな。
このままだと。
819デフォルトの名無しさん:2005/12/19(月) 14:51:20
>GetNextPtr()、GetPrevPtr()を呼ぶたびに子クラスの方ではなく親クラスの型で返ってくるので

子に、親を呼んで子クラスの型で返す GetNextPtr()、GetPrevPtr() を
用意すれば済むのでは?
820デフォルトの名無しさん:2005/12/19(月) 15:39:00
何回ループすれば気が済むんだ
821デフォルトの名無しさん:2005/12/19(月) 17:15:15
c言語でフォルダを作ることってできますか?
cygwinを使ってますがプログラムで作りたいです。
822デフォルトの名無しさん:2005/12/19(月) 17:29:07
そりゃ作れるさ。
823デフォルトの名無しさん:2005/12/19(月) 17:39:44
sys/stat.h の mkdir 関数だな。
まあ、system で mkdir を呼んでもいいけど。
つか、こっちのが楽。-p フラグ付けれるし。
824デフォルトの名無しさん:2005/12/19(月) 17:57:04
サンクス
825デフォルトの名無しさん:2005/12/19(月) 19:15:55
クラス関数利用してで複数回処理したい場合
クラス関数内でwhileするか、whileでクラス関数呼ぶのと
どちらがまともな実装なんでしょうか?
826デフォルトの名無しさん:2005/12/19(月) 19:41:06
>>825
ケースバイケース
827デフォルトの名無しさん:2005/12/20(火) 06:58:01
>>825
whileの内容がクラスのメンバとしてふさわしいかどうかがポイント。
オブジェクト指向的にどうか?
って話になる。
828デフォルトの名無しさん:2005/12/20(火) 15:01:34
いろんな型をpush,popって出来ますか?
shortの次にintを入れたりしたいのですが。
829デフォルトの名無しさん:2005/12/20(火) 15:22:53
>>828
どこにだ。
830デフォルトの名無しさん:2005/12/20(火) 15:27:33
std::vectorです。
831デフォルトの名無しさん:2005/12/20(火) 15:35:24
>>830
それは型情報も積みたいと言うことかな? やりたいことを詳しく。
つーか、std::vector<int>にshort値を入れること自体はできるわけだが。
832デフォルトの名無しさん:2005/12/20(火) 15:35:27
>>828
boost:any
833デフォルトの名無しさん:2005/12/20(火) 16:28:44
質問。
C++だと、構造体でもクラスの様にメンバ関数、private,public宣言などできる。
よって継承以外はクラスと同じ。使い道が有るのか。
有るとすればどのような場面か?
834デフォルトの名無しさん:2005/12/20(火) 16:37:24
>>833
functorなんかはstructで宣言する事が多くないか?
俺の場合は純粋にタイプ量で選ぶ。
835デフォルトの名無しさん:2005/12/20(火) 16:40:05
ファンクタや、Pointのような変数自身がインターフェースに
なるようなPOD型はstructにしてる
836デフォルトの名無しさん:2005/12/20(火) 16:40:07
構造体不要ってことかな?でも構造体のほうがクラスより先輩ですので敬ってください。
837デフォルトの名無しさん:2005/12/20(火) 17:25:21
データ構造にはstructを使い、オブジェクトにはclassを使うようにしている。
#斯くの如く曖昧ではある。
838デフォルトの名無しさん:2005/12/20(火) 19:37:22
typeidを使うプログラムはうんこ設計なんですか?
839デフォルトの名無しさん:2005/12/20(火) 19:40:32
うんこの定義による
840デフォルトの名無しさん:2005/12/20(火) 19:50:10
typeidは使うべきではないって事です。
841デフォルトの名無しさん:2005/12/20(火) 21:02:20
C++の演習をしているモレです。
C++のクラスの継承の仕組みは、具体的にどういう応用
を目的に想定しているのでしょうか?
例えば、クラスを、車と見立て、それが部品(データ)と、そ
れらを動かすアクチュエータ(関数)と見た場合、
そのクラスの派生クラスとは何でしょうか? 
より多くの部品と多くの機能を備えた高級車ですか?
842デフォルトの名無しさん:2005/12/20(火) 21:26:01
のりもの→くるま→えらいひとのくるま
843デフォルトの名無しさん:2005/12/20(火) 22:38:28
一般的なもの→一般性を崩したけどその分便利なもの
844デフォルトの名無しさん:2005/12/20(火) 22:56:39
車の例ではないけれど、たとえば標準C++ライブラリでは、
istream/ostreamからそれぞれファイル操作のifstream/ofstreamが派生している。
これのどこが嬉しいかというと、ファイルとの入出力の方法がcin/coutに<<や>>を使うのと全く変わらないということ。
しかもi/ostreamへのポインタ・参照にi/ofstreamへのポインタや変数を入れることもできる。
つまりあたかもi/ofstreamがi/ostreamであるかのように扱えるということ。
845デフォルトの名無しさん:2005/12/20(火) 23:00:47
基底クラスの設計がボロイと、派生クラスで無理をして、、最終的にちゃぶ台返しを喰らうことがある
846デフォルトの名無しさん:2005/12/20(火) 23:52:53
しかし規定クラスのしょぼさはちゃぶ台がひっくり返ってから気づくことが多い
847デフォルトの名無しさん:2005/12/21(水) 01:07:06
オブジェクト指向をたとえ話で人に説明するのって、なんか恥ずかしいよね?
848デフォルトの名無しさん:2005/12/21(水) 01:10:30
>>841
public継承とprivate継承では意味が違うのだが、
(よく使われる)public継承について言えば、
AからBを継承した場合の関係は、
「B is a A」と呼ばれる。日本語で言えば、「BはA(の一種)である」。

BはAにモノ(データや機能)を追加することもできるし、Aの実装(の一部)
を置き換える(オーバーライドする)こともできる。そしてAが提供している
範囲のインタフェースはAとBで共通である。

こうする利点は、似たようなものの差異を文脈に応じて選択的に無視することが
できることだ。
BとAの違いが重要でない場合(BをAとして扱いたい場合)は、そう扱える
(具体的にはAに対する処理を書けば、それはBも扱える。正しく書けばだが)。
BとAの違いが重要である場合は、無論AではなくBに特化した処理を書くことも
できる。
849デフォルトの名無しさん:2005/12/21(水) 01:16:03
>>847
犬クラスはワンと鳴きます。
850デフォルトの名無しさん:2005/12/21(水) 01:22:34
ザクやジムにキャノンインタフェースを実装すると、ザクウキャノン、ジムキャノンになります。
851デフォルトの名無しさん:2005/12/21(水) 01:48:51
デバッグビルドで実行したときはエラーが出ないのに、リリースビルドで実行するとエラーが出るようになるのは何ででしょうか?
assart()の類は使っていません。

っていうか何でメンバ変数がいつの間にか勝手にNULLになってたりするの?
ポインタの代入も何か変だし…。
852デフォルトの名無しさん:2005/12/21(水) 01:50:20
するとガンダムは試作機なはずなのに量産型のジムより高性能なのはどういう事?
853デフォルトの名無しさん:2005/12/21(水) 01:57:44
>>851
配列の範囲外アクセスでもしてんじゃね?
854デフォルトの名無しさん:2005/12/21(水) 02:02:29
ガンダムが強力なのはその名の通りガンダリウム合金の差だよ
855デフォルトの名無しさん:2005/12/21(水) 02:06:51
試作機の方が高性能って普通じゃね?
デザインからして違うから、量産レベルの試作機には見えないし。
856デフォルトの名無しさん:2005/12/21(水) 02:36:13
>>853
レスd

でも、おかしな所には配列は絡んでないので、それはないです。
857デフォルトの名無しさん:2005/12/21(水) 03:03:37
メモリ破壊は破壊したところと全然違うところで死ぬからナ
858デフォルトの名無しさん:2005/12/21(水) 03:51:43
変数の初期化忘れという線も。
859デフォルトの名無しさん:2005/12/21(水) 04:45:08
public継承の端的な特徴を表す現象として、スライシングがあるね。

派生クラスを基底クラスに代入した時で、派生クラスで増えた部分が
丸々削られる。それでも構わないのは、子 is 親という意味論がある
からだ。

もし、子 is 親でないのに、無理に継承を行った設計をすると、すぐに
スライシングの段階で問題が生じる。初歩的なデザインミスだが、OOP
を理解してないうちは、「継承なんか糞くらえ」と思ってしまうかもしれない。
これは慣れだね。
860デフォルトの名無しさん:2005/12/21(水) 06:22:01
D&Eによれば、スライシングに関してはBjarn Stroustrup自身がその有効性を
疑問視しとる。むしろそれを禁じる理由がないからそうしてるだけ、といった
ニュアンスだ。

やはり
・間接参照(ポインタorリファレンス)経由でアクセスする
・正しくvirtualを使う
のが基本ではあるだろう。
861デフォルトの名無しさん:2005/12/21(水) 07:05:13
>>860
ま、そうなんだよね。
結局、基底クラスの入れ物には、派生クラスの増分を入れる場所が
ないので、切り捨てているわけだ。

これが原因で、コンテナでOOPをしようとすると、問題が生じる。

それで、boost::ptr_vector、boost::shared_ptr、boost::scoped_ptr
などの使用が推奨される。単にstd::vectorにオブジェクトへのポインタ
を入れてもいいのだが、解放を忘れがちだし、かと言ってstd::auto_ptr
はコンテナには入れられない。
862デフォルトの名無しさん:2005/12/21(水) 18:06:01
ABCD abcd();

class ABCD
{
ABCD()
{
}
};
とやると当然なんですがABCD abcd();の部分でエラーが出ます。
久しぶりにC++を使ったのでクラスの定義をどこでやったらいいのか解らないんですが
どうやって解決するんでしたっけ;
863デフォルトの名無しさん:2005/12/21(水) 18:19:39
>>862
class ABCD
{
ABCD()
{
}
};
ABCD abcd();
864デフォルトの名無しさん:2005/12/21(水) 18:29:18
>863
書き忘れてたんですが実は
class ABCDないでグローバル変数abcdを使ってるんです・・・
865デフォルトの名無しさん:2005/12/21(水) 18:47:25
設計を一から勉強しなおそうな。
866デフォルトの名無しさん:2005/12/21(水) 21:14:19
>>864
宣言と定義を分ければいい話
そもそもヘッダにグローバル変数を定義するのはどうかと
ついでにABCD abcd();ってABCD型の返値を持つ関数宣言してるだけだろ

まとめると>>865
867デフォルトの名無しさん:2005/12/21(水) 21:17:42
>>844- 以下
dクス。C++のpotentialを感じますた。
まだまだ修行が足りないのもわかりました。
もっと学習しまつ。
868デフォルトの名無しさん:2005/12/23(金) 15:48:58
 
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/1332.txt

なぜ pb->hoge() で 2 2 が出力されるのでしょうか?
メンバ変数とメソッドの領域は別に取られているという事(?)で理解してOKですか?
…曖昧な理解をはっきりさせて下されーーーーーーー どうぞよろしくお願いしますです
869デフォルトの名無しさん:2005/12/23(金) 16:18:57
>>868
> pb = (struct B*)pa;
何これ?
870デフォルトの名無しさん:2005/12/23(金) 16:31:04
>>869
pa というポインタ変数を pb というポインタ変数に代入しています。
本来なら無茶なやり方と記述されていました
871デフォルトの名無しさん:2005/12/23(金) 16:46:31
>>870
>なぜ pb->hoge() で 2 2 が出力されるのでしょうか?
あなたの予想は?
872デフォルトの名無しさん:2005/12/23(金) 20:42:38
>>868
とりあえずmain関数の中にあるstructという語は全て省略可能。
873デフォルトの名無しさん:2005/12/23(金) 20:54:08
VC++の場合
pb->hoge();

void B_hoge(B* this_) { cout << "xの値:" << this_->x << " yの値:" << this_->y << endl; }
の呼び出しに等しい。
AとBのメンバ構成が等しいのでたまたま動いているが
pbが指してるのがAのインスタンスなので鼻から悪魔だし
コンパイラによっては違う挙動を示すかもしれない。
874デフォルトの名無しさん:2005/12/23(金) 21:50:18
はきだめC/C++下級者の質問箱
http://pc8.2ch.net/test/read.cgi/tech/1124256027/263

【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1131691023/868

C言語なら俺に聞け! Part 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/133
875デフォルトの名無しさん:2005/12/23(金) 22:51:30
鼻から悪魔って好きだなぁw
876デフォルトの名無しさん:2005/12/23(金) 22:58:11
イディオムですから
877870:2005/12/23(金) 23:01:10
>>871
他スレに移動通達をいれず申し訳ありません。

>>872-873
ありがとうございました。
878デフォルトの名無しさん:2005/12/24(土) 23:51:50
すいません。標準出力とforkについてわからないので教えて下さい。
(m。_。)m オネガイシマス
コンパイルと実行環境はcygwin+GCCです。

main()
{
printf("hoge1");
printf("hoge1\n");

if(fork()){/*親プロセス*/
printf("hoge2");
printf("hoge2\n");
}
else{/*子プロセス*/
printf("hoge3");←出力されてない
printf("hoge3\n");
}
}

実行結果:

hoge1hoge1
hoge2hoge2
hoge3

となってしまいます。
子プロセスで改行なしの標準出力がされません。なぜでしょうか?
調べてみると改行があると出力されるようなのですが・・・
また回避策もお願い致します。
(子プロセスの標準出力を親プロセスとのパイプにつなぐとか・・・)
どうか御教授の方宜しくお願い致します。
879デフォルトの名無しさん:2005/12/24(土) 23:52:43
>>848
マルチ シネ
880デフォルトの名無しさん:2005/12/24(土) 23:56:25
>>878
マルチ シネ
881デフォルトの名無しさん:2005/12/25(日) 00:18:54
>>878
マルチ シネサラシ
882デフォルトの名無しさん:2005/12/25(日) 16:46:27
質問です。XP、.NET です。
リストビューの使い方を学んでいます。

リストビューのあるアイテムを選択したことを受け取るには、LVN_ITEMCHANGED を使うのが一般的なのでしょうか。
NM_CLICK だと、キーボードのカーソルキーで選択を変更したことを受け取れません。

また、カーソルキーで選択を変更したとき、LVN_ITEMCHANGED が3回とんできています。
今まで選んでいたアイテムのが2回、新しく選んだアイテムのが1回です。
選択したアイテムのインデックスを調べるには、NMLISTVIEW の iItem を見ればいいですが、
3回飛んできているうちのどれが新しく選んだアイテムの通知かを調べる方法が分かりません。
uNewState、uOldState を調べれば見当はつくのですが、
この2つの変数の詳細が MSDN マニュアルに見つかりません。

よろしくお願いします。
883デフォルトの名無しさん:2005/12/25(日) 16:59:11
LVITEMのstateの説明でも見れば?
884デフォルトの名無しさん:2005/12/25(日) 17:04:34
c++で質問です。
()演算子(?)のオーバーロードで、
operator ()() の意味するところ(というか、動作)が分かりません。
()を関数呼び出しの演算子と見るとは、どういうことなのでしょうか?
よろしくお願いします。
885デフォルトの名無しさん:2005/12/25(日) 17:07:07
>>884
例えばoperator()()をオーバーライドしたHogeクラスがあった時、

Hoge h;
h(); // h.operator()を呼び出す

のようなことが出来る。
886デフォルトの名無しさん:2005/12/25(日) 17:08:06
オーバーライド→オーバーロード(´・ω・`)
887884:2005/12/25(日) 17:23:59
なんとなく分かりました。
ありがとうございました。
888デフォルトの名無しさん:2005/12/25(日) 18:51:49
CかC++用の Socket ライブラリって無いでしょう亞k?
コンパクトでクロスプラットフォームなヤツ歓迎。
最低 Windows 環境で使えるヤツプリーズ。
889デフォルトの名無しさん:2005/12/25(日) 18:53:14
つ それくらい自作しなさい
890デフォルトの名無しさん:2005/12/25(日) 18:54:27
iostreamで読み書きできるソケットライブラリがないか探したことはある。
いまいちいいのがない。
891デフォルトの名無しさん:2005/12/25(日) 18:57:46
基礎から学ぶCプログラミング って本の

p238 プログラム11-1 ってどっか間違ってない?

この本誤植多くて困るよ
自分初心者だから余計に

4版
892デフォルトの名無しさん:2005/12/25(日) 18:58:36
だったら違う本買えよw
893デフォルトの名無しさん:2005/12/25(日) 18:59:27
#include <stdio.h>
#include <fcntl.h>
#include <io.h>

#define OFFSET 35

main(int argc,char *argv[])
{
int i;
FILE *fp,lp;
long rec_no,seek_p;
char buf[41];

/* FILE OPEN */
if((fp=fopen("random.txt","r+t")) < 0 ){
printf("ファイルをオープンできません。%d\n",fp);
printf("ファイルを確認してください。\n");
exit(1);
}
894デフォルトの名無しさん:2005/12/25(日) 19:00:33
rec_no=0;
printf("record NO.? : ");
scanf("%ld",&rec_no);
while(rec_no != -1){
seek_p = (rec_no -1) * OFFSET;
if(fseek(fp,seek_p,SEEK_SET) != 0 ){
printf("シークに失敗しました。\n");
exit(1);
}
if(fscanf(fp,"%35s",buf) < 0 ) {
printf("データがありません。\n");
exit(1);
}
printf("%-35s\n",buf);
printf("record NO? : ");
scanf("%ld",&rec_no);
}
if (fclose(fp) < 0){
printf("ファイルを正常にクローズできません。\n");
printf("もう一度はじめから。\n");
exit(1);
}
return 0;
}
895デフォルトの名無しさん:2005/12/25(日) 19:07:42
>>890
gimite socketが手軽だけどね
機能が少ないのが難点
896888:2005/12/25(日) 19:23:11
>>889
そこを何とか

>>890
ほしいねほしいね

>>891
#include <stdlib.h> が足りないぐらい?

>>895
いいですね、試してみます。
自分宛のレスじゃないのでこういうのはアレな気がするけど、
ありがとうございます。

引き続き
CかC++用 コンパクトな Socket ライブラリプリーズ
897891:2005/12/25(日) 19:34:15
>>896

#include <stdlib.h>

足してもダメっす
ちゃんと random.txtもしかるべきところに作ってあるのになあ


001聡美19780525A読書

002聖菜19790215Oひみつ

003晶19781194ABモータースポーツ

↑こんなの テキスト通りに
898デフォルトの名無しさん:2005/12/25(日) 19:41:14
このコンパイラできるのにexeファイルを実行すると予期せぬエラーがでます。
色々試しましたがどうしても原因がわかりません。

コンパイラ:VC6.0

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct class_siken
{
struct class_kumi
{
int kokugo[3], sugaku[5];
long sugaku_total, kokugo_total;
float s_ave, k_ave;
short class_juni;
}ku1[4][40], ku2[39];
long class_k_total[5], class_s_total[5];
float class_s_ave[5], class_k_ave[5];
short gakunen_juni[4*40+39+1], class_alljuni[5];
}DATE;

void kojin_syori(DATE *sp);
void class_syori(DATE *sp);
void syokika(DATE *sp);

899デフォルトの名無しさん:2005/12/25(日) 19:42:11
>>898
続き

int main(void)
{
srand((unsigned)time(NULL));

DATE *s = NULL;

syokika(s);
kojin_syori(s);
class_syori(s);

return 0;
}

900デフォルトの名無しさん:2005/12/25(日) 19:42:59
>>898
続き

void syokika(DATE *sp)
{
int i, j, ii, jj;
/* 1〜4クラスの点数初期化 */
for(i = j = ii = jj = 0; i < 4; i++)
{
for( ; j < 40; j++)
{
sp->ku1[i][j].kokugo[ii] = 0;
sp->ku1[i][j].sugaku[ii] = 0;
sp->ku1[i][j].s_ave = 0;
sp->ku1[i][j].k_ave = 0;
for( ; ii < 3; ii++)
{
sp->ku1[i][j].kokugo[ii] = rand()%101;
}
for( ; jj < 5; jj++)
{
sp->ku1[i][j].sugaku[jj] = rand()%101;
}
}
}
/* 5クラスの点数初期化 */
for(i = 0; i < 39; i++)
{
for(j = 0; j < 3; j++)
{
sp->ku2[i].kokugo[j] = rand()%101;
}
901デフォルトの名無しさん:2005/12/25(日) 19:43:14
>>899
たぶんsがnullだから。

902デフォルトの名無しさん:2005/12/25(日) 19:43:36
>>898
for(ii = 0; ii < 5; ii++)
{
sp->ku2[i].sugaku[ii] = rand()%101;
}
}
}

void kojin_syori(DATE *sp)
{
int i, j, ii, jj;
for(i = 0; i < 4; i++)
{
for(j = 0; j < 40; j++)
{
for(ii = 0; ii < 3; ii++)
{
sp->ku1[i][j].kokugo_total += sp->ku1[i][j].kokugo[ii];
}
sp->ku1[i][j].k_ave = (float)sp->ku1[i][j].kokugo_total / ii;
for(jj = 0; jj < 5; jj++)
{
sp->ku1[i][j].sugaku_total += sp->ku1[i][j].sugaku[jj];
}
sp->ku1[i][j].s_ave = (float)sp->ku1[i][j].sugaku_total / jj;
}
}

903デフォルトの名無しさん:2005/12/25(日) 19:44:50
>>901
即レスですか('A`)

レスありがとうございます。

続けざまに質問なのですが、何故NULLだからダメなんでしょうか?
904デフォルトの名無しさん:2005/12/25(日) 19:48:25
NULLはアクセスしたらだめなアドレスだから。
905901:2005/12/25(日) 19:50:38
>>903
えーと、単なる初期化忘れじゃなくて天然ですか......
NULLは何も指さないことを示すポインタです。

何も指していないポインタに対して、
関数内で値を書きこめばそりゃヌルポにもなるというわけです。

おそらく、あなたの書きたいコードは
DATE *s = (DATE*)malloc(sizeof DATE); 
かな?
906デフォルトの名無しさん:2005/12/25(日) 19:50:40
デバッガ使えよ
907デフォルトの名無しさん:2005/12/25(日) 19:54:47
>>904-906
回答ありがとうございます。
天然じゃなくて単なる勉強不足です。(´・ω・`)

DATE s;にして関数にsのアドレスを渡したらちゃんと実行できるようになりました。
デバッガは使ってみたんですが理解できず・・orz
908888:2005/12/25(日) 19:56:46
>>897
J( 'ー`)し たかし、random.txt ファイルに問題があるよ
      fseek の意味はわかっているかい?
      そのぐらい自己解決できないと誰にも相手にされなくなっちゃうよ
      ヒントは #define OFFSET 35

>>895
試してみました。
なかなかよさげです。
パブリックドメインっってところもグー。
909デフォルトの名無しさん:2005/12/25(日) 20:04:17
ヘッダーで
namespace a {
  void f(void);
}

って、やったら、.cpp の方で、

namespace a {
  void f(void){ ... };
}

って書くのが普通?それとも、

void a::f(void){ ... };

って書くのが普通?
910デフォルトの名無しさん:2005/12/25(日) 20:06:12
void a::f(void){...}
たぶん最後にセミコロンを付けないのが普通
911デフォルトの名無しさん:2005/12/25(日) 20:35:34
クラスのstaticメンバについて質問なんですが
class hoge
{
    static const int num=5;
public:
    hoge(void);
    ~hoge(void);
    shownum(void){printf("%d\n",num);return 1;}
    
};
はコンパイルができるんですが

class hoge
{
    static const int num=5;
public:
    hoge(void);
    ~hoge(void);
    shownum(void){printf("%d\n",num);return 1;}
    
};

const int hoge::num;

だとnumが複数回定義されてるとエラーが出てしまいます
effective C++だと下の書き方の方が正しいとあるのですが
どうして逆の結果になるんでしょうか?
コンパイラはVS2003です
912デフォルトの名無しさん:2005/12/25(日) 20:42:15
>>911
static constな整数型に関してはクラス内スコープのコンパイル時定数に使うということで上の書き方になった。
913デフォルトの名無しさん:2005/12/25(日) 20:59:04
>>912
よくわかりました。ありがとうございます
・・・effectiveC++だとdefineの代わりにconst使えって言ってるけど
実際にそうしてみたらエラーがでまくるorz
914897:2005/12/25(日) 21:02:26
>>908

なぜ35バイトずつ増やしているかというと、

003晶19781104ABモータースポーツ

このように34バイト+'\0'の合計35バイトで一人分だからです


ってテキストにあります。
915デフォルトの名無しさん:2005/12/25(日) 21:56:28
>911
もしかして
>const int hoge::num;
をヘッダに書いてるとか言うオチ?
916デフォルトの名無しさん:2005/12/25(日) 21:58:31
ってマジでエラーになるな。
917デフォルトの名無しさん:2005/12/25(日) 22:19:11
918デフォルトの名無しさん:2005/12/25(日) 22:47:22
Visual Cで、下記のコードを最適化ありReleaseでコンパイルすると
24KBの実行モジュールができるんだけど
こんなものかな〜。もっと小さくできないのかな。。

int main(int argc, char* argv[])
{
return 0;
}
919デフォルトの名無しさん:2005/12/25(日) 22:50:40
>>918
この辺を参考にしてみるとか
http://www.nitoyon.com/vc/tips/light_exe.htm
920デフォルトの名無しさん:2005/12/25(日) 23:07:09
>>918
メガデモでは一般的だけど
http://www5e.biglobe.ne.jp/~cooh2/tips.html
とか。
普通は知らんが、デモでは合わせ技で
UPXのような圧縮をサポートしたパッカーが使われてることが多い。
921デフォルトの名無しさん:2005/12/26(月) 01:16:47
質問です。
ソースプログラムの分け方なんですが

func1.h//プロトタイプ
func1.cpp//下請け関数
func2.h//プロトタイプ
func2.cpp//下請け関数
header.h//全体で使うヘッダーをまとめる
main.cpp//メインプログラム
と言う感じでソースをわけてるんですが
どこからどういう感じでインクルードすれば良いのか分かりません。
externを使えばグチャグチャになりながらもいけたんですが、綺麗じゃないですし・・・。
ちなみに、func1.*で定義している関数は、func2.*からも使われます。
pragma onceを使っても、うまくいかないですし・・・。
922デフォルトの名無しさん:2005/12/26(月) 01:19:58
普通に必要なヘッダだけインクルードすれば問題ないと思うが。
pragma once使えば、問題ないはずだが。


あと、妙な俺様用語はやめろ。
なんだ下請け関数って。
923デフォルトの名無しさん:2005/12/26(月) 01:27:01
最近のネットワークプログラミングの本では、結構使われてる気がする。>下請け関数
何故かネットワークプログラミングだが・・・。
昔某有名なx68kの本でも使われてたな、しっかり用語解説に乗せてたしww
924デフォルトの名無しさん:2005/12/26(月) 01:28:33
>>921
header.hでmain以外の全てのヘッダーをインクルードする。
次にfunc1.cpp、func2.cppからfunc1.h/func2.hをそれぞれインクルード
最後に、main.cppからheader.hをインクルードすりゃOK
もちろん全てのソースにpragma onceを付けろ
925デフォルトの名無しさん:2005/12/26(月) 01:29:36
サブルーチンを関数化したもの?
926デフォルトの名無しさん:2005/12/26(月) 01:37:36
そう、サブルーチン
最近のオブジェクトとしての関数に馴染めない昔からの老害が下請け関数って言葉を使ってる気がする。
927デフォルトの名無しさん:2005/12/26(月) 03:34:11
>>924
それだと、func1.cppとfunc2.cppの関数が重複するようになるぞ
#pragma onceはあくまで1箇所からの多重参照を防ぐだけだし
928デフォルトの名無しさん:2005/12/26(月) 03:34:51
って、それ以前に>>924だとfunc1.cppからfunc2.cppの関数が使えないw
929デフォルトの名無しさん:2005/12/26(月) 08:14:26
>>921
まず、それぞれのヘッダファイルが
#include"func1.h"
int main(){return 0;}
この様に単一でincludeが出来るように
ヘッダファイル内にincludeを記述する。

あとはcppファイル内で使用している
関数のプロトタイプが定義されているヘッダを全てincludeする。
この時、「ヘッダ内でこのヘッダがincludeされているから…」とかは気にしちゃいけない。

pragma oneceにしろifndefにしろ、インクルードガードは必須な
930デフォルトの名無しさん:2005/12/26(月) 09:46:27
FLT_EPSILONが定義されていない環境で、FLT_EPSILONの値を
探るにはどうしたら良いのでしょうか。
931デフォルトの名無しさん:2005/12/26(月) 09:51:50
は?
932デフォルトの名無しさん:2005/12/26(月) 09:57:43
(゚Д゚)ハァ?
933デフォルトの名無しさん:2005/12/26(月) 10:40:01
float.h がない環境で、まず浮動小数点は使えるのか?
と思うけどまあいいや。
どうせ機械イプシロンは 2 の -n 乗の形してるだろうから、
1 に 2 の -n 乗を足して 1 にならない最大の n を求めればいい。
934デフォルトの名無しさん:2005/12/26(月) 13:39:13
念のため言っとくけど、
2 の -n 乗求めるのに pow なんか使うなよ?
2 で割っていけばいいんだからね。
935デフォルトの名無しさん:2005/12/26(月) 15:59:38
ファイルの排他処理について質問。
・Unix系のOSではflock()が大抵使えると思っていいか。
・OSを問わず使える排他としては、rename()による方法を使うのが無難か。

後者の方法で、流れを解説した資料があれば在り処を教えてください。
#ソース提示してくれるなら尚嬉しい♪
936デフォルトの名無しさん:2005/12/27(火) 01:30:20
質問です。
QUE管理プログラムとは具体的にどのようなものでしょうか?
937デフォルトの名無しさん:2005/12/27(火) 01:41:16
>>935
flock()よりlockf()のがPOSIX的に好ましい

他の汎用的な歯痛手段としてはまあrename()以外にmkdir()なんかも
使えるかな。
938デフォルトの名無しさん:2005/12/27(火) 05:19:15
「OSを問わず」と書いてるけど主要なUNIX系だけでいいのかな。
939デフォルトの名無しさん:2005/12/27(火) 05:49:39
C++で、クラスの初期化されていないメンバ変数を読むのをトラップする方法はないですか?
さっき未初期化変数使って1時間ハマったので。

Javaみたいに強制的に初期化してくれれば
少々パフォーマンスが落ちようがなんだろうが助かるのに。
940デフォルトの名無しさん:2005/12/27(火) 06:00:08
>>939
そう思うならJava使っとけ、と言うのが普通の解答だけど
boost::value_initializedがお望みの物じゃないかと。
941デフォルトの名無しさん:2005/12/27(火) 06:05:06
>>939
そもそもクラスのメンバ変数なら、コンストラクタで
初期化しておけば問題ない(というかそうするべきもの)じゃないか?
942デフォルトの名無しさん:2005/12/27(火) 06:06:37
メンバを追加したらコンストラクタに初期化を書くクセを付けるべきだな
943デフォルトの名無しさん:2005/12/27(火) 06:49:43
VCでと未初期化の変数を使うと例外かなんかが起きた気が
944デフォルトの名無しさん:2005/12/27(火) 07:11:34
>943
んなこたーない
945935:2005/12/27(火) 09:17:39
>>937,>>938
レスTHX。
なるほどlockf()・mkdir()ね。まぁ、mkdir()もない環境は考えなくていいだろうからそれはいいとして。
そもそもWindowsとUnixで同じにならないかってところがスタートなので、WindowsとPOSIXかな。
#WindowsならCreateFile()で事が足りるって話もあるんだけど。
946デフォルトの名無しさん:2005/12/27(火) 10:07:11
>>944
コンパイルオプションでデバッグ時にそうなるようにできる。
947デフォルトの名無しさん:2005/12/27(火) 10:12:57
ほほぉ、ではそのオプションを教えていただこうじゃないか。
948デフォルトの名無しさん:2005/12/27(火) 10:32:07
949デフォルトの名無しさん:2005/12/27(火) 11:21:16
ttp://mtakahashi.com/
が最近見られないだけど移転したの?
950デフォルトの名無しさん:2005/12/27(火) 11:36:51
みなさん、自動変数って初期化して使ってます?
951デフォルトの名無しさん:2005/12/27(火) 11:41:08
>>950
当然。

何か迷ってるなら悪いことは言わない。全部初期化しろ。
それでやりにくいと思うようなら、初期化できるところで定義しろ。
952デフォルトの名無しさん:2005/12/27(火) 11:43:53
C++ Coding Standardsでも読め
953デフォルトの名無しさん:2005/12/27(火) 11:44:59
>>950
C++ではほぼ全部。
Cではできるだけ。
954デフォルトの名無しさん:2005/12/27(火) 12:37:11
>>950
初期化が必要なものは初期化し、
不要なものは初期化しない。
955デフォルトの名無しさん:2005/12/27(火) 12:49:35
>>950
C99, C++ではPOD型の全てと参照型の全てとconst型の全てで初期化、それ以外も基本的に初期化。
Cではやむを得ずブロックの先頭で宣言した場合を除き、C99同様。
尚、静的でない配列は一般的に初期化しない。
956デフォルトの名無しさん:2005/12/27(火) 13:34:12
初期化が不要なものまで全部初期化してしまったら、
>>948 みたいなのが検出できなくなってしまう。
957デフォルトの名無しさん:2005/12/27(火) 20:00:43
>>945
UNIXでもopen()のO_EXCLが使えるよ。
958デフォルトの名無しさん:2005/12/27(火) 20:43:10
>>957
nfsで使えないとか制限があるので要注意。
959デフォルトの名無しさん:2005/12/27(火) 21:45:33
マルチスレッド環境のなかで、
グローバルに参照されるキューを作りたいんですが、
その実装方法でどれが一番最適なのかで悩んでいます。
(排他処理については省いてます)
---------------------------------------------------------------------
(1) シングルトンクラスで実装して、
  必要なところで適時インスタンスを取得する
class HogeQueue {
private:
  static HogeQueue* instance;  // 唯一のインスタンス
  std::queue<あるデータ型のポインタ> hoge_queue;  // キュー
  HogeQueue(){}  // コンストラクタ
public:
  HogeQueue& getInstance(void){
    if(instance==NULL){ HogeQueue::instance=new HogeQueue(); }
    else{ return HogeQueue::instance; }
  }
  void push(あるデータ型){ }
  あるデータ型 pop(void){ }
  〜他のメソッド〜
};

必要になったら、適時
HogeQueue* hoge_queue = HogeQueue::getInstance();
---------------------------------------------------------------------
960デフォルトの名無しさん:2005/12/27(火) 21:46:20
---------------------------------------------------------------------
(2) どうせ一つしか作られないのなら、
  全てstaticなユーティリティクラスのような感じで作る
class HogeQueue {
private:
  static std::queue<あるデータ型のポインタ> hoge_queue;  // キュー
public:
  static void push(あるデータ型){ }
  static あるデータ型 pop(void){ }
  〜他のメソッド〜
};
---------------------------------------------------------------------
(3) 一つしかインスタンスを生成しないことを念頭において、
  普通の参照オブジェクトとして実装する
class HogeQueue {
private:
  std::queue<あるデータ型のポインタ> hoge_queue;  // キュー
public:
  HogeQueue(){ }  // コンストラクタ
  void push(あるデータ型){ }
  あるデータ型 pop(void){ }
  〜他のメソッド〜
};

ある一つのソース内で実体を定義。
HogeQueue hoge_queue;
他のソースでは、
extern HogeQueue hoge_queue;
---------------------------------------------------------------------
実装手段としては、どれが一般的に良いとされているのでしょうか。
また、他にも手段がありましたら、ご教授お願いいたします。
961デフォルトの名無しさん:2005/12/28(水) 06:49:02
別にマルチスレッドだからってグローバルに参照されなくてもいいじゃない。
対象スレッドだけに関連ができるようにしろよウンコ。
できなきゃ死ね。
962デフォルトの名無しさん:2005/12/28(水) 10:06:32
Boostフルコンパイルするときに必要なライブラリってありますか?
なんかICUが足りないみたいなことが出てたんですが
963デフォルトの名無しさん:2005/12/28(水) 10:33:33
>>962
エラーメッセージを理解したり、さもなくばここにそれを貼ったりする技術者が必要です。
964デフォルトの名無しさん:2005/12/28(水) 10:41:15
複数スレッドから使うんでしょ。グローバルにするのは必須じゃないけど。
どれでもいいと思うけど変更らくだから1かな。
965デフォルトの名無しさん:2005/12/28(水) 15:37:49
VC2005のウィザードでCLRコンソールアプリケーションをつくりました。

Console::WriteLine(L"Hello World");

となったのですが、このLってなんでしょうか。
ヘルプをさがしたのですが分かりませんでした。
966959:2005/12/28(水) 16:27:46
>>961
回答ありがとうございました。
なるほど! もっと隠蔽性を高められるんじゃないかってことですよね。
対象スレッドのクラス間だけに関連張るというのは考え付きませんでした。

>>964
回答ありがとうございました。
対象スレッドのクラスだけに(1)のインスタンスを持たせることにしようと思います。
967デフォルトの名無しさん:2005/12/28(水) 16:54:53
>>965
ManagedC++(.netフレームワーク)は該当スレでどうぞ。
968デフォルトの名無しさん:2005/12/28(水) 17:06:49
>>965
_UNICODEの有無にあわせて_TEXTの有無を切り替えてくれる
969デフォルトの名無しさん:2005/12/28(水) 18:00:51
>>968
ダウト

>>965
C++言語定義の一部で、L"..." の形式で、ワイド文字列リテラルであること示す接頭辞。
型が const char[] ではなく、const wchar_t[] になる。
970デフォルトの名無しさん:2005/12/28(水) 20:54:54
int hoge[8][8]という配列があったとして
hoge[8][0]のアドレスを知りたい場合
&hoge[8][0]とする以外に方法はありますか?
971デフォルトの名無しさん:2005/12/28(水) 21:03:12
hoge[8]
972デフォルトの名無しさん:2005/12/28(水) 21:16:42
hoge+8
973デフォルトの名無しさん:2005/12/28(水) 21:18:13
hoge[8][1-1]
974970:2005/12/28(水) 21:22:33
よくわかりました、ありがとうございます
975デフォルトの名無しさん:2005/12/28(水) 21:26:03
ftp://ftp.u-aizu.ac.jp/u-aizu/pmml/pmml-0.2p1.tar.gz
を、WindowsXPでdjgppの最新版でコンパイルしようとしているのですが
コマンドプロンプトで個別のディレクトリ上(\pmml-0.2p1\compなど)でmakeしようとすると
smfout.o:smfout.c:(.text+0x16f1): undefined reference to `__isctype'
smfout.o:smfout.c:(.text+0x1711): undefined reference to `__imp____mb_cur_max'
smfout.o:smfout.c:(.text+0x171b): undefined reference to `__imp___pctype'
smfout.o:smfout.c:(.text+0x1736): undefined reference to `__isctype'
../common/smf.o:smf.c:(.text+0x2d): undefined reference to `__imp___iob'
../common/smf.o:smf.c:(.text+0xb5): undefined reference to `__errno'
(中略)
collect2: ld returned 1 exit status
make.exe: *** [pmml] Error 1
というメッセージが出て止まります。

djgppのFAQにこのようなエラーが出てきたときは\libにある他のライブラリが指定されていない可能性がある、
と書いてあったので-lm -lg -lpc -lemu -ldbg -lgcovと、あるだけ全部指定してみましたが、状況は変わりませんでした。
コンパイルしてバイナリを得たいのですが、どうしたらよいでしょうか。
よろしくお願いします。
976デフォルトの名無しさん:2005/12/28(水) 21:33:28
>>975
__impってついてるのはDLLの関数じゃなかったっけ?
configureに失敗してるような気がする。
977デフォルトの名無しさん:2005/12/28(水) 23:42:06
vc++6のままだったんでそろそろVC++.net2003でも買おうと思ってたら
2005ExpressEditionとかいうやつが手に入るようになってましたが、
これってVC++.net2003とどう違いますか。
DirectXも使えるしWin32アプリも作れるみたいだし
普通に使えるならパッケージ買う必要もないかと思ってるんですけど、
ここがこうだから使えねぇ〜、とか
つかわねぇほうがいい、みたいなところってあったら教えてください。
978デフォルトの名無しさん:2005/12/28(水) 23:45:35
>>977
VC6使いがVC8 Expressを使ってみるスレ
http://pc8.2ch.net/test/read.cgi/tech/1131590396/
Visual Studio 2005スレ Part7
http://pc8.2ch.net/test/read.cgi/tech/1135529419/
979デフォルトの名無しさん:2005/12/28(水) 23:45:55
完全にスレ違いです。
980デフォルトの名無しさん:2005/12/28(水) 23:52:41
下のプログラムは標準入力から文字を読み込み辞書に対応するならば過去形を
対応しなければ辞書にありませんを出力するプログラムなんですが、
下のプログラムを参考に標準入力から一行入力で英文を入力し、過去形の文章にして
出力するプログラムにしていただきたいです。
I move quickly なら I moved quickly 見たいな感じです。
環境はWindowsXPでBorlandC++を使ってます。
どうかよろしくお願いします。


#include <stdio.h>
#include <string.h>

main()
{
int i;
char buf[100];
static char *dic[10][2] = {        /*辞書*/
{"eat","ate"},{"move","moved"},{"copy","copied"},
{"die","dyed"},{"walk","walked"},{"take","took"},
{"hit","hit"},{"swim","swam"},{"run","ran"},{"play","played"}};

while (scanf("%s",buf) != EOF){
for(i=0; i<10; i++){
if(strcmp(buf,dic[i][0]) == 0) break;
}
puts(dic[i][1]);
dic[10][1] = '\0';
if(i==10)
puts("辞書にありません");
}
}
981デフォルトの名無しさん:2005/12/28(水) 23:54:09
>>980
宿題スレへGo
982デフォルトの名無しさん:2005/12/29(木) 01:56:55
>>980
dyedて...w
条件分岐もなんか変。
-------------------------------------------------
/*単語一つずつ読み込み*/
while (EOF != scanf("%s",buf)){
/*辞書を引く*/
 for(i=0;i<10;i++){
 if(0 == strcmp(dic[i][0],buf))break;
 }
/*単語が見つからなかったとき*/
 if(i==10) printf("%s ",buf);
/*見つかったとき*/
 else printf("%s ",dic[i][1]);
}
983デフォルトの名無しさん:2005/12/29(木) 02:01:03
>>982
心の底からどうでもいいけど、なんで定数が左?
984デフォルトの名無しさん:2005/12/29(木) 03:22:58
>dic[10][1] = '\0';
なしますのん。
985デフォルトの名無しさん:2005/12/29(木) 06:03:29
>なしますのん。
?
986デフォルトの名無しさん:2005/12/29(木) 08:06:24
>>983
心の底から聞くけど、本当に理由知らんの?
987デフォルトの名無しさん:2005/12/29(木) 08:14:42
心の底から言うけど、藻前等いい加減に汁。
http://pc8.2ch.net/test/read.cgi/tech/1135077848/335-336
988デフォルトの名無しさん:2005/12/29(木) 08:16:16
>>986
一貫してないのにも理由あるん?

> for(i=0;i<10;i++)  ←ま、これは微妙
> if(i==10) printf("%s ",buf);  ←???
989デフォルトの名無しさん:2005/12/29(木) 09:35:29
990デフォルトの名無しさん:2005/12/29(木) 10:03:52
>>919
>>920
遅レスだけどありがとう〜
すごいっす
991975:2005/12/29(木) 10:34:11
>>976
レスありがとうございます。
普通は、configureがついてて、それ実行してmakefileができるみたいなんですね。
でも>>965のファイルにはmakefileしかついていませんでした…。
README.jには「DOS/V 6.3 -- gcc 2.6.3(djgpp)」で動作確認済みと書いてあるので
何とかしてコンパイルしたいので、ヒントやキーワードだけでも教えてください。
992デフォルトの名無しさん:2005/12/29(木) 11:11:01
>>988
その二つは一貫しているように見えるが。
993976:2005/12/29(木) 11:29:40
>>991
__declspec(dllimport)付きで宣言された関数の実体はDLLにあると解釈される。
だけどdjgppではDLLは扱えないはず。

つまり、ソースコード中で宣言してある関数に__declspec(dllimport)が
付いているのをはずせばよいということ。
includeしているヘッダ内も全部見てみろ。
994975:2005/12/29(木) 11:32:44
>>993
丁寧に教えてくれてありがとう゜(゚´Д`゚)゜。
がんばります。
995デフォルトの名無しさん:2005/12/29(木) 11:57:44
>>992
順繰りに>982まで遡れば判る。
996デフォルトの名無しさん:2005/12/29(木) 12:49:48
次スレ

【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1135828083/
997デフォルトの名無しさん:2005/12/29(木) 12:55:03
1000げとー
998デフォルトの名無しさん:2005/12/29(木) 14:18:27
俺こそ真の1000げっと
999デフォルトの名無しさん:2005/12/29(木) 14:20:33
999げとー
1000 ◆3.JjF77I26 :2005/12/29(木) 14:21:04
1000げっと
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。