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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。

【歴代スレ】
1:http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
2:http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
3:http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
4:http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
5:http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (dat落ち)
6:http://pc5.2ch.net/test/read.cgi/tech/1082182233/(dat落ち)
7:http://pc5.2ch.net/test/read.cgi/tech/1086373839/(dat落ち)
8:http://pc5.2ch.net/test/read.cgi/tech/1091264964/(dat落ち)
9:http://pc5.2ch.net/test/read.cgi/tech/1094494997/l50
10:http://pc5.2ch.net/test/read.cgi/tech/1097416187/
11:http://pc5.2ch.net/test/read.cgi/tech/1099190154/
12:http://pc5.2ch.net/test/read.cgi/tech/1101100031/
【ラウンジ】質問、回答が長い時はココを使うと見やすい
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

関連スレは>>2-5ぐらい
2デフォルトの名無しさん:05/01/04 21:56:54
なんで重複スレを立てるんだよ。
http://dayomon.org/
3デフォルトの名無しさん:05/01/04 22:11:34
【関連スレ(処理系別)】
★初心者にVisual C++を教えるスレ★ Part16
http://pc5.2ch.net/test/read.cgi/tech/1101022051/
■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/
C++Builder相談室 Part12
http://pc5.2ch.net/test/read.cgi/tech/1099238936/
GCCについて part5
http://pc5.2ch.net/test/read.cgi/tech/1103057320/
cygwin + mingwn + gcc 相談室
http://pc5.2ch.net/test/read.cgi/tech/1058134693/
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/
Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/
4デフォルトの名無しさん:05/01/04 22:11:56
【関連スレ(その他)】
C言語なら俺に聞け! Part 98
http://pc5.2ch.net/test/read.cgi/tech/1104114259/
C++相談室 part38
http://pc5.2ch.net/test/read.cgi/tech/1101473340/
ぼるじょあがC/C++の宿題を片付けますYO! 37代目
http://pc5.2ch.net/test/read.cgi/tech/1103913840/
【C++】template 統合スレ -- Part6
http://pc5.2ch.net/test/read.cgi/tech/1101384692/
C++は難しすぎ 難易度:2
http://pc5.2ch.net/test/read.cgi/tech/1071697977/
C言語の第一歩
http://pc5.2ch.net/test/read.cgi/tech/1031374980/
★C言語で遊ぼう!★
http://pc5.2ch.net/test/read.cgi/tech/1028269762/
プリプロセッサについて熱く語るスレ。
http://pc5.2ch.net/test/read.cgi/tech/1058203590/
C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/
フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/
C、C++の最適化について語るスレ
http://pc5.2ch.net/test/read.cgi/tech/1084676298/
5 :05/01/04 23:30:14
重視スレだと思うんだが?
【初心者歓迎】を入れ忘れた程度で立て直しか?
6デフォルトの名無しさん:05/01/05 00:09:52
こっちが本スレでいいんかな
だれか向うの方削除依頼出した?
7デフォルトの名無しさん:05/01/05 01:15:26
いや向こうが本スレ
8デフォルトの名無しさん:05/01/05 01:16:26
こっちが本刷れだよ。
9デフォルトの名無しさん:05/01/05 05:35:01
>>5
> 【初心者歓迎】を入れ忘れた程度で
致命的
10デフォルトの名無しさん:05/01/05 10:49:53
>>9
俺にはそう思えないが、そう言うならそうなんだろうな
11デフォルトの名無しさん:05/01/05 15:00:18
>9 は潔癖性
12デフォルトの名無しさん:05/01/05 15:01:37
13デフォルトの名無しさん:05/01/05 20:02:53
>>9
確かに。こちらが本スレかな。
14デフォルトの名無しさん:05/01/05 20:24:42
EXEからDLLを呼び出していて、
あるタイミングでDLLからEXEへPostMessageしています。
その引数内で、構造体(DLLでnewしている)のポインタを渡していて、
EXEでdeleteしたいのだが、delete時に異常終了してしまいます。
そもそも上記のようなことってできるのでしょうか?

開発環境 VC++6 SP6 WinXPです。
15デフォルトの名無しさん:05/01/05 20:30:44
できない。
どうしてもそういうことやりたいならAPIでメモリ確保してplacement newすればいけるかもしれんが。
16デフォルトの名無しさん:05/01/05 20:35:48
>14
そのDLLは別スレッドで動くので、アドレス空間が違う。だからPostM~の代わりにPostThreadM~使う必要。でもポインタは使えない。構造体ならWM_COPYDATAかCreateFileMa~の共有メモリ使え。
17デフォルトの名無しさん:05/01/05 21:39:55
for(j = 0; j < 4; j++) {
 tmp = tip[j].x;
 tip[j].x = -tip[j].y;
 tip[j].y = tmp;
}

C++でこんなコードを見つけたのですが3行目の -tip[j].y の意味がわかりません。
数学と同じマイナスの解釈でいいのでしょうか。
18デフォルトの名無しさん:05/01/05 21:46:09
はお
19デフォルトの名無しさん:05/01/05 21:46:36
単項マイナス演算子
20デフォルトの名無しさん:05/01/05 21:49:20
>17
左様。後は自力で考えな
21デフォルトの名無しさん:05/01/05 21:53:04
ありがとうございます。
>>19をキーワードにしてぐぐったらわかりました。
22デフォルトの名無しさん:05/01/05 22:14:14
>21
ヘルプも使え、ボケ
2314:05/01/05 22:34:08
>15,16
どもでした。

えーと、仕様の練り直しです。。
24デフォルトの名無しさん:05/01/05 22:48:15
>>23
その構造体がPODならHeapAllocとHeapFreeで
メモリ確保・解放するようにすれば平気だよ。
それがいいかどうかはともかく。
25デフォルトの名無しさん:05/01/05 23:03:28
>>16
大嘘書くなよ。
EXEとDLLはDLLが内部的に別スレッドを生成したりしない限り基本的に同一スレッドで動くし、
そもそも別プロセスならともかくマルチスレッドなら全てアドレス空間は同じ。
26デフォルトの名無しさん:05/01/06 02:21:16
配列の内用を、関数呼び出しの括弧の中に直接書いて渡したいんですけど、
わかるかたいたら教えてください。

void Test( int * );
↑に対して
Test( (int*)&{1,2,3,4} );
↑のようなかたちで呼び出したいということです。
ちなみにこれではエラーになります。

外に出せば全て解決するのは十分承知の上ですが、
以前適当に書いたらできたような記憶があって、
いろいろやってみたんだけど、どうしても思い出せなくて気持ち悪いです。

環境はVC++で通ればいいんですが、
Cの一般的な文法として認められてるやり方があればいいなと。

27デフォルトの名無しさん:05/01/06 02:26:17
>>26
>Cの一般的な文法として認められてるやり方があればいいなと。
VCのことは知らんが、Cにそんな構文は無い。
2827:05/01/06 02:28:59
ゴメンすっかり忘れてた。
(int[]){1, 2, 3, 4}
C99なら↑でいける。
2926:05/01/06 02:35:50
ありがとうございます。
以前GCCで書いたときもそんな感じだった気がしますが、VC++6.0ではできないようです。
残念。
30デフォルトの名無しさん:05/01/06 05:26:33
VC++6を使っています。
三辺の長さがわかっている直角三角形の
直角以外の角を出す関数って無いんですか?

sin(87/654) = 0.123456の時、0.123456からsinに使う2辺の角度を知りたいのです。
31デフォルトの名無しさん:05/01/06 05:55:33
asinでいいんだっけか、その場合。
32デフォルトの名無しさん:05/01/06 06:13:38
>>31
Thx.
33デフォルトの名無しさん:05/01/06 15:08:02
Cのconio.hで提供するような機能のC++版ってなんでしょうか。
34デフォルトの名無しさん:05/01/06 15:59:00
conio.hでいいだろ
35デフォルトの名無しさん:05/01/06 16:54:01
まったくだ。
conio.h の最初の
  #ifdef __cplusplus
  extern "C" {
  #endif
と、最後の
  #ifdef __cplusplus
  }
  #endif
を入れた人の身にもなってやれ。>>33
3633:05/01/06 16:58:26
>>34-35
そうですね・・・おとなしくconio.hで逝きます。thx
37デフォルトの名無しさん:05/01/06 20:30:04
このスレでいいのかわかりませんが、VC専用の質問スレが見つからなかったので質問させていただきます。

VC++6.0を使用しています。
コーディングしているとたまに、全く反応が無くフリーズしたような状態になります。
フリーズ時間は数十秒〜1分くらいで、発生頻度は一定していません。
全く出ないときもありますし、30秒に1回くらいのペースで発生するときもあります。
自動保存にしては頻度が高すぎます。
フリーズするのはVCだけで、他のソフトは普通に操作できます。
CPU負荷にも変化は無いので、CPU100%で重くなっているというわけではないようです。

OSはWinXP SP2ですがSP1の頃からずっと発生していました。
38デフォルトの名無しさん:05/01/06 20:32:18
★初心者にVisual C++を教えるスレ★ Part16
http://pc5.2ch.net/test/read.cgi/tech/1101022051/
39デフォルトの名無しさん:05/01/06 21:05:18
int i;
char c;
c = (char *)i;

上記のコードですが、
* が付いていると、どう言う事になるんでしょうか。
40デフォルトの名無しさん:05/01/06 21:08:48
>>39
そのコードは激しく感心しない
41デフォルトの名無しさん:05/01/06 21:12:24
>39
実体をポインタ型にキャストするのはやらない方が良い。結果は実行環境による。知りたければnasmで難解なアセンブリ学べ
4239:05/01/06 21:18:07
レスどうもです。
先輩教えてもらったのですが、何が何だか分からなくて...
43デフォルトの名無しさん:05/01/06 21:26:35
>42
アドレス0xa0番地のメモリにアクセスするために(char*)0xa0と書く。でも最近のOSはメモリ保護のために例外を投げてしまう。char*p=(char*)NULL; *p=0x7f;などは確実に失敗する。
44デフォルトの名無しさん:05/01/06 21:28:36
>>43
藻前は >>42 のソースを 100 万回ほど朗読しろ
45デフォルトの名無しさん:05/01/06 21:29:24
>>44
×>>42
>>39

orz
46デフォルトの名無しさん:05/01/07 15:23:15
>>1
乙!!
47デフォルトの名無しさん:05/01/07 15:25:37
まったくもって、処理系依存だから、
何も答えられないが最適解ですね。
48デフォルトの名無しさん:05/01/07 15:30:18
基礎クラスの中に
virtual void Show() = 0;
とあるんですが、=0;ってなんなんでしょうか?
仮想関数で返り値なしのshow()に=0;ってのがよくわからないんですが・・・

派生クラスには
virtual void Show() { myData->Show(); myNext->Show(); }
というのがあります。

関数に代入とか出来ないですよね?
49デフォルトの名無しさん:05/01/07 15:42:24
>>48
純粋仮想関数でぐぐれ
50デフォルトの名無しさん:05/01/07 15:45:17
>49
即レスthx
解決しました
51デフォルトの名無しさん:05/01/07 17:07:44
はじめまして。

質問なんですが、純粋仮想関数みたいな感じで、
派生クラスに引数を取るコンストラクタの実装を強要することってできますか?

今組んでるプログラムが、幾つかのフォーマットのファイルを扱う予定なんですが
各フォーマット共通の部分を基底クラスのパラメータとして持って、
各フォーマット固有の部分を派生クラスで扱いたいんです。

派生クラスのインターフェイスを統一するために、派生クラス全部に
同じ引数を取るコンストラクタを実装したいと思ってます。
解決策があったらお願いします。
52デフォルトの名無しさん:05/01/07 17:25:37
仮想関数の利点はわかるんですが
純粋仮想関数の利点ってなんでしょうか?
53デフォルトの名無しさん:05/01/07 17:29:09
>>52
派生クラスにオーバーライドを強要できる(しないとエラーになる)
基底クラスのインスタンスを作れなくなる(インターフェースクラスに使える)
54デフォルトの名無しさん:05/01/07 22:41:19
>51
>派生クラスに引数を取るコンストラクタの実装を強要することってできますか?
.基底クラスに引数ありのコンストラクタ以外用意しないではだめなのかな?
良心的な人なら、派生クラスのコンストラクタでもその引数を受け取るようにするでしょう。
55デフォルトの名無しさん:05/01/07 23:03:56
コンパイラについていろいろ調べたのですが、なんだか良く分かりませんでした
MicrosoftのC/C++のコンパイラって
[Visual C++ 6.0] → [Visual C++ .net] → [Visual C++ .net 2003]
って変わったんですか?
.netって6.0の次ですよね?
56デフォルトの名無しさん:05/01/08 02:20:19
.net = 7.0
.net 2003 = 7.1
57デフォルトの名無しさん:05/01/08 08:59:59
>>56

あ、そうなのか、どうりで.net 2003は良く検索で出てきたけど
.netはあまり出なかったわけだ
謎が解決しました、ありがとう
58デフォルトの名無しさん:05/01/08 16:05:59
VC++6使ってます。
メッセンジャーのような複数の相手とP2P接続させたいのですが
参考になるサイトとか書籍などありましたら教えてください。
59デフォルトの名無しさん:05/01/08 16:26:13
>>58
Regnessemのソース。
Delphiだけど読むだけならそれほど困難ではない。
6058:05/01/08 18:41:55
>>59
Regnessemってソース公開してたんですね。知りませんでした(汗
早速DLしてきたので参考にさせてもらいます。
ありがとうございました。
61デフォルトの名無しさん:05/01/09 02:40:12
#include <iostream> 

#include <iostream.h>
の違いを教えてください

あと 
#include <cstdlib> 

#include <stdlib.h>
の使い分けについても教えてください 
62デフォルトの名無しさん:05/01/09 02:45:28
63デフォルトの名無しさん:05/01/09 03:31:03
1.指定フォルダ内のファイル一覧を取得。
2.ファイル一覧にフォルダがあればそのフォルダ内のファイル一覧も取得。
3.2を繰り返して指定フォルダ以下のツリーを作成。

ということをやりたいんですけど、2以下をどうすればいいか思いつきません。
参考になるサイトとかあったら教えてください。
コンパイラはBCC5.5です。
64デフォルトの名無しさん:05/01/09 03:48:52
>>63
スレ違いだべ
Windows -> http://www.google.co.jp/search?hl=ja&q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB+%E6%A4%9C%E7%B4%A2+%E5%86%8D%E5%B8%B0+FindFirstFile&lr=lang_ja
C++ -> ↑を boost::filesystem で

(しかし boost::filesystemって日本語使えてなかったような…)
65デフォルトの名無しさん:05/01/09 04:06:02
>>64
かなり参考になりますた。
66デフォルトの名無しさん:05/01/09 04:10:13
>>63
boost::filesystemを使った例。
#include <algorithm>
#include <fstream>
#include <string>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
std::ofstream myout("一覧.txt", std::ios::out);
struct pred_p{bool operator()(const boost::filesystem::path& x){return !boost::filesystem::is_directory(x);}};
void scan_folder(const unsigned int level, const boost::filesystem::path& scan_path, const std::string& lines)
{
    std::vector<boost::filesystem::path> folders((boost::filesystem::directory_iterator(scan_path)), boost::filesystem::directory_iterator());
    folders.erase(std::remove_if(folders.begin(), folders.end(), pred_p()), folders.end());
    std::vector<boost::filesystem::path>::const_iterator first(folders.begin());
    std::vector<boost::filesystem::path>::const_iterator last(folders.end());
    if (first != last)
    {
        for ( ;first != last - 1; ++first)
        {
            myout << lines << "├" << first->leaf() << std::endl;
            scan_folder(level + 1, *first, lines + "│");
        }
        myout << lines << "└" << first->leaf() << std::endl;
        scan_folder(level + 1, *first, lines + " ");
    }
}
int main()
{
    scan_folder(0, boost::filesystem::current_path(), "");
    return 0;
}
67デフォルトの名無しさん:05/01/09 05:00:38
C/C++というよりはWindowsの話ではあるのですが
Program Files下のファイルに対してfopen関数にてファイルを開こうと試みたのですが出来ませんでした。
理由と解決方法が知りたいのですが、よいサイト等ご教授願えないでしょうか?

環境は Windows2000 VC++6.0 です
68デフォルトの名無しさん:05/01/09 06:10:05
>>67 errno
69初心者:05/01/09 06:31:13
現在Windows2000 VC++6.0を使ってOpenGLを用いた3次元画像の表示プログラムを作っています。
ですが、OpenGLの画像を2つのwindowで表示したいのですがうまく表示できません。
そこで、可能かどうかと、可能ならばよい解決方法を教えていただきたいです。
どうかよろしくお願いします。
70デフォルトの名無しさん:05/01/09 06:37:21
完全にスレ違いなんですが
71デフォルトの名無しさん:05/01/09 06:43:56
>>68
レスありがとうございます
No such file or directoryと返されました
ファイル名等は間違えていないのですが…

errnoに関してはひとつ利口になりました、どうもありがとう
72デフォルトの名無しさん:05/01/09 06:48:56
>>71
まさか fopen("C:\Program Files\...") とか?
73デフォルトの名無しさん:05/01/09 06:52:09
一度開くファイル名を標準入力から入力してからですが事実上は
fopen(C:\Program Files\.....")となってます
74デフォルトの名無しさん:05/01/09 06:56:46
>>73
「事実上は」ってのがよくわからないけど、
fopen("C:\\Program Files\\...") にしたら開けたりするのかな?
75デフォルトの名無しさん:05/01/09 07:01:35
scanfにて一度 char FileName[512] に入れていますので
エスケープシーケンスによるエラーとかではないとは思っています
コンパイル自体は通っています
76デフォルトの名無しさん:05/01/09 07:11:48
これはもう、ソース晒すしかないね。
7767:05/01/09 07:20:45
#include <stdio.h>
#include <errno.h>
#include <string.h>

int main()
{
FILE *file;
int c;
char string[512];
char FileName[256];
char *err;
int swich = 1;

printf("ファイル名を入力してください\n>>");
scanf("%s", &FileName);
errno = 0;

if((file = fopen(FileName, "r")) == NULL)
{
err = strerror(errno);
perror(err);
printf("File Open miss.\n");
return -1;
}
7867:05/01/09 07:21:30
else
{
while(swich == 1)
{
file = fopen(FileName, "r");
printf("Open succses.\n");
while((fscanf(file, "%s", &string)) != EOF)
{
printf("%s\n", string);
}

printf("reLoad?\n>>");
scanf("%d", &c);
if(c == 1)
{
swich = 1;
}
else
{
swich = 0;
}
fclose(file);
}
}
return 0;
}
ソース出してみます
任意のフォルダ内のファイルは読めたのですが
Program Files下のファイルが読めなくて困っているところです(目的のファイルはProgram Files下のファイルです)
79デフォルトの名無しさん:05/01/09 07:32:05
>>67
- scanf("%s", &FileName);
+ scanf("%[^\n]", FileName);
80デフォルトの名無しさん:05/01/09 07:34:34
>>77
scanfでスペース含んだ名前は入力できないような気がする。
perror(FileName); にしてみな。
8167:05/01/09 07:36:34
>>79
おおお、ありがとうございます
82デフォルトの名無しさん:05/01/09 07:36:48
危なくてもいいならgets()でも使え。
8379:05/01/09 07:39:13
>>81
scanf 使わなければ
scanf("%s", &FileName); を
fgets(FileName, sizeof(FileName, stdin);
FileName[strlen(FileName) - 1] = '\0';
8467:05/01/09 07:40:31
他ソフトでアクセス中のファイルにこのプログラムでアクセスする方法を模索しておりまして
まずは通常アクセス出来るかProgram Filesを試したところアクセスすら出来なくて困っていたというところでした
また頑張ってみます
>>79-81
レスありがとうございました
8567:05/01/09 07:46:03
>>83
入力ストリームを標準入力にするんですね、なるほど
86デフォルトの名無しさん:05/01/09 11:31:26
>>67
私はDドライブに市販ソフトを
インストールするようにしてるよ
CドライブはOSのインスコのみ

こんな椰子もいるから
87デフォルトの名無しさん:05/01/09 11:40:33
>>86
市販ソフトはレジストリを使うから、
ファイルさえあればいいってものじゃないんで
結局C:\Program Filesに入れている。
88Rubyist!:05/01/09 13:42:52
てゆーかなんで対話的にして標準入力を潰すのかね?
しかもscanfかい
89デフォルトの名無しさん:05/01/09 15:03:48
>>84
>他ソフトでアクセス中のファイルにこのプログラムでアクセスする方法を模索しておりまして

アクセス中のファイルにアクセスするな。
90デフォルトの名無しさん:05/01/09 16:08:27
寿命を迎えた変数はメモリから解放されますか?
91デフォルトの名無しさん:05/01/09 16:11:58
>>90
自動変数・メンバ変数なら、変数自体のメモリはスコープアウトで解放される。
ポインタがぶら下がってる場合はデストラクタでどうにかしないとダメ。
92デフォルトの名無しさん:05/01/09 16:13:07
>>91
ありがとうございます
93デフォルトの名無しさん:05/01/10 18:50:53
初心者なんですが、教えてください。

int Len(const string& str)
{
return str.length();
}

このような関数がある場合、

Len(string());

という呼び出しをしても大丈夫でしょうか?
string()で作成されたインスタンスが、呼び出した関数内で有効なのか教えてください。
94デフォルトの名無しさん:05/01/10 19:06:14
>>93
有効です
95デフォルトの名無しさん:05/01/10 19:18:45
>>94
ありがとうございました!
96デフォルトの名無しさん:05/01/10 20:24:48
現在C++を勉強中の者です。
ネットや書籍で調べたのですが、見つけられなかったので質問させてください。

デフォルトコンストラクタと、その他引数つきのコンストラクタをいくつか
宣言した場合、いくつかのコンストラクタで共通する初期化リストも
それぞれに書かなくてはならないのでしょうか?

初期化リストがかなり長大なため、出来るだけ共通する部分は簡略化
したいと思っているのですが、どなたか教えてください。
97デフォルトの名無しさん:05/01/10 20:26:33
初期化を関数に分けてしまうのが一番楽じゃないでしょか
98デフォルトの名無しさん:05/01/10 20:38:26
>>96
メンバの構成をいじらない限りは、書かなくてはならない。

構成に手を入れてもいいなら、
共通の初期化を行うメンバをひとつのクラスにまとめてコンストラクタを書いたり、
private なコンストラクタ+インスタンス生成用static関数を作ったりできる。

>>97
メンバに「初期化」が重要な意味を持つクラスがあると、そう簡単にはいかない。
99デフォルトの名無しさん:05/01/10 20:49:04
>>98

>共通の初期化を行うメンバをひとつのクラスにまとめてコンストラクタを書いたり、
あ〜、なるほど〜。今回はこの方法でいけそうです!!ありがとうございました。
100デフォルトの名無しさん:05/01/10 21:48:55
スレ違いだったらスミマセン。

Windowsのプログラムを書くときってfstreamは使わないほうが良いのでしょうか?
それともCreateFileのほうが使い勝手が良いだけなんでしょうか?

「使用を避けるべき」なのか「使用可だがCreateFileのほうがベター」なのか
どなたか教えて下さい。出来れば理由もおねがいします。
101デフォルトの名無しさん:05/01/10 21:53:25
Win32環境では、ファイルを開くためのAPI(CreateFile)に共有モードを
指定するパラメータがある。
意図的に「共有」を指定しない限り、(不用意にファイルを上書きしないように)
ファイルを開くときには「排他モード」になる
102デフォルトの名無しさん:05/01/10 21:54:53
>>100
Windows前提なら好きなほうを選べばいい。
他のプラットフォームを意識するなら fstream にして
移植性を高めることの利点が大きいかもしれない。
103デフォルトの名無しさん:05/01/10 22:18:35
>>100
CreateFileはWindowsの世界に作られていて、fstreamはC++の世界に作られている。
要するにお前はどっちの世界の住人になるかだ。
それぞれメリット・デメリットがある。

それとWindowsプログラミングのサイトではCを対象にしていることが多いので大抵fstreamとかは出てこない。
Cのfopenもあるが、どうせならAPIの解説を……、ってことで特にCreateFileに偏っていると思う。
104デフォルトの名無しさん:05/01/10 22:18:39
事故消滅するようなクラスを作ろうと考えているのですが
以下のようなコードはやめたほうがよいのでしょうか?
DWORD HAGE::Delete(){
m_dwRef = m_dwRef - 1;
if( m_dwRef == 0 ){ delete this; }
return m_dwRef;
}
105104:05/01/10 22:22:36
すいません戻り値見たらm_dwRefの保持する値が壊れてました
以下のコードなら大丈夫でしょうか?
DWORD HAGE::Delete(){
m_dwRef = m_dwRef - 1;
if( m_dwRef == 0 ){
delete this;
return 0;
}
return m_dwRef;
}
106100:05/01/10 22:23:06
>>101〜103
みなさん、本当にありがとうございました。これで疑問が解消しました。
個人的にはWindowsAPIをあまり使いたくないので、必要に迫られない限り
fstreamを使いたいと思います。
107デフォルトの名無しさん:05/01/10 22:33:42
>104-105
m_dwRef==0だったら?
m_dwRefの値の遷移図を書いてみろ
108デフォルトの名無しさん:05/01/10 22:34:56
>>105
そのコード自体に問題はないよ。
delete this の是非や、Delete() が戻り値を持つことの是非は気になるけどね。
109デフォルトの名無しさん:05/01/10 22:51:42
if(){}
else if{}
else if{}

を繰り返すのと
switchをつかって処理分岐するのは
機械語からみたら同じ処理ですよね?
自分で操作できるぶんif〜elseのほうがパフォがいいと思うんですが
合ってますか?
110デフォルトの名無しさん:05/01/10 22:54:11
>109
コンパイラッキー。
確率論勉強しろょ
111デフォルトの名無しさん:05/01/10 22:55:12
>>109
switchの方が可読性が良いと思うから、switchを使えるならswitchにしてほしい。
それにswitchだとジャンプテーブルになることが多いという話もかなり聞く。
112デフォルトの名無しさん:05/01/10 22:58:45
>>109
> 機械語からみたら同じ処理ですよね?
コンパイラによる

> 自分で操作できるぶんif〜elseのほうがパフォがいいと思うんですが
制約が多い分switchのほうがパフォがいい(ことが多い)
113デフォルトの名無しさん:05/01/10 23:07:44
if else ifはその回数だけ条件分岐が発生するが、switchなら場合によってはjmp命令一発で解決する可能性がある。
114104:05/01/10 23:17:34
107-108
m_dwRefってのは参照カウントです
このクラスのポインタが3箇所で参照されていた場合はm_dwRefの内容が3になります。
それぞれの箇所でこれが不要になったに場合Delete()を実行し、
すべての箇所で不要になった場合(m_dwRefの内容が0になった場合)
メモリから削除されるという仕様にしたかったのですが。
115デフォルトの名無しさん:05/01/10 23:19:04
>>105
COMでは普通にする。
あと m_dwRef = m_dwRef - 1; はキモイから
if( --m_dwRef == 0 )
にしてくれ。
116デフォルトの名無しさん:05/01/10 23:29:22
デクリメント前に assert( m_dwRef > 0 ) もほしいな。
Delete() は void じゃダメなのかな?

もっというと、 boost::shared_ptr 使えってことになるんだが。
117104:05/01/11 00:53:29
皆さんありがとうございます。

assertでウインドウが出た場合Direct3Dのフルスクリーンが解除されてしまうので
その代わりにエラーログを出す処理を追加しました。
調べてみた結果boost::shared_ptrは速度が遅くなる恐れがあるようですね。
118デフォルトの名無しさん:05/01/11 00:59:35
ttp://jp.thespoke.net/MessageBoard/MessageBoard_ViewThread.aspx?postid=486

あの似顔絵ウィザードも含めて、HomeStyle+ って
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.NET Framework で書かれてるんですね。。。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
逆アセンブルしてみたら気づきました・・・・。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ああいうのを作品に組み込むのも面白いかも(笑)

MSの製品を逆汗するような奴をMSはMVPに選んでいるんです。MSは逆汗を認めていると
119デフォルトの名無しさん:05/01/11 01:00:48
>>118
散々既出
激安で買えるVisual Stdio.NET theSpoke Disc.9
http://pc5.2ch.net/test/read.cgi/tech/1103381010/
120デフォルトの名無しさん:05/01/11 01:03:05
boost::intrusive_ptr もあるでよ。
121デフォルトの名無しさん:05/01/11 13:58:38
質問です。環境は XP、VC++ 6.0 です。
wav サウンドを、sndPlaySound を使って再生しています。
そこで、2つの wav ファイルを同時に再生させることはできないでしょうか?
引数として SND_ASYNC を与え非同期で動かしても、
2つめのサウンドを再生すると、1つ目のサウンドの再生が止まってしまいます。
よろしくお願いします。
122デフォルトの名無しさん:05/01/11 14:24:25
>>121
自前でミキシングするかDirectSound使うんじゃないかな?
123120:05/01/11 14:39:05
DirectSound ですか……。

また色々と勉強が必要そうです。
急を要するので、ひとまずは midi か mp3 でも使っておきます。
ありがとうございました。
124デフォルトの名無しさん:05/01/11 15:49:05
VC++なんですが、リストビューの要素の
編集をしたいのです
ダブルクリックすると、編集可能になるお手本の
とおりにやりたいのですが、どういう手段を使えばいいのでしょうか

// ダブルクリック反応用
m_listctrl.SetExtendedStyle(LVS_EX_TWOCLICKACTIVATE);

i = m_listctrl.GetHotItem();

これだと、一番左の行の場合しかiに値が入らず、編集もできないです
リストビューのどこのカラムでもダブルクリックで編集できるような方法を教えてください

125124:05/01/11 15:50:09
すみません スレ間違えました
VC++スレにいってきます 失礼しました
126121:05/01/11 16:24:12
引き続き質問です。XP、VC++ 6.0 です。

DirectSound を使ってみているのですが、

>LPDIRECTSOUND8 lpds;
>DirectSoundCreate8(NULL, &lpds, NULL);

ここで早速、
〜.cpp(62) : error C2065: 'LPDIRECTSOUND8' : 定義されていない識別子です。
と出ます。
>#include "mmsystem.h"
>#include "Dsound.h"
の2つはインクルードしているのですが……。
他に何かインクルードする必要があるでしょうか?
127デフォルトの名無しさん:05/01/11 16:27:53
dsound8.hじゃなかった?
128デフォルトの名無しさん:05/01/11 16:42:45
>>126
「LPDIRECTSOUND8」を含むファイルの検索を行う

と言う発送は出てこないのですか?
129121:05/01/11 17:10:40
検索しても出てこなかった……_| ̄|○
DirextX のバージョンは 9.0c なので大丈夫なはずです。何が抜けてるんでしょう……。

dsound8.h でぐぐっても0件でした。
130127:05/01/11 17:16:59
スマソ

Dsound.h→dsound.h
これが原因ぽい
131デフォルトの名無しさん:05/01/11 17:22:23
>>126
ヘッダの検索順序はDirectXSDKのヘッダファイルを先に探すようになってるか?

その9.0cがSDKじゃなくてランタイムのバージョンだったら(ry
132121:05/01/11 17:26:45
>>131
何というか今、ものすごくごめんなさいって感じが……_| ̄|○

お騒がせしましたありがとうございました_| ̄|○
133デフォルトの名無しさん:05/01/11 18:29:02
派生クラスのポインタを、派生元クラスのメンバに持たせることはできないのでしょうか?
省略して書くと、
class B;
class A { B* pB; void Test(){ pB->Do(); } }
class B : public A { void Do(){...} }
これだとpB->Do()のところで「認識できない型Bが使われています」と弾かれ、
class A;
class B : public A { void Do(){...} }
class A { B* pB; void Test(){ pB->Do(); } }
これだとclass Bの定義で「定義されていない基本クラスが宣言されてます」と弾かれ、
どちらにしてもコンパイルが通りません…。
VC++.net2003です。
134デフォルトの名無しさん:05/01/11 18:35:38
>>133
A*じゃだめ?
135デフォルトの名無しさん:05/01/11 18:39:22
>133
Doをvirtualメソッドにして、ポインタは基底クラスのもの、A*を代表させるといいのでは?
136133:05/01/11 18:43:50
>>134
ありがとうございあmす。ただ実際にはテンプレートを使っていて
class A { list<shared_ptr<B>> pB; ... }
みたいな感じなので、ダウンキャストできないんです。
というわけで、できればB*のままで持たせたいのですが・・・
137133:05/01/11 18:47:39
>>135
なるほど。
でもB以外にもAを派生したクラスがいくつかあって、
Do()はB固有のメソッドなので、A自体にDo()はあまり持たせたくないのです…
138133:05/01/11 18:58:31
cppとhに分けて書くことで解決しました。
もうすこし考えてから書き込むべきでした。すいません…
139デフォルトの名無しさん:05/01/11 20:41:54
>>130
> Dsound.h→dsound.h
そんな馬鹿な。Windowsでは大文字小文字の区別はないはず。
140デフォルトの名無しさん:05/01/11 21:57:18
intからstringに変換するのって、どうすればいいんですか?
141デフォルトの名無しさん:05/01/11 21:59:37
>140
sprintf
142デフォルトの名無しさん:05/01/11 22:01:50
>>140
boost::lexical_cast<std::string>()
143デフォルトの名無しさん:05/01/11 22:07:37
>>140
std::ostringstream
144デフォルトの名無しさん:05/01/11 22:17:25
(std::ostreagstream() << 123).str()
145デフォルトの名無しさん:05/01/11 22:25:03
>>141-144
サンクス
142みたいなのを探してたんだけど、>>144もいいっすね
146デフォルトの名無しさん:05/01/12 01:35:29
WinXPSP2+VisualStudio2003.NET使いです.

#include "stdafx.h"
#include <windows.h>
#include "Shlwapi.h"

int _tmain(int argc, _TCHAR* argv[])
{
char buffer_1[ ] = "C:\\TEST\\file.txt";
char *lpStr1;
lpStr1 = buffer_1;

int retval;

retval = PathFileExists(lpStr1);

return 0;
}

とすると,

error LNK2019: 未解決の外部シンボル __imp__PathFileExistsA@4 が関数 _main で参照されました。
fatal error LNK1120: 外部参照 1 が未解決です。

というエラーをはきます.どうすれば解決できるでしょうか?

あと,
#include<Shlwapi.lib>や#include<Shlwapi.dll>
とすると,
fatal error C1083: include ファイルを開けません。'Shlwapi.dll': No such file or directory
と怒られます.
147デフォルトの名無しさん:05/01/12 02:12:25
>>146
ライブラリをリンクさせたい時は

#pragma comment(lib, ライブラリ名)

と書く
この場合なら
#pragma comment(lib, "Shlwapi")
148147:05/01/12 02:17:29
VCの場合ね('A`)
149デフォルトの名無しさん:05/01/12 02:30:36
>147
ありがとうございます.ようやくコンパイル通りました
150デフォルトの名無しさん:05/01/12 06:43:47
>>144
コンパイルできない。
151デフォルトの名無しさん:05/01/12 08:05:14
>>144
素直にsprintf しとけ
今後もそれつかうぞ絶対
152デフォルトの名無しさん:05/01/12 13:12:57
テンプレートでごてごてのライブラリを使ってプログラムを組んだときに
コンパイルエラーが出るとエラーメッセージが意味不明すぎて困っています
どうすれば委員でしょうか
委員?俺は委員なのでしょうか
だとすれば何の委員なのでしょうか
153デフォルトの名無しさん:05/01/12 13:15:19
>>152
諦めましょう。
154デフォルトの名無しさん:05/01/12 13:16:24
>>152
モチツケ。そしてEffectiveSTLを読んでみろ。
エラーの解読方法が書いてある。
155デフォルトの名無しさん:05/01/12 13:23:44
amazon見たら星5個ですね
わかりました紀伊国屋いってきます
156デフォルトの名無しさん:05/01/12 13:24:29
>>155
その項だけ立ち読みすればいいと思われ
ていうか、ただ「似てる部分はまとめろ」ってだけだけど
157デフォルトの名無しさん:05/01/12 13:27:16
なるほど財布持たずに勉強だけしに行くことにします
158デフォルトの名無しさん:05/01/12 13:58:12
本ぐらい買え
159デフォルトの名無しさん:05/01/12 14:35:41
int main(int argc, char *argv[]){
FILE *fp;
char keyword[80];
char line[256];
char* sp;
int size = 0;

if( argc<3 || (fp=fopen(argv[1],"r") ) == NULL){
printf("can not open file");
exit(1);
}
strcpy(keyword,argv[2]);
size = strlen(keyword);

while(fgets(line,256,fp) !=NULL){
sp = strncmp(line,keyword,size);
if(sp==0){
printf("%s",line);
}
}

fclose(fp);
return 0;
}

----------------------------------------------------------------------
文字列処理のプログラムなんですが、keywordが1文字だった場合、
keywordに空白を追加して文字列比較(strncmp)の処理を行いたいのです。
どのようにすればよいでしょうか?
160デフォルトの名無しさん:05/01/12 15:04:01
>159
sizeが1だったらstrcatで" "を追加。動作はデバッグして調べよ
161デフォルトの名無しさん:05/01/12 15:20:01
>>159
○痴かよド畜生が!
162 :05/01/12 16:38:29
#include<stdio.h>
main()
{
   char name[7] = {"NURUPO"};
   char *add;
   int i;

   add=name;

   for(i=0; i<6; i++){
printf("%Xは文字%cを表している。\n",add,*add);
add++;
}
   printf("\n");
   printf("逆に並べ替えると\n");
   for(i=5; i>=0; i--){
       printf("%Xは文字%cを表している。\n"      );

   }
}

NURUPOを反転表示させたいのですが、どのようにすればいいでしょうか?
163デフォルトの名無しさん:05/01/12 16:46:20
#include<stdio.h>
main()
{
    char name[] = "NURUPO";
    char *add = name;
    int i;
    for (i = 0; i < 6; i++) {
        printf("%Xは文字%cを表している。\n", add, *add);
        add++;
    }
    printf("\n逆に並べ替えると\n");
    for (i = 5; i >= 0; i--) {
        printf("%Xは文字%cを表している。\n", add, *add);
    }
}
164デフォルトの名無しさん:05/01/12 16:59:35
#include <stdio.h>
#include <string.h>
#include <algorithm>

int main()
{
char name[] = "NURUPO";
printf("%s\n", name);
std::reverse(&name[0], &name[strlen(name)]);
printf("%s\n", name);

return 0;
}
165デフォルトの名無しさん:05/01/12 17:03:03
#include <cstdio>
#include <cstring>
#include <algorithm>
using std::puts;
int main()
{
  char name[] = "NURUPO";
  puts(name);
  std::reverse(name, name + strlen(name));
  puts(name);
  return 0;
}
166デフォルトの名無しさん:05/01/12 17:40:52
おぷるん
167デフォルトの名無しさん:05/01/12 21:38:41
int* func(){ 処理 }
という関数を実行したとき返り値を必ずどこかに格納しなくてもいいんでしょうか?



int* a = func(); を func();だけにする。
168デフォルトの名無しさん:05/01/12 21:46:03
func()が新しく確保して開放していないメモリへのポインタを返して
いなければ構わないよ。
169デフォルトの名無しさん:05/01/12 21:54:49
>>168
言い方悪くない?

>>167
そのポインタが指すオブジェクトを、
呼び元が解放しなければならない場合は駄目。
そうでなければ構わないよ。
170デフォルトの名無しさん:05/01/12 21:55:57
printfやstrcpyの返り値を利用する割合は、全体の2.4%(当社調べ)
171デフォルトの名無しさん:05/01/12 22:23:45
>168-169
解決しました。レスありがとうございます
172デフォルトの名無しさん:05/01/13 12:46:54
fseek()の返り値は更に使われない悪寒。
173デフォルトの名無しさん:05/01/13 20:15:49
こんちわ、ある関数の
if(search_flug == 0){//もしもsearch_flug=0ならば新ノード作成
New_nord = (struct word *)malloc(sizeof(struct word));//そのノードの次ノードを作って。
strcpy(New_nord -> name,word_name);//単語を登録
(New_nord -> appear)++;//出現回数に1を加算
New_nord -> Next_pt = NULL;//Next_ptをNULLに(次がないんだからネ)
Now_nord -> Next_pt = New_nord;//んで、さっきまでNULLだったノードのNext_ptを新ノードへのポインタに
}
else{
(Now_nord [hash_num].appear)++;
}
という所で、一番頭の
if(search_flug == 0){
の所で構文エラーが出るのですが。
原因がわかりません。
全角文字を使ってるとか、{}の数が足りてないとかスペルミスとか色々試してみたがどうも
ピンと来ないのですが、わかる方ご教授お願いします。
この記述の直前にdo whileでループを書いてるんですが、それとか関係ないですよね・・・?

コンパイラはVC++6.0です。
174デフォルトの名無しさん:05/01/13 20:17:01
おわーあ、表示崩れてる
すいませんッ
175デフォルトの名無しさん:05/01/13 20:22:39
flugだとかnordだとか突っ込みどころだらけだなぁ、おい。
構文エラーが出たならエラーの内容くらい書いとけ。
176デフォルトの名無しさん:05/01/13 22:18:52
ゆとり教育の成果だな
177デフォルトの名無しさん:05/01/13 22:22:50
ある意味表示崩れてるな。
178デフォルトの名無しさん:05/01/14 03:20:28
あ、ホントだスペルちゃいますね。
直しておきます。失礼!

エラーなんですが
error C2059: 構文エラー : 'if'
とだけで、自分もかなり面食らってます
179デフォルトの名無しさん:05/01/14 03:29:25
>>178
前をもそっと
180デフォルトの名無しさん:05/01/14 03:39:40
あが〜、一度寝てからコードを見直したら原因がわかりました。
どうも申し訳ございませんでしたっ!

なんか鬱です。ごめんなさい。
181デフォルトの名無しさん:05/01/14 08:02:10
その前の行でセミコロンが抜けてたとか。
182デフォルトの名無しさん:05/01/14 22:36:11
WindowsXP
Visual Studio .Net
C++

以上の環境で、MFC、Win32API、ATL、C標準関数なんでもござれなアプリを作る予定です。
(MFCとWin32APIの違い等もよく理解していないのが正解だが)
ダイアログベースで、ダイアログ内にJPEG画像を縮小して20枚くらいサムネイルのように貼り付け
クリックされたら拡大表示っていうふうなアプリを作ろうと思っているんです。

そこで質問です。JPEG画像を縮小表示してダイアログに貼り付ける場合、どのように描画するのが
よいのでしょうか。

俺のつたない予想
@ ダイアログのOnPaintでCBitmapを描画
A CImageで描画
B 自分自身に描画するクラスを作って20個貼り付ける?
C CBitmapButtonで貼り付ける?
183デフォルトの名無しさん:05/01/14 23:18:35
>>182
サムネイルならリストコントロール使えばいいだろ
184182:05/01/15 00:13:11
リストコントロール!!
その手がありましたか。エクスプローラの縮小表示のようにするってことですね。

これはかなり効果的でしたが、情報の後だしと言われてしまいますが
表示する20個はある条件にソートされて表示したいんで、
今回は使えませんでした。

ちょっともう少し自分で調べてみることにします。
185デフォルトの名無しさん:05/01/15 00:50:45
>>184
リストコントロールは独自のソートできるよ。
186デフォルトの名無しさん:05/01/15 04:57:44
void (*pKeyFunc[])() = {this->KeyBoardEvent_Field, this->KeyBoardEvent_FieldMenu, NULL};
ってムリ?
187186:05/01/15 05:00:35
ムリだから質問したんでした。。。
どう改良すればコンパイルできます?
switchにするしかないのかな
188デフォルトの名無しさん:05/01/15 09:10:44
>>186
こう?
void (クラス名::*pKeyFunc[])() =
189186:05/01/16 01:35:25
>>188 ありがと。

void (ClassA::*pKeyFunc[3])() = {ClassA::KeyBoardEvent_Field, ClassA
:KeyBoardEvent_FieldMenu, NULL};
(this->*pKeyFunc[m_iMD])();
で解決しました。でも、何故これでOKなのか理解でき(ry...
190デフォルトの名無しさん:05/01/16 01:37:42
>>189
名前空間
191デフォルトの名無しさん:05/01/16 01:49:35
>>189
メンバ関数へのポインタ。
規格では &ClassA::KeyBoardEvent_Field のように & が必須なのでつけたほうがいい。

>>190
関係無い。
192デフォルトの名無しさん:05/01/16 01:51:54
>>191
名前空間が解決できないからクラス名を指定しているんじゃないの?
193186:05/01/16 01:57:05
(pKeyFunc[i])()も
(*pKeyFunc[i])()も
(ClassA::*pKeyFunc[i])();も
(ClassA::pKeyFunc[i])();もダメ。
this限定で、「*」(C言語ではいらなかったはず)を付けないと
いけないのかが分かりません。
ClassA::じゃ名前空間、物足りませんか...
194デフォルトの名無しさん:05/01/16 02:13:22
>>192 ちがうよ。
>>193 "->*" がひとつの演算子。
195デフォルトの名無しさん:05/01/16 16:00:42
neonをつかいWebDAV関連のプログラムを作りたいのですが、プログラムをうまくコンパイルすることができません。
neonのホームページは下の所です。
ttp://www.webdav.org/neon/
開発環境はLinuxを使ってます。
以下のサンプルコードをコンパイルしようとした所次のようなエラーがでました。
#include<ne_session.h>
int main()
{
ne_session *sess;
sess=ne_session_create("http","ServerName",80);
ne_session_destroy(sess);
return 0;
}
gcc -L/usr/local/lib -I/usr/local/include/neon sample.c
/tmp/ccunwT5A.o(.text+0x18): In function `main':
: undefined reference to `ne_session_create'
/tmp/ccunwT5A.o(.text+0x25): In function `main':
: undefined reference to `ne_session_destroy'
collect2: ld はステータス 1 で終了しました
と上記のようなエラーがでてしまいます。
因みにne_session_createとne_session_destroyはne_session.hをインクルードすれば使えるはずなのですが。。。
#include <ne_session.h>
ne_session *ne_session_create(const char *scheme, const char *hostname, unsigned int port);
void ne_session_proxy(ne_session *session, const char *hostname, unsigned int port);
void ne_close_connection(ne_session *session);
void ne_session_destroy(ne_session *session);
コンパイラーに渡すオプション何か足りないものがあるのでしょうか?
教えて下さい。
196デフォルトの名無しさん:05/01/16 16:22:50
>>195
インクルードファイルのディレクトリは-I/usr/local/include/neonで指定してるのに、
ライブラリは-L/usr/local/libなのか?
ホントにそのディレクトリにライブラリが入ってるのかどうか確かめてみては?
197Rubyist!:05/01/16 17:13:42
普通にインストールすればneon-configかpkg-config用の*.pcファイルも入っているはずだから
gcc sample.c `neon-config --cflags --libs`

gcc sample.c `pkg-config neon --cflags --libs`
とでもすればいい。
198デフォルトの名無しさん:05/01/16 17:41:04
>>197
>>197
>>197
>>197
>>197
>>197
>>197
>>197
>>197
知ったか発見!!!!!!!!!!
199Rubyist!:05/01/16 17:43:33
>インクルードファイルのディレクトリは-I/usr/local/include/neonで指定してるのに、
>ライブラリは-L/usr/local/libなのか?
突っ込むところはそこじゃなくて-lneonとを指定していないことだろ。
200195:05/01/16 17:47:57
Rubylist!さんありがとうございます。
おかげでコンパイルできました。
201デフォルトの名無しさん:05/01/16 17:50:13
最近Cの方を始めたのですが
#include<stdio.h>

main()
{
printf("表示する文字\n");
}
とありますがコマンドプロントがすぐに閉じてしまいますそれを閉じないようにするにはどこに何を加えればよいでしょうか?初歩的質問すみません。

202デフォルトの名無しさん:05/01/16 17:50:17
>>199
>>199
>>199
>>199
>>199
>>199
>>199
>>199
>>199
知ったか発見!!!!!!!!
203デフォルトの名無しさん:05/01/16 18:12:45
>201
puts("プログラム終了。Enterキー押せよ");
getchar();

system("pause");
204デフォルトの名無しさん:05/01/16 18:30:38
ありがとうございました。さっそく試して見ます。
205デフォルトの名無しさん:05/01/16 20:01:10
試してから書け
206デフォルトの名無しさん:05/01/16 20:24:27
すみませんでした。教えてもらったのに・・・・・・
ちゃんとコンパイルもできいけました。本当にありがとうございます。
207デフォルトの名無しさん:05/01/17 14:10:45
C++のプログラムで、
if ( (p.coef = d_ALC(p.ele)) == NULL )ERR("p.coef");
のような行があったんですが、ここにでてくる、「ERR」ってなんでしょうか?
208デフォルトの名無しさん:05/01/17 14:13:00
ソースとヘッダ検索しろよ
基本的にC/C++はそれでシンボルの問題は解決するぞ
209デフォルトの名無しさん:05/01/17 17:19:37
すごく既出かもしれませんが、なかなか検索しても引っかからないので、
すいませんがお教え下さい。

複数ファイル間でnamespace使う場合、
[ファイルA]
namespace ns{int b;}
とだけして、
[ファイルB]で
namespace ns{int c;}
int main(){......return 0;}
と記述したのですが、[ファイルB]でint bを参照する場合、
using namespace ns;
extern int b;
ではダメみたいなのですが、どうすれば良いのでしょうか?
210デフォルトの名無しさん:05/01/17 17:30:26
>209
なぜ共通ヘッダを使わない?
namespace ns;
extern int ns::b;
211デフォルトの名無しさん:05/01/17 17:35:26
>210
ご回答ありがとうございます。
共通ヘッダを使うべきなのでしょうが、
「複数ファイル間で同名のnamespaceが同じ名前空間で扱われるか」
を試そうと思っていましたので共通ヘッダを使用しませんでした。
>namespace ns;
>extern int ns::b;
とありますが、どうもコンパイルエラーになるようです。
環境はg++3.3.2です。
212209:05/01/17 17:40:52
またソースは以下のとおりです。
[ファイルA]
namespace ns{int b;}
[ファイルB]
#include <iostream>
using namespace std;
namespace ns{int c=100;}
int main(){
using namespace ns;
extern int ns::b;
cout<<c<<endl;
return 0;
}
で、エラーは以下です。
error: `ns::b' should have been declared inside `ns'
213209:05/01/17 17:43:32
int b;はファイルAのnamespaceのスコープでさえぎられているのでしょうか?
214デフォルトの名無しさん:05/01/17 17:55:42
namespace ns{int c =100;}
namespace ns{extern int b;}
int main(){/*...*/}
とするべき。
一般に名前空間に(その翻訳単位で)新しい名前を追加するときは
名前空間をオープンしないといけない。
215デフォルトの名無しさん:05/01/17 17:55:49
コンパイル単位Aに宣言かつ定義されたns::bを外部のコンパイル単位Bから参照しようとしてるなら、usingの前に何かを書かねば…
216209:05/01/17 18:05:50
>214
おお!素晴しいです。できました!なるほど。
このテストをやってみたのは、複数のファイルで
using namespace std;
ってやってる場合、それらは同じ名前空間だけど、共通の空間として
認識されてるのか(もしくはそれぞれのファイル単位で別物のstdなのか)
を確認したかったからです。
>namespace ns{extern int b;}
とすることで、ファイルAの名前空間nsを参照できてるってことですかね。

>215
externとか書いてみたんですが、文法がおかしいみたいでした。。。
よくわからなかったもので。
217デフォルトの名無しさん:05/01/17 18:12:32
>216
usingは、ns::を省略するぐらいの意味。externは外部(external)という意味。
218209:05/01/17 18:18:32
ありがとうございました!
219デフォルトの名無しさん:05/01/17 20:38:14
winscokを使ったクラスを作るために設計したんですが。
ただのラッパーみたいになってしまいます。
これは設計が悪いからでしょうか?
220デフォルトの名無しさん:05/01/17 20:43:27
>219
常に決められた手順通りに動くことを想定すれば、途中の事務処理は自動化できるはず。
221219:05/01/17 22:20:09
>>220
常に決められた手順は、そのクラスから派生して作るものかなと
思ったりしてるんですが、

そこまで考えてクラス設計はしなくても良いもんなんでしょうか?
それだけにしか使えないクラスを作成するとか。

クラスってイメージは、鯛焼きの型ってイメージがあるんで
専用クラス作るのは良いことじゃないと思ってるんです。
222デフォルトの名無しさん:05/01/17 22:39:56
>>221
常に決められた手順だから、
クラスとしてまとめるんだろ?
そのクラスを使う上位で、
同じ事を何度も書かなくても言いように。
223222:05/01/17 22:41:03
>>222
×言いように
○いいように

orz
224219:05/01/17 23:23:46
何度も宣言しないなら、クラスにしなくても良いじゃないかな?
と思ってしまうんですよね。

クラスは、どんなときに使うのか?を理解する必要があるみたいです。
良い本を読んでみます。
225デフォルトの名無しさん:05/01/17 23:30:36
boostのtokenizerで文字列を単語に分割したいんですが、
「aa<?bbcc?>dd」という文字列を、「aa」「bbcc」「dd」に
分割するようなことは出来ないのでしょうか。
ちょっと調べたんですが、1文字でしか分割できないような気がします。

それと、<??>の内部か外部かを判断するのは出来ますか?
226デフォルトの名無しさん:05/01/17 23:54:00
boost::regexの方が簡単じゃないか?
227デフォルトの名無しさん:05/01/18 00:04:58
ネストを許すかどうかで最適解が変わるんじゃないか
228デフォルトの名無しさん:05/01/18 01:24:49
ネストを許すならパーサを書くかboost::spirit。許さないならboost::regex。
229デフォルトの名無しさん:05/01/18 08:04:50
許さないのでregexにします。
ありがとうございました。
230デフォルトの名無しさん:05/01/18 12:39:46
>>221
>常に決められた手順は、そのクラスから派生して作るものかなと
>思ったりしてるんですが、

>>219 の winscok を使ったクラスを例に考えてみよう。
例えば、藻前は上位クラスでコネクションを行う必要がある度に、
わざわざ、

 ・アドレス解決メソッド
 ・socket() ラッパーメソッド
 ・connect() ラッパーメソッド

と、複数のメソッドを呼ばそうとするのか?

普通なら、コネクションを行うメソッドを作り、
そのメソッドの中で

 ・アドレス解決
 ・ソケットの生成
 ・コネクション

と言う一連の手順を実行させないか?
231デフォルトの名無しさん:05/01/18 15:40:43
自分の調べ方が悪いのかもしれませんが、
現在WinXPでBorland C++ Compiler 5.5を使って
C言語でソケット通信のプログラムを組んでおりますが
通信相手を限定する為にWindowsのコンピューター名を
指定する方法で制約がかかっております。
そこでNetBIOS名からIPアドレスをプログラム上で
使う方法がありませんでしょうか?
232デフォルトの名無しさん:05/01/18 16:42:41
これから言語覚えようと思うんですけど、direct Xって、visualc++以外でも使えますか?
233デフォルトの名無しさん:05/01/18 16:46:52
>>231
gethostbyname() で、
コンピュータ名から IP 得られなかったっけ?
234デフォルトの名無しさん:05/01/18 17:29:52
>>232
COMが使える言語ならどれでもいいと思うよ。
235デフォルトの名無しさん:05/01/19 14:08:16
age
236231:05/01/19 14:09:34
>>233
gethostbyname()で試したところ取得できました。
ありがとうございました。
237デフォルトの名無しさん:05/01/19 15:56:04
あえて、文字列の途中にヌル文字を挿入したいのですが、
lstrcat(buf,"\x00");
238デフォルトの名無しさん:05/01/19 15:57:21
おっと、途中で送信されてしまいました。

上記のような文をforループで回して文字列を作成したいのですが
ヌル文字の部分だけ抜けてしまいます。 何か良い方法ってありますか?
239デフォルトの名無しさん:05/01/19 15:58:25
>237
buf[len+1]=0;
240デフォルトの名無しさん:05/01/19 16:04:23
memcpyでポインタをずらしてまわれ
241デフォルトの名無しさん:05/01/19 16:09:25
[ CTest.h ]

class CTest
{
void Draw() {};
void DrawTest2( CTest2 test2 ) {};
}


[ CTest2.h ]

class CTest2
{
void Draw() {};
void DrawTest( CTest test ) {};
}

main.cppの中でこれらを使用するにはどうしたらいいんでしょうか?
242232:05/01/19 16:10:27
>>234
ご返答ありがとうございました。
243241:05/01/19 16:10:44
>>241

正常にコンパイルする方法が知りたいんです。
244デフォルトの名無しさん:05/01/19 16:19:09
>241
class CTest;
class CTest2;
をヘッダーの最初に書け
245デフォルトの名無しさん:05/01/19 16:31:46
>>239 ってことはできあいの関数は使えないってことですね。
よくよく考えたら当たり前か・・・。 
自作関数でもつくるしかなさそうですね。
ありがとうございました。
246デフォルトの名無しさん:05/01/19 16:44:04
>>244

VCでやってるんですが、なぜかできないんですよ
エラーメッセージは
認識できない型 'CTest' が使われています。 >>> Init( CTest test ) {}の部分
CTest2' の宣言を確認してください。 >>> clas CTest2;
247デフォルトの名無しさん:05/01/19 16:44:54
>>246

エラーメッセージ訂正

エラーメッセージは
認識できない型 'CTest' が使われています。 >>> Init( CTest test ) {}の部分
'CTest' の宣言を確認してください。 >>> class CTest;
248デフォルトの名無しさん:05/01/19 16:59:27
>247
クラス定義の後で;忘れ
249デフォルトの名無しさん:05/01/19 17:06:27
>>248

いや ちゃんと書いてます。
250デフォルトの名無しさん:05/01/19 17:07:13
以前一つのファイルでできたと思ったので、分割せずに試してみたらそれも無理でした
なんでだろ〜なんでだろ〜〜><;
251デフォルトの名無しさん:05/01/19 17:12:07
http://gamdev.org/up/img/2242.zip

UPしたのでどうやったらコンパイルできるか誰か教えて
252デフォルトの名無しさん:05/01/19 17:12:10
ソースを晒すのが早いと思われ
253252:05/01/19 17:13:17
_| ̄|○
254デフォルトの名無しさん:05/01/19 17:13:52
class CTest2;

class CTest
{
  void Init( CTest2 test ) {}
};

class CTest2
{
  void Init( CTest test ) {}
};

int main()
{
  return 0;
}

まーたったこれだけだからUPするまでもなかったorz
255デフォルトの名無しさん:05/01/19 17:34:15
CTest::Init(CTest)
256デフォルトの名無しさん:05/01/19 18:05:15
main.cppで#include "Func.h"
sub.cppで#include "Func.h"

Func.h内は
クラスTimerの定義が有るとすれば
いくら
#ifndef DEF_NAME
#define DEF_NAME
...
#endif
した所で、コンパイルして後のリンク時に再定義エラー
が起こるわけで............。

これじゃ、再定義にならないように#ifndef,#defineの意味無いんじゃない?
1つのソースファイル内でまさか2度同じヘッダをインクルードするわけ
なんてないし...
だとしても、直ぐに気づくと思いますが
257256:05/01/19 18:08:01
勘違い(orz
258デフォルトの名無しさん:05/01/19 18:24:38
CTest,CTest2が相互に参照している。設計自体が悪い
259デフォルトの名無しさん:05/01/19 20:05:50
>> 258

そうなのかな?
オブジェクト指向だと双方向関連って普通にあると思うけど

あと全く同じプログラムじゃないけど
Win32プログラムだとなぜかうまくいく。。。なぜなんだ・・orz
260デフォルトの名無しさん:05/01/19 20:29:21
>>259
あのね、君が普段から悪い設計しかしないのは解かったから。
261デフォルトの名無しさん:05/01/19 21:33:19
>>260

は? 双方向関連 やってると設計が悪いのか?
オマイ だめぽw
262デフォルトの名無しさん:05/01/19 23:40:18
>>256
関数の定義と実装を分ければ解決しますよ(たぶん)
263デフォルトの名無しさん:05/01/19 23:43:16
>>261
いや、ダメなのは君の方だよ。場合によってはリスナとか作れよ。
264256:05/01/19 23:45:00
>>262
レスありがとうございます。
なんだかヘッダファイルの意味をとんでもなく誤解してたみたいです。
ソースファイルのみで作った方が楽な気がしてきた。
何故ライブラリ作るんだろうと思ってたんですが、腑に落ちた気がしました。
265256:05/01/20 00:07:25
ライブラリも結局は関数プロトタイプは必要で
やっぱりライブラリの意味が見出せない。(ry
266デフォルトの名無しさん:05/01/20 00:22:42
>>265
でかいプロジェクト扱ったこと無いだろ。
267デフォルトの名無しさん:05/01/20 00:27:11
>>254
それだけならコンパイル通るはずだぞ。
ホントにそれだけでコンパイルしたのか?
実際はそれ以外のコードが含まれるんじゃないか?

>>265
それ、勉強つか経験が決定的に不足してるわ。
ある程度コーディングの経験があればヘッダファイルの有難味は判る。

268デフォルトの名無しさん:05/01/20 00:29:32
>>266
彼はきっと学部1年生だ。許してやれ。
269デフォルトの名無しさん:05/01/20 00:38:56
>>254
CTest2はCTestより後で定義されてるからCTestはCTest2のサイズを知らない。

そういう場合はポインタ使え。よくある相互参照の解法だ。
ポインタそのものは環境依存だがサイズは固定値。
指してる先の構造体(この場合のCTest2)のサイズがまだ分からない時にも使える。

逆に、CTestはCTest2より前に定義されてるから
CTest2はCTestのサイズを知っている。よってポインタにする必要無し。

したがってこの1箇所の修正でコンパイル通るんじゃないかな?
class CTest
{
  void Init( CTest2 *test ) {}
};
他のコードは一緒。

VC++7.1(のcl.exe)とcygwin g++3.2の両方でコンパイル通ったよ。
270デフォルトの名無しさん:05/01/20 07:59:35
>>254-
不完全型は引数の型とすることはできないだろ。
前方宣言と参照で済ますところだな。
271デフォルトの名無しさん:05/01/20 10:00:37
一定の時間感覚で処理を発生させるのはどうやればいいの?
sleepだと本当に止まってしまうので使えない
VBでいうタイマーコントロールみたいなことをしたいのだけれど
誰か教えてたも
くそ初心者でごめん
272デフォルトの名無しさん:05/01/20 10:04:18
>271
SetTimer,WM_TIMER
273デフォルトの名無しさん:05/01/20 10:07:21
>>271
>>272 の他に、マルチスレッドを使うという手もある。
274デフォルトの名無しさん:05/01/20 10:11:18
すげーレスはやっ。ありがとう>>272,273
それをキーワードに調べてみますよ
275デフォルトの名無しさん:05/01/20 10:41:05
>>269

なるほど。構造のサイズが必要になってたんですね。
さすがでした。ありがとうございます。m( _ _ )m

関連ってポインタでとるものなのに、
簡単なテストコード書いたときに、面倒だったため、
省略してしまいました。
早く気づけば・・orz
276デフォルトの名無しさん:05/01/20 12:31:05
VC++.NETについて質問です。
コンソールアプリで終了時にコンソール画面を残すことはできますか?
いままではBCC+BCC Developerで作ってたのでわかりません・・・;
初歩的な質問ですがお願いします。
277デフォルトの名無しさん:05/01/20 12:35:19
>>276
過去ログでも嫁
278276:05/01/20 13:27:17
自己解決しました。
Ctrl+F5でできたとは・・・鬱
279デフォルトの名無しさん:05/01/20 14:08:08
C言語で、

for(z=-10;z<=10;z++){
for(y=-10;y<=10;y++){
x=(Xnosa1(T,A,K,y,z))*(Xnosa1(T,A,K,(y+1),z));
if(x<0){
※Xnosa1(T,A,K,y,z)、Xnosa1(T,A,K,(y+1),z)は関数

例えばこの様に書いたときに、x<0になる事が何度もあっても、初めにx<0になった時点でその時の値だけを返してfor文を終了させるにはどうすればよいでしょうか?
よろしくお願いします。
280デフォルトの名無しさん:05/01/20 14:13:40
返すと言う意味が関数から読み出し元に返すと言う意味なら
if (x < 0) {
return x;
}
単純に二重ループから脱出したいなら
for () { for () {
if (x < 0) {
goto OutOfFor;
}
}}
OutOfFor:
281デフォルトの名無しさん:05/01/20 14:49:17
VC++6を使っています
ガイシュツかもしれませんしググレって言われるかもしれませんが、どこも初心者にも
判りにくいので質問させていただきます。

「半角文字を全角文字」にする方法を教えてください。

どこのサイトもわかりにくかったので・・・。
判りやすいサイトでもあればよいのですが。
自分も引き続きしれべますけどお願いします。
282デフォルトの名無しさん:05/01/20 15:02:57
>>281
文字コードについて勉強汁。
283デフォルトの名無しさん:05/01/20 15:12:00
>281
LCMapString
284281:05/01/20 15:39:27
なんとか自力でできました。スミマセンですた。
285デフォルトの名無しさん:05/01/20 19:42:18
Windowsのコンソールアプリを作ろうとしています。
パラレルポートを監視し、その状態に応じ処理を行うものです。
やりたいことは、以下の様な処理です。
int main(void){
/* ここで初期化 */
while(1){
/* パラレルポートの状態を見る。*/
/* hoge 実行 or 何もしない */
}
/* ここで終了処理 */
return 0;
}
このままですと、アプリ終了のためにはCtrl+C等が必要ですが、その場合
終了処理が行えないのが困りものです。パラレル及びhogeのコードそのものに問題はなく、
悩んでいる点は、上記の様なwhileをしつつ、どうやって終了処理をするか、です。
わからないなりに調べ、以下の方法で実現できるかも、という段階まできました。

(案1) Ctrl+Cのシグナルハンドラ作って終了処理を記述
(案2) 副スレッド作ってwhileをやらせる。本スレッドに、getcなどで副スレッド終了用のインターフェース記述

これらが妥当な方針かどうか御教示願えますでしょうか?
(シグナルにせよスレッドにせよまだ勉強不足ですが、そこは今後じっくりやるとして、
方針が正しいかどうか教えて頂きたいのです)

長文すみません。宜しくお願い致します
286デフォルトの名無しさん:05/01/20 20:05:26
案1が簡単。案2は多方向からの信号の排他制御に向いている。
287271:05/01/20 20:32:43
タイマーを組み込んでみたんですけど、なんか精度が100ms以下と悪いらしいのでがっくりしました。
そんなわけで「まるちすれっど」を採用しようと思うんですけど、こいつの精度ってどんなもんですか?大体でいいから数字で知りたい。
欲を言えば5ms、最悪20msくらいの分解能はほしいのです。
288デフォルトの名無しさん:05/01/20 20:49:40
【何の質問】C++
【プログラミング歴】数ヶ月
【2ch歴】3年程
【職業】学生
【質問】卒業研究でC++のプログラムを作ることになりまして,皆さんに教えて頂きたいのです.
#include "spec.h"
const double spec::getsVST() { return 23.00; }
const double spec::getsTCV() { return 1.54; }
const double spec::getsSK() { return 0.097; }
このようなcppファイルがあり,今はreturnで数を代入していますが,
他プログラム(Visual C++)
void CCompDlg::OnSaveButton()
{
UpdateData(TRUE);
CFile f;
f.Open("C:\\Compspec.txt",
CFile::modeCreate | CFile::modeWrite );
CArchive ar( &f, CArchive::store );
ar << m_VstEdit << m_TcvEdit << m_SkEdit;
ar.Close();
f.Close();
}
で作成したファイルを読み込んで使用したいのですが,どのように組み込んで良いのかわかりません.
ぜひどなたか詳しい方,方法をお教え願います.
289デフォルトの名無しさん:05/01/20 21:01:46
>>287
藻前の作り方とコンピュータのスペック、
その時の状況などによる。
290デフォルトの名無しさん:05/01/20 21:02:28
>288
ファイルの構造は書き込んだ順にデータが並んでいるだけだ。その順で読み込め。
CFile::Open
CArchive::CArchive
CArchive::operator>>
をヘルプで見よ
291デフォルトの名無しさん:05/01/20 21:06:20
>>290
レスありがとうございます。読み込むには上のcppファイルをどのようなにすれば良いのでしょうか?
思い当たるものを試したんですが、うまくいかないんです。
292デフォルトの名無しさん:05/01/20 21:08:33
>291
ヘルプ見ない奴は何度も同じような質問をする。
293デフォルトの名無しさん:05/01/20 21:22:16
string 型変数は多用してかまいませんか?
char * で処理可能なら従来の C 的なコーディングのほうが
良いのでしょうか?(速度面やサイズなどで)
294デフォルトの名無しさん:05/01/20 21:29:21
>>293
多用OKです。環境はVisualC++6.0です。
295デフォルトの名無しさん:05/01/20 21:38:40
速度が大事なところではchar*を使うべき。
それ以外はすべてstd::string
296デフォルトの名無しさん:05/01/20 21:56:30
普通のプログラムを書くときに、char*を使わなきゃならないほど
速度を求められる場面ってまずないけどな。

アルゴリズムの方がよっぽど重要ネ
297デフォルトの名無しさん:05/01/20 22:04:55
>>295
そうか、わかった。よーくわかったぞ。
298デフォルトの名無しさん:05/01/20 22:11:03
教えてください。
フロッピーディスクが書き込み可能かどうか
(使用可能なフォーマットかどうか)
を調べる処理がどうやれば良いのかわかりません。
よろしくお願いいたします。
299293:05/01/20 22:14:39
>>294-296
ありがとうございます。
特に気にするほどでもない、ということですかね。
string 型、便利ですね。
300デフォルトの名無しさん:05/01/20 22:23:27
>>299
その通りだよ。>>295みたいな時代錯誤ジジイの言うことは聞かなくていいからな。
301295:05/01/20 22:29:39
必要なことは問題領域において必要十分な柔軟性があることじゃないの?
302デフォルトの名無しさん:05/01/20 22:31:18
void main()
{
char ans;
while(1) {
printf("INPUT y or n\n");
scanf("%c", &ans);
if('n' == ans)
break;
}
return;
}

上のプログラムで y を入力すると「INPUT y or n」
が2行続けて出力されてしまいます。1行のみ順に
出力するにはどうしたらいいのでしょうか?宜しくお願いします。

環境、windows2000proSP4,VisualC++ 6.0SP6
303デフォルトの名無しさん:05/01/20 22:34:58
>>287
タイマーの精度に対してはあまり正確なものは期待できない。
SetTimerよりも、と言う限定つきであれば「マルチメディアタイマー」
について調べてみよ。
304デフォルトの名無しさん:05/01/20 22:42:56
>>302
散々既出だが、scanf()を捨てることをお勧めする。
305デフォルトの名無しさん:05/01/20 22:50:38
>>302
試してないからうまくいくか分からないけど
- scanf("%c", &ans);
+ scanf("%c%*c", &ans);
306285:05/01/20 22:51:45
>>286
御指導ありがとうございます。
案1を軸に、余力があれば案2にも挑戦したいと思います
307デフォルトの名無しさん:05/01/20 23:24:43
>>302
scanf(" %c", &ans);
308デフォルトの名無しさん:05/01/20 23:48:16
配列を別の配列に代入するとエラーとなるのですがいいやり方は無いでしょうか?
309デフォルトの名無しさん:05/01/20 23:53:23
>>308
std::vector
310デフォルトの名無しさん:05/01/20 23:54:53
311302:05/01/21 00:00:33
教えて頂いた文で検索したら、バッファに\nが残ってしまう為とか…なるほど
ありがとうございました。
312デフォルトの名無しさん:05/01/21 11:36:15
次の方〜?
313デフォルトの名無しさん:05/01/21 12:25:38
すいません
他人のDLLを使うプログラムで
最終的にDLLを使わず
実行ファイル一本にする方法が
あったら教えていただけると助かります。
環境はWINとBCCとDIRECTX
DLLのソースが無い状態です。
ライセンスひとまず考え無いものとします。
314デフォルトの名無しさん:05/01/21 12:26:16
ライセンスはひとまず考え無いものとします。
315デフォルトの名無しさん:05/01/21 12:30:15
>313
ライセンスが不要と考える根拠は?
316デフォルトの名無しさん:05/01/21 12:33:35
パチかよ
317デフォルトの名無しさん:05/01/21 12:34:30
>>313
DLLで行っている処理を自分で実装する。
これ以外は有り得ない。

って言うか、DLLはexeと別にあるから意味がある。
318313:05/01/21 12:36:08
BCC用でダイレクトxをやろうとするとき
必要になるために
無償で配布されてるライブラリなのと
作るものは商用とかそういうレベルじゃないし
仲間に配るだけなんで

319デフォルトの名無しさん:05/01/21 12:38:23
インストーラーメン
320313:05/01/21 12:40:46
ファイル数を増やしたくないわけです。
321デフォルトの名無しさん:05/01/21 12:44:24
>>320
なぜ?
ファイルの数は変わっても、
全体のサイズは変わらないぞ?
322デフォルトの名無しさん:05/01/21 12:44:27
あなたを逮捕します。ガチャリ
323デフォルトの名無しさん:05/01/21 12:48:22
>>318
著作権も考えてからものを言え。
324313:05/01/21 13:00:42
>>317
なるほどわかりました。ありがとうございました。
325デフォルトの名無しさん:05/01/21 20:57:06
VC++7.1なんですけど
class A : public float
{...
が通りません。
仕様ですか?
326デフォルトの名無しさん:05/01/21 21:02:17
>>325
しょうです
327デフォルトの名無しさん:05/01/21 21:28:42
>>325
float はクラスじゃないだろ。
328デフォルトの名無しさん:05/01/21 22:55:42
>>325
その発想はすごい
329デフォルトの名無しさん:05/01/21 23:26:56
>>328
なんで?
330デフォルトの名無しさん:05/01/22 09:31:31
bcc32を使っています。3つ質問があります。
ぐぐっても入門書を漁っても解決できませんでした…。
一つ目は、
class test{
char test[3]=3;
};
とすると初期化できないというエラーがでるんですが、文法的に間違っているんでしょうか?
2つ目
test.cpp
int main(void){
char test[2][2][2]{
2,2,2,2,2,2,2,2,
};
return 1;
}

とすると「初期化子の一部のみに括弧が付いている」という警告が沢山出て困っているんですが
どういう意味の警告か分かりません。どうすればこの警告が消せますか?

3つ目は入門書には配列は右から詰め込むと書いてあったので、下のようにすると
今度はさっきのに加えて初期化子が多すぎるとエラーがでます。
int main(void){
char test[2][2][2]={
{2,2},
{2,2},

{2,2},
{2,2},
};
return 1;
}
何がどうなってるのかさっぱり分かりません。どなたかよろしくお願いします…。
331330:05/01/22 09:54:26
class test{
char test[3]={1,2,3};
};
でした。よく探すと、初期化リストでは出来ないと書いてありました。すみません。
332330:05/01/22 10:02:05
2つ目も間違ってました。char test[2][2][2]=...です。ホントすみません。
333デフォルトの名無しさん:05/01/22 10:04:36
>>330-
> 何がどうなってるのかさっぱり分かりません。
俺にはお前がなんでそんなに混乱してるのかがわからんよ。
おちつけ。
334330:05/01/22 10:19:32
分かりました!カッコが足りませんでした。
ホントわけわからんくなってました。
二次元配列と同じ書き方だとダメなんですね…。
一人でスレ汚してすんません。
335デフォルトの名無しさん:05/01/22 10:31:28
char test[2][2][2] = {
{{2,2},{2,2},},
{{2,2},{2,2},}
}
336デフォルトの名無しさん:05/01/22 14:07:36
lmjoin.hを探しています。
Windows2000/XP VC++6.0 いずれもサービスパック等は当てていません。
lmjoin.hはどのように入手するのが良いですか?
337336:05/01/22 14:09:20
sageちゃいました。すみません…
338デフォルトの名無しさん:05/01/22 14:52:45
>336
目的と用途は?
339デフォルトの名無しさん:05/01/22 16:18:19
UNIX環境ではconio.hなどが使えないためにkbhit()やgetch()が使えませんが
これらを実現するための方法をご教授願います。
340デフォルトの名無しさん:05/01/22 16:21:10
>339
upxのソースに完璧な移植例がある
341デフォルトの名無しさん:05/01/22 16:39:20
>339
readlineのソース見ろ
342339:05/01/22 16:58:46
>>340-341
ソースをみてみました。参考にさせて頂きます。
ありがとうございました。
343デフォルトの名無しさん:05/01/22 21:12:00
test
344デフォルトの名無しさん:05/01/23 00:58:44
>>338
インターネットが使えなくなってて返事が遅くなってしまいました。
NetJoinDomainを使いたいのですが、lmjoin.hのインクルードが
必要らしいために探しています。
345デフォルトの名無しさん:05/01/23 07:45:19
346336:05/01/23 13:34:54
>>345
ググってわからなかったのでこちらにお伺いしたのです…
英語のサイトにあるらしいことは知っているのですが、お恥ずかしい
話ですがどれをダウンロードしたら良いのかがわからないんです。
347デフォルトの名無しさん:05/01/23 13:46:41
工エエェェ(´д`)ェェエエ工
348デフォルトの名無しさん:05/01/23 13:48:56
>>346
とりあえずSP当てろ
あと幼稚園からやり直せ
349デフォルトの名無しさん:05/01/23 13:49:41
>>346
1番目のページに書いてある。
350336:05/01/23 14:17:53
>>348
やはりSPは必要ですか。環境を作成した人が異なるので、提案は
してみます。

>>349
一番目のページに書いてあるのは
ttp://msdn.microsoft.com/downloads/default.asp?url=/downloads/topic.asp?URL=/MSDN-FILES/028/000/123/topic.xml
のことだと思うのですが、このページのどれが対象なのかがわかりません。
最新のSDKってことで
Platform Software Development Kit Redistributable: Microsoft Layer for Unicode on Windows 95, 98, and Me Systems, 1.1.3790.0
かと思いましたが、XP/2000ではないようですし。
何か根本的に間違ってるでしょうか…
351デフォルトの名無しさん:05/01/23 17:08:06
>>350
Win32APIスレのPlatform SDK Update
352336:05/01/23 18:10:25
>>351
無事見つけてダウンロードできました。
本当に感謝しています。ありがとうございました。
353デフォルトの名無しさん:05/01/24 23:16:25
C++を用いたプログラミングでstdio.hをインクルードして
printfを使って表示したりするっていうのは、あまり良くないプログラムですか?
stirng型を表示しない場面においてはcoutよりprintfの方が
使いやすかったりするので、coutとprintfの両方を使ったりしてもいいのでしょうか?
354デフォルトの名無しさん:05/01/24 23:25:24
stdioを使うのはかまわない(cstdioにすべきという話は別)。sprintfとか便利だしね。

ただ、同一プログラムでiostreamとstdioの入出力を使うべきではない。
誤動作する可能性が充分にある。
355デフォルトの名無しさん:05/01/24 23:40:22
意図したとおりの動作にならん可能性はあっても誤動作はしないだろ、普通。
356デフォルトの名無しさん:05/01/24 23:49:36
cout と printf() を併用した場合、バッファリングが気になるところ。
357デフォルトの名無しさん:05/01/25 00:05:45
意図したとおりに動かないことを誤動作というんじゃないのか?
>>356が言うように、先にprintfした内容が後でcoutに出した内容の後に出てくるようなことでしょ。
358デフォルトの名無しさん:05/01/25 00:13:54
http://dictionary.goo.ne.jp/search.php?MT=%B8%ED%C6%B0%BA%EE&kind=jn&mode=0
ごどうさ 2 【誤動作】


コンピューターなどが、命令した以外の動作をすること。誤作動。
359デフォルトの名無しさん:05/01/25 00:14:37
命令通りに動いてはいるんだから、誤動作ではないだろうな
360デフォルトの名無しさん:05/01/25 01:02:00
>>357
プログラムは思ったとおりには動かない。
作ったとおりに動く。

意図した通りに動かないのは誤動作だなんて言訳は通用しません。
361デフォルトの名無しさん:05/01/25 01:17:00
最近はGCが取りざたされてるけど、
ブラックボックス的にプログラムの流れを制御する機構にちょっと不信感があるのは
>>360の言うような感覚が染みついてるからかもしれん。
362デフォルトの名無しさん:05/01/25 01:19:22
「コンピュータなんて、俺が言ったとおりに動いてりゃいいんだよ!」みたいな。

俺もそう思う口だが。
363デフォルトの名無しさん:05/01/25 02:43:06
364デフォルトの名無しさん:05/01/25 03:12:04
コンデンサ液漏れ&破裂で誤動作っていうのは最近多いんだが。
365デフォルトの名無しさん:05/01/25 03:15:11
某芝製の15"モニタがタバコの脂の所為か、1/2の確率でコンデンサから火を噴いたのには笑ったが。
366デフォルトの名無しさん:05/01/25 03:45:44
火事をどうやって未然に防ぐかの方で、意見を言わせて頂きます。

思うのですが、
1.CPUのクロックダウンが出来るようであれば、BIOSでFSBクロックを下げて、全体の発熱をおさえる。
2.CPU coolerソフトを導入し、CPU使用率を100%以下にし、CPUの発熱を抑える。
3.放熱を妨害するホコリがパソコン内部へ極力侵入しにくい様にする。
4.熱伝導の良い大きなアルミ板の上にパソコンを乗せて、少しでも熱を逃がす。
このくらいしか思いつきません。


消極的な対策としては、
1.鉄製のプリンタの消音BOXで、延焼を防ぐ。
という手もあるかも知れません。
367デフォルトの名無しさん:05/01/25 09:02:25
>364
この状況を打破したかったら、
アホコンデンサを売ったアホメーカーを某有名サイトでさらせ
368デフォルトの名無しさん:05/01/25 10:06:58
369デフォルトの名無しさん:05/01/25 10:11:32
現在のパソコンにVisualC++6.0が入っているのですが、
新しく購入したVisualC++.net 2003を6.0をアンインストールせずに
導入してもいいものなのでしょうか?
370デフォルトの名無しさん:05/01/25 10:42:04
>>364
そりゃ経年変化による故障ですがな。
371デフォルトの名無しさん:05/01/25 11:46:18
>>353
そこで boost;;format ですよ
372デフォルトの名無しさん:05/01/25 12:03:11
>>370
うちのMBは連続使用してたら8ヶ月くらいで壊れた
373デフォルトの名無しさん:05/01/25 12:05:01
>>369
問題ない。
むしろVC++6をアンインストールしようとする方が危険。
374デフォルトの名無しさん:05/01/25 12:10:43
自作関数内で構造体Foo内のchar var_foo[256]に文字列を格納したいのですが、
int main(void)
{
  struct Foo *foo;
  func_getword(stdin, &foo);

  return 0;
}

void getword(FILE *fp, struct Foo **foo)
{
  fgets(*foo->var_foo, 256, fp);
}
だと左辺が構造体と認められません、どう書けばよいのでしょうか?
375デフォルトの名無しさん:05/01/25 12:18:26
>>373

ありがとうございます、早速インストールしています
376デフォルトの名無しさん:05/01/25 12:22:11
>>374
>*foo->var_foo
* 付けて、何がしたいんだ?
377デフォルトの名無しさん:05/01/25 12:23:01
っていうかfoo確保せんでいいの?
378デフォルトの名無しさん:05/01/25 12:28:57
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< ぱいちんこぱいちんこ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぱいちんこ!
ぱいちんこ〜!    >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」               ̄     / /

379デフォルトの名無しさん:05/01/25 12:33:09
>>376
えっと自作関数内のfooが指しているのはmain関数内のfooの先頭アドレスだから
その中身の構造体Fooを参照するには*演算子かなと・・・
もうワケワカリマセン
>377
省いてしまいましたがmallocはやっています
380デフォルトの名無しさん:05/01/25 12:39:03
コードが長くなるとしても処理によって関数を作っていった方がいいですか?
例えば、
文字列入力の為にmallocの処理を使ったとした場合、
main関数の他に入力用関数とmalloc用関数
みたいな感じで。
381デフォルトの名無しさん:05/01/25 12:41:21
>379
上官に嘘を報告するとは何事だ!あやまれ!

この場合(*pp)->としろ!
382デフォルトの名無しさん:05/01/25 12:44:42
>380
下級兵士が何を抜かす!
おまいの様な奴は黙ってまともな解説本を読め!
二度とここには来るな!時間の無駄だ!
383デフォルトの名無しさん:05/01/25 12:48:42
無能な軍曹あらわる
384379:05/01/25 12:50:14
>>380
隊長、わかりました! 演算子の優先順序ですね!
385初心者歓迎でーす!:05/01/25 12:50:45
ハイ、次の初心者!
386380:05/01/25 12:52:00
>>382
隊長、キビシスギマス! もっとやさしく!
387デフォルトの名無しさん:05/01/25 12:55:04
どこからもほとんど参照されない関数は、存在価値がない
388デフォルトの名無しさん:05/01/25 13:29:10
質問です。環境は XP、VC++ 6.0 です。

Debug モードでコンパイルすると、
>Dxguid.lib(dxguid.obj) : fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください
というエラーが出ました。

HDを検索したところ、Dxguid.lib はプロジェクトの外部に存在し、dxguid.obj は存在しませんでした。
このような外部ライブラリをコンパイルするにはどうすればよいのでしょうか。
389デフォルトの名無しさん:05/01/25 13:36:58
>388
再インストールする。
または、DirectXの製造元に入社してdxguidを再コンパイルする。
390デフォルトの名無しさん:05/01/25 13:55:34
iostreamの拡張について勉強しています。
http://www.jah.ne.jp/%7enaoyuki/Writings/ExtIos.html
を見ているんですが、例えば最初のコンストラクタでAllocConsoleが失敗したとき等のエラー処理は
どんな風にかけばいいんでしょうか?
391デフォルトの名無しさん:05/01/25 14:07:09
>390
throwしてしまえ!
392デフォルトの名無しさん:05/01/25 14:36:53
双方向連結リストなのですが、片道しかわかりません。
nextの場合、↓ですよね。
//連結作業
pos->next = head;
head = pos;

//参照時
for (pos = head; pos != NULL; pos = pos->next)
ではprevの場合はどうかくのでしょうか?
393デフォルトの名無しさん:05/01/25 15:16:19
>>389
SDK 再インストールでうまく行きました。ありがとうございました!
394デフォルトの名無しさん:05/01/25 15:41:08
デバッガを使いたいのですがそのためにLog.txtに書き込みを行ないたいのですが
OutputLog()という関数で引数として渡されてきたデータを文字に変換して
それを書き込みたいのですが例えば引数としてint型やFloat型などいろいろな
型が通っても大丈夫にする方法ありますか?
それと命令でフォルダが存在するかどうかを知る命令はありますか?
395デフォルトの名無しさん:05/01/25 15:51:24
>>394
C++ならtemplate使えば
396デフォルトの名無しさん:05/01/25 15:53:25
>>394
「ですが」が3回も繰り返されていて何が言いたいのかよく判らないんですが。
取り敢えず、stdio.hのprintf()の宣言でも見てみたら如何でしょうか。
フォルダが存在するかどうかを知る命令は、「フォルダが存在するかどうか教えろ」でどうでしょう。
関数名を知りたいのなら、環境依存なので一概には言えません。
397デフォルトの名無しさん:05/01/25 15:54:38
>>394
C++にフォルダが存在するかどうかを確かめる関数はない。
398デフォルトの名無しさん:05/01/25 15:55:20
boost::filesystem使え
399デフォルトの名無しさん:05/01/25 16:15:19
>>354-356
ios_base::sync_with_stdio()
400390:05/01/25 17:06:42
>>391
(・◇・)ゞラジャ
401デフォルトの名無しさん:05/01/25 17:11:19
>>400
既にコンソールが割り当てられている状況でもAllocConsoleは失敗する。
だからGetStdHandleがINVALID_HANDLE_VALUEを返すかどうかでthrowするか判断した方がいいんじゃないか?
402デフォルトの名無しさん:05/01/25 19:30:22
>>394
#define OutputLog fprintf

真面目にやるなら可変長引数。va_arg を調べれ。
403デフォルトの名無しさん:05/01/25 19:39:28
はじめまして。以下の課題が完全にお手上げです。どうかアドバイスをお願いします。
1 文字列をキーボードから読み取り、その文字列を暗号化した文字列を表示するプログラム。ただし、入力する文字列は英数記号のみとする。
2 暗号化は次の方法で行う。文字列中のローマ字を大文字小文字を問わず下記に示すとおりの置き換えを行う。
3 ローマ字以外の文字は暗号化しない。
a b c d e f g
  ↑ ↑ ↑ ↑ ↑ ↑ ↑
↓ ↓ ↓ ↓ ↓ ↓ ↓
n o p q r s t
環境はBC++5.5.1 WinXPです。よろしくお願いします。
404デフォルトの名無しさん:05/01/25 20:05:52
>>403
スレ違い

>「ぼるじょあがC/C++の宿題を片付けますYO! 39代目」
405デフォルトの名無しさん:05/01/26 00:16:46
MYFUNC.DLL内にMyfuncがあり、下記のソースで呼び出そうとしているのですが落ちます。

typedef int (WINAPI *LPMYFUNC)(const HWND _hwnd,LPCSTR _szCmdLine,LPSTR _szOutput,const DWORD _dwSize);
LPMYFUNC lpMyfunc;
HINSTANCE hdll = LoadLibrary("MYFUNC.DLL");
if(hdll == NULL){
printf("MYFUNC.DLL が見つかりませんでした。\n");
exit(-1);
}
lpMyfunc = (LPMYFUNC)GetProcAddress(hdll ,"Myfunc");
lpMyfunc(GetForegroundWindow(),cmdLine,buf,sizeof(buf));

おそらく最終行で0x00000000に書き込もうとして、落ちてしまうみたいなんですが、
どこを直せばいいのかご教授お願いします。
406デフォルトの名無しさん:05/01/26 00:45:24
>>405
あんたの頭
407405:05/01/26 00:48:46
>>406
ちょくちょく修理に出してます。
408デフォルトの名無しさん:05/01/26 00:52:40
(*lpMyFunc)(GetForegroundWindow(), cmdLine, buf, sizeof(buf));
じゃないか?
というかコンパイル通ったのか?それ
409405:05/01/26 00:58:44
レスありがとうございます。
実は
(*lpMyFunc)(GetForegroundWindow(), cmdLine, buf, sizeof(buf));
でもやってみてあったんですが、
コンパイルは共に通り、同じように0x00000000に書き込もうとして落ちます。
一応コンパイラーは
bc++ 5.5です。
410デフォルトの名無しさん:05/01/26 01:00:15
それはGetProcAddressでコケてるんじゃないかな。
同名関数がちゃんとexportされてるか、exescopeあたりでdllを調べてみては。
411デフォルトの名無しさん:05/01/26 01:02:11
>>410のいうように、どうせextern "C"でexportしないでGetProcAddressが失敗してるだけ。
戻り値のチェックもしてないし。

最初に環境すら示そうとしないんだからその程度。
412405:05/01/26 01:07:59
実は、tar32.dllから、
Tar関数を用いて
解凍処理をしたいなと思ってまして、質問いたしました。
ドキュメントを見る当たり、関数名はTarであっている気がしますが、
もしヒットしていないなら、

if(lpTar == NULL){
printf("Tarが見つかりません。\n");
exit(-1);
}
上記には書きませんでしたが、
で弾かれますよね?
413デフォルトの名無しさん:05/01/26 01:11:42
>で弾かれますよね?
じゃねーよ
自分で確かめろよそのくらい
知恵遅れじゃあるまいし
414デフォルトの名無しさん:05/01/26 01:14:00
printf("%p\n", lpTar);
で0x00000000になってるかチェック
415デフォルトの名無しさん:05/01/26 01:15:47
NULLがオールゼロビットとは限りませんが
416デフォルトの名無しさん:05/01/26 01:18:02
BCC32って言ってるんだからいいだろ
417405:05/01/26 01:22:56
>>414
printf("%p\n", lpTar);
の結果
10009F84
です
418デフォルトの名無しさん:05/01/26 01:25:06
じゃあ与えてるパラメータが悪いのかもな。
419デフォルトの名無しさん:05/01/26 01:25:50
というかもう、デバッガで追った方が早そう。
420405:05/01/26 01:43:45
やはり修行が足りないようです。
修行しなおして
出直します。
低レベルですみません。
また何かあったときは宜しくお願いします。
回答者の皆様アドバイスどうもありがとうござした。

この短いプログラムで一週間も… orz
つうさんgoogle二桁後半…
自分なりに今のレベルで考えられることをし尽くしました。

>>413さんの言うように知恵遅れなんでしょう。
では失礼。
421デフォルトの名無しさん:05/01/26 13:44:32
>>420
初心者スレなんだからいいんじゃねーの。
がんばれ!
422デフォルトの名無しさん:05/01/26 14:03:21
typedef int WINAPI (*LPMYFUNC)(const HWND _hwnd,LPCSTR _szCmdLine,LPSTR _szOutput,const DWORD _dwSize);
423デフォルトの名無しさん:05/01/26 16:39:17
bccで以下のようなことをしたいのですが、hogeに代入するところでエラーが出てコンパイルが通りません。
このようなことは不可能なのでしょうか?

typedef void (__closure *METHOD_PTR)(void);
void sage(void) { }

main() {
METHOD_PTR hoge;
hoge = (METHOD_PTR)sage;
hoge();
}

以下のようにするとコンパイルは通り、正常に動作するのですが‥‥
(通常の関数ポインタを入れたいのでこれはNG)

typedef void (__closure *METHOD_PTR)(void);
class class_a { public: void sage(void) };

main() {
METHOD_PTR hoge;
class_a a;
hoge = a.sage;
hoge();
}
424デフォルトの名無しさん:05/01/26 16:58:11
bccはよく知らんが、メンバ関数へのポインタとフリー関数へのポインタを
統一的に扱いたいなら、boost::functionを使うといいと思う。
425デフォルトの名無しさん:05/01/26 17:50:38
C言語でfgetsを用いてファイルから例えば
200 3 20
10 200 300
1 20 3
という数字を読み込んで、その縦の数字をそれぞれたすには
どうすればいいですか?教えてください
426デフォルトの名無しさん:05/01/26 17:54:45
>>425
#define N 3
int i, j, (*num)[N], sum[N];

//ここでnumに読み込む。

for (i = 0; i < 行数 i++)
 for (j = 0; j < N; j++)
  sum[i] += num[j][i];
427デフォルトの名無しさん:05/01/26 17:58:02
>>425
ありがとうございます。
428デフォルトの名無しさん:05/01/26 17:58:46
あっ425ではなくて426だったOTZ
429デフォルトの名無しさん:05/01/26 19:29:01
double型からchar*型に変換したいのですが
有効数字の桁数を指定して変換するにはどうしたらいいですか?

小数点以下何桁という指定はできるのですが、有効数字何桁の指定がわかりません

環境はVisualC++2003のWindowsXPです
430423:05/01/26 20:16:11
>>424
ありがとうございます。
VCLがらみだから無理か‥・orz
431デフォルトの名無しさん:05/01/26 20:31:50
>>429
#include <sstream>
char* scientific(double d, int n, char* c, int size)
{
    std::stringstream ss;
    std::scientific(ss);
    ss.width(size);
    ss.precision(n - 1);
    ss << d;
    ss >> c;
    return c;
}

#include <iostream>
int main()
{
    char c[256];
    std::cout << scientific(1.23456789, 8, c, sizeof(c));
}
432デフォルトの名無しさん:05/01/26 23:21:04
>>423
クラスのメソッドと関数では型が違う。
433デフォルトの名無しさん:05/01/27 00:23:26
質問です。XP、VC++ 6.0 です。

class CParent
{
 public:
  func(int a, int b);
};

class CChild: public CParent
{
 public:
  func(int n);
};

と定義し、

CChild child;
child.func(x, y);

とすると、不正な2つの実引数を持って呼び出されたとエラーがでます。
クラス CParent, CChild の func は引数の個数が違うため、
オーバーロードされないと思うのですが、
なぜこのようなエラーが出るのでしょうか。

child.CParent::func(x,y); とすれば動くことは動くのですが……。
434デフォルトの名無しさん:05/01/27 00:27:56
>>433
継承による同名の関数宣言は、オーバーロードとはならず、隠蔽されます。
従ってエラーが出ます。

コンパイラに隠蔽ではない事を伝えるには
using CParent::func;
とすればよいです。
435デフォルトの名無しさん:05/01/27 00:28:42
public に、だな
436デフォルトの名無しさん:05/01/27 00:31:32
>>434
そそ。具体的には
class CParent {
public:
void func(int a, int b) {}
};

class CChild: public CParent {
public:
using CParent::func;
void func(int n) {}
};
437デフォルトの名無しさん:05/01/27 00:32:42
あ、>>436>>435さんに対するレスのつもりでした。
いやしかしC++は細かい変なルールがたくさんあって、忘れずにいるだけでも
大変だわ。。。。
438デフォルトの名無しさん:05/01/27 00:36:36
C++ FAQ, 禿本, Effective C++ には良くない設計の兆候として書かれてたよな
439デフォルトの名無しさん:05/01/27 00:44:13
>>438
C++FAQのFAQ7.06で、public継承した子クラスが親クラスの関数を隠蔽する
時点で、設計が間違っていると書いてあるな。

a-kind-ofなんだから、仮想関数で振る舞いを変えるのならわかるが、親クラス
の関数がデフォルトで使えなくなった時点で、もはや継承関係はぶっ壊れているも
同然だ。
440デフォルトの名無しさん:05/01/27 00:46:15
>>438
読んだけれど、実感と理解はしていないんだね?
441433:05/01/27 00:56:13
数々のレスありがとうございます。
using 〜 を使う方法で上手く行きました。

>>439 の話に興味が沸きましたので色々調べてみたいのですが、
この方法自体に名前はついているのでしょうか?
名前が分かれば調べやすいので。
442デフォルトの名無しさん:05/01/27 00:59:05
>>441
いや・・・・その前に、public継承の意味を正しく理解する事の方が先だ。
その上でusing宣言をすべきだと思う。
そもそもusing宣言は、friend宣言と同じく、C++のカプセル化の原則を
無視する危険なキーワードなので、乱用はよくない。
443433:05/01/27 01:01:46
>>442
確かに、実は最近まで 継承 = public と思い込んでいて、
他の方法での継承を学んだことがありません。
いい機会なので学んでみることにします。ありがとうございました。
444デフォルトの名無しさん:05/01/27 01:03:04
>>441
調べるだけなら
using-declaration
でぐぐってみ。
445デフォルトの名無しさん:05/01/27 20:05:54
Windows2000SP4,VC++6.0SP6でエスケープシーケンスの為
config.ntでdevicehigh=%SystemRoot%\system32\ansi.sysを追記して
command.com内でプログラムを実行しましたが意図どおりに表示できません。

例:反転のエスケープシーケンスの場合
(k/bのenter記号)[7;32m

どうしたら出来るのでしょうか?教えてください。
446デフォルトの名無しさん:05/01/27 21:22:17
>>445
NT系ではエスケープシーケンスは使えない。
447デフォルトの名無しさん:05/01/27 21:34:02
GetProcAddressに自モジュールハンドルを渡して文字列経由で関数呼び出しをしたいのですがリンク時に
エントリポイント '_mainCRTStartup' は 12 バイトの引数を持つ __stdcall ではありません。イメージは動作しない可能性があります
と警告が出て実行すると有効なWin32アプリでないといわれてしまいます. リンクオプションに/DEF:"test.def"を追加しています.
EXPORTS mainCRTStartupを加えてみたり__stdcallをmainCRTStartupの宣言に加えてみたりしたのですがだめでした
以下ソースコードです
#include <windows.h>
#include <iostream>
typedef void (*func_t)();
void Hello()
{
  std::cout << "Hello" << std::endl;
}
int main()
{
  HMODULE this_exe = GetModuleHandle(NULL);
  func_t hello= (func_t)GetProcAddress(this_exe,"Hello");
  hello();
  return 0;
}
以下test.defです
LIBRARY test
VERSION 1.0
EXPORTS Hello

ttp://hp.vector.co.jp/authors/VA023539/tips/dll/006.htmにdefファイルを作れば__declspec(dllexport)がいらないと
書いてあったのでできるだけdefファイルを使いたいです
448デフォルトの名無しさん:05/01/27 21:41:37
>>447
「_mainCRTStartup' は 12 バイトの引数を持つ __stdcall ではありません。」
というのはつまり普通のDLLだとDllMainを呼ぶべきところがEXEファイルだと
DllMainにあたる関数が_mainCRTStartupであり、_mainCRTStartupは引数を1つも取らないから変なことになる。

ちゃんとDLL作って試せ。
449445:05/01/27 22:11:13
>>446
うーむ、そうですか。初心者としてこの機能が使えないのは痛い・・・
重ねてすみませんが、代替機能(画面消去・カーソル移動)などありますか?

450デフォルトの名無しさん:05/01/27 22:29:28
451デフォルトの名無しさん:05/01/27 22:39:41
>>449
共にありません。
452デフォルトの名無しさん:05/01/27 22:40:24
450:デフォルトの名無しさん:05/01/27 22:29:28
http://afterbeatclub.hp.infoseek.co.jp/frame.html
広めて下さいorz
453デフォルトの名無しさん:05/01/27 22:42:06
452:デフォルトの名無しさん:05/01/27 22:40:24
450:デフォルトの名無しさん:05/01/27 22:29:28
http://afterbeatclub.hp.infoseek.co.jp/frame.html
広めて下さいorz
454447:05/01/27 22:48:18
exeとは別にdllを作りexeからdllを呼び出し成功しました.
確かにdefファイルを使えば__declspec(dllexport)をつけてない関数をよびだせました.
文字列経由で関数呼び出しの件なのですがとりあえずdefファイルをあきらめ
extern "C" __declspec(dllexport) void Hello(){...}としたら自exeの関数を呼び出せました
しかしdefファイルをリンクオプションに付け加えると448さんの言うとおりDllMain( 12 バイトの引数を持つ __stdcall)が
ないため起動不可のexeになってしまいます.えせDllMainをつけても実行されませんでした.
defファイルはdllを作るときにしか使ってはいけないのでしょうか
defファイルを使いつつエントリポイントをmainCRTStartupにしても呼び出せる方法はありますか?
455デフォルトの名無しさん:05/01/27 23:24:41
>>454
test.defの
 LIBRARY test
がいらない。

参考
http://www.microsoft.com/japan/developer/library/vccore/_core_library.htm
456447:05/01/27 23:46:40
おお 動きました. ありがとうございました
457デフォルトの名無しさん:05/01/28 01:32:28
急に悪いんだけど、おまいらアイコン作るときどんなツール使ってる?
普通にVC?それともなんか別のツール使ってる?
何かお勧めのツールあったら教えてくれ
458デフォルトの名無しさん:05/01/28 01:55:59
D-Pixedにico出力フィルタ入れて使ってる
459デフォルトの名無しさん:05/01/28 02:12:27
テキストエディタで書いて、IrfanViewで表示してCopy&Paste
460デフォルトの名無しさん:05/01/28 04:00:08
他のプログラムからコンソールに出力される文字列を、自作プログラム中の変数に入れるには
どうすればいいですか?
461デフォルトの名無しさん:05/01/28 04:48:56
パイプでいいのでは?
A>B

462デフォルトの名無しさん:05/01/28 05:23:14
>461
すみません、書き方が悪かったです。
サーバプログラムAがあって、AからはSTDOUTにログが出力されます。
Aから出力されるログを、リアルタイムに自作プログラムBで受け取るということを行いたいのですが
無理でしょうか?
463デフォルトの名無しさん:05/01/28 05:25:17
パイプでいいのでは?
A>B
464デフォルトの名無しさん:05/01/28 05:26:23
間違った。
A|B
465デフォルトの名無しさん:05/01/28 05:38:10
>462
パイプについて調べてみます。ありがとうございました
466デフォルトの名無しさん:05/01/28 09:38:16
STLのvectorからchar*に変換したいんですが、どうすればいいんでしょうか。
vectorの内容をchar*の外部ライブラリの関数に渡したいんです。
467デフォルトの名無しさん:05/01/28 09:39:09
vectorの型は何ですか?
vector<T>のT
468デフォルトの名無しさん:05/01/28 09:50:19
>>449
あるよ。
コンソールAPIで調べれ。
GetConsoleなんとか、SetConsoleなんとか。
469デフォルトの名無しさん:05/01/28 09:52:05
>>467
froat*です。
どうもすいません。
470デフォルトの名無しさん:05/01/28 09:52:59
>>469
プログラムやめろ
471466:05/01/28 09:53:44
>>467
char型です。
472デフォルトの名無しさん:05/01/28 09:54:41
>>471
&vec[0]
473デフォルトの名無しさん:05/01/28 09:56:44
Null-terminated じゃないっしょ
474デフォルトの名無しさん:05/01/28 09:58:23
push_back('\0');


&vec[0]


pop_back();

475466:05/01/28 10:00:16
なるほど!
ありがとうございました。
476デフォルトの名無しさん:05/01/28 11:07:12
そういう真似が必要となる状況について詳しく
477デフォルトの名無しさん:05/01/28 11:54:16
全部で、3000個程の小数を書き込んだ(1行ずつ改行した)、
テキストファイルから、最大値を求めたいです。
ネットで、「n個の最大値を入力して求める」プログラムを見つけましたが、
とても3000個は入力できません。
どうか、そのプログラムを教えて下さい。
478デフォルトの名無しさん:05/01/28 12:01:31
しかもマルチだったか
479秘密K殺隊員8号:05/01/28 12:09:08
>477
無断多重投稿の現行犯で逮捕する!
480デフォルトの名無しさん:05/01/28 12:15:14
>>479
申し訳ありませんでした。
掲示板の決まりを知りませんでした。
別の所で、「宿題」のスレッドに書くように
教わったので、今からそちらに書かせていただきます。
失礼しました。
481デフォルトの名無しさん:05/01/28 12:21:41
>>460
環境によってやりかた変わるんだけど。
482デフォルトの名無しさん:05/01/28 15:52:10
ヌルポインター!
483デフォルトの名無しさん:05/01/28 16:54:26
ガッインター!
484デフォルトの名無しさん:05/01/28 23:48:55
ロングダブル!
485デフォルトの名無しさん:05/01/29 03:57:49
セミダブル!
486デフォルトの名無しさん:05/01/29 04:42:45
アンサイントイント!
487デフォルトの名無しさん:05/01/29 11:17:42
もしかしてアンサイン「ド」じゃなくてアンサイン「ト」が正しい発音なの?
488デフォルトの名無しさん:05/01/29 12:06:27
>>487
dでいいよ。
489デフォルトの名無しさん:05/01/29 16:18:18
アンサインドダブル!
490デフォルトの名無しさん:05/01/29 16:18:45
ダウト!!!
491デフォルトの名無しさん:05/01/29 20:33:23
谷原「カミングダウト」
492デフォルトの名無しさん:05/01/30 13:58:24
ホクト!
493デフォルトの名無しさん:05/01/30 14:25:27
アンサインドホクト!
494デフォルトの名無しさん:05/01/30 14:32:19
Gackt!
495デフォルトの名無しさん:05/01/30 16:06:47
質問です。VC.Net2003 を使っています。

//myapp.h内に記述
class A
{
public:
static int get_a(){return a;}
private:
static int a;
};

int A::a;

という構成のヘッダを使ってプロジェクトをコンパイルしようとすると、LNK2005(シンボルの重複定義が行われている?)というエラーが発生します。
そこで、#pragma message("INC")とプリプロセッサを記述して、インクルードされた回数を確認したところ、複数回インクルードされているようなのです。
#pragma once/#ifndef myapp_inc~形式も試したのですが、変化がありませんでした。
myapp.hは、他のヘッダファイルからも参照されています。
これは、普通の事なのでしょうか。
入門中なので、正常な範囲なのか、異常なのかがわかりませんorz
よろしくお願いします。
496デフォルトの名無しさん:05/01/30 16:24:05
>>495
int A::a; は定義。定義はプログラム中で一回だけでなければいけない。
この定義が書かれたヘッダを複数のソースファイルでインクルードすると、
定義が繰り返されるので、結果としてエラーになる。
497デフォルトの名無しさん:05/01/30 16:56:14
>>496
ありがとうございます。
#pragma onceや#ifndef~の内側なら問題ないかな、と思っていたのですが、だめだったのですねorz
ということは、class b{static const int b=1;};とかもダメかな、と思って試してみたら、問題なし・・・
つまりは、同じクラス定義はオブジェクト上に複数存在することができて、静的なメンバ変数とかのインスタンスが複数あると、まずいということなのでしょうか・・・
staticなメンバ関数とかは・・・と考えると、泥沼にはまりそうです。
奥が深い...orz
498デフォルトの名無しさん:05/01/30 16:59:11
最近の入門者は、いきなり#pragma onceや#ifndef~なんて使うのか
499デフォルトの名無しさん:05/01/30 17:05:52
>>497
記銘忘れました。>>497>>495の発言です。

>>498
オライリーのC++クイックリファレンス片手に、Modern C++ Design読んでる程度ですorz
500デフォルトの名無しさん:05/01/30 17:34:36
>>497
static constは整数型のときだけenumや#defineから置き換えられるよう、そういう風にクラス内で初期化できる。
(その場合cppファイルに定義を書く必要はなくなる)
501デフォルトの名無しさん:05/01/30 20:12:15
>>499
きみみたいな優秀な新人がうちにも欲しいよ
502デフォルトの名無しさん:05/01/30 20:22:17
>>501
俺が行ったげる。



やべ、新人でも優秀じゃねえや
503デフォルトの名無しさん:05/01/30 20:27:43
俺はもっと優秀だよ
504デフォルトの名無しさん:05/01/30 22:53:13
>>497
ようするにヘッダファイル内で実体を作っちゃダメ。
型とか関数とかの宣言だけにしとけばいい。
マクロでごまかして変則的な作りにすることはできるけど、
あまりオススメできない。
505デフォルトの名無しさん:05/01/30 23:17:16
そんなあなたに__declspec(selectany)
506デフォルトの名無しさん:05/01/30 23:47:07
質問です。
以下のようなコードを書いたところ、
"構造体または共用体中にサイズが 0 の配列があります。"
とエラーが出ました。
原因はfunc()で宣言された"A<N-1> a;"で、
順次N-1のクラスを展開(?)していくことになり
最終的にN=0のものを展開してint array[0];としてしまうことにあるようです。

template <int N>
class A{
private:
int array[N];
/* 中略 */
public:
/* 中略 */
int func(){
A<N-1> a;

if(N==1)
return0;

/* a使ったなんらかの処理。途中a.func()等の値を使う*/

return hoge;
}
}

テンプレートを使った再帰的な処理をしたかったのですが
なにかよい書き方は無いのでしょうか。
ご教授お願いします。
環境はVC++5.0とg++です。
507デフォルトの名無しさん:05/01/31 00:15:05
>>506
何したいのか今いちわからないけどこんな感じ?
テンプレートの特殊化がコンパイラによっては通らないかも
template <int N>
class A{
private:
int array[N];
/* 中略 */
public:
/* 中略 */
int func(){
cout << N << endl;
A<N-1> a;
/* a使ったなんらかの処理。途中a.func()等の値を使う*/
return a.func ();
}
};
template <>
class A <1>{
private:
int array[1];
/* 中略 */
public:
/* 中略 */
int func(){
cout << "1" << endl;
return 0;
}
};
508495:05/01/31 10:04:45
>>500,>>504
ありがとうございます。
多重インクルードの回避の方法があり、それを適用しているにもかかわらず、定義が複数回行われてしまう、ということが不思議でしたが、そういうもんなんだと理解することにします。
コンパイラオプションで、ソースだけ出力、アセンブリだけ〜等をして、解析できるスキルがあればいいんですが、とても・・・orz
C++、奥深いです。
509デフォルトの名無しさん:05/01/31 10:09:25
>>508
プリプロセッサはコンパイラの前段階で実行されるのー にゃんにゃん
510デフォルトの名無しさん:05/01/31 10:16:11
たぶん、というか間違いなく、
#includeによって何が行われるかと、
分割コンパイルというのがどういうものなのかを
正確には理解していない。

アセンブラがどうこう言い出す時点で、極めて先行き不安。
511デフォルトの名無しさん:05/01/31 10:22:37
わー、英雄にゃんにゃんだ!にゃんにゃんが来たからもう安心だー>>509
512デフォルトの名無しさん:05/01/31 10:28:44
>>511
キミたちのプログラミングの平和はボクが守るよー にゃんにゃん
513495:05/01/31 10:28:59
>>509-510
includeは単なるテキスト置換で、ルートとなるcppファイルからツリー状にヘッダが展開されてって、結果として得られたクラス定義等がつまってるcpp??をアセンブリに変換して・・
実際のインスタンスは、cppに書いてあるから単一だけど、ヘッダでのクラス定義等は重複しうる。
で、最終的なリンクにおいて、未定義な部分と結合される・・・
って感じで理解してるんですが、だめですかorz
どっかのサイト斜め読みしたうろ覚えな記憶で・・・ あ。
そっか、最終的に結合されるときは、差分だけを結合するわけじゃなくて、機械的な結合だから、ヘッダ内に何らかの実体があると複数回、それが存在することになって・・・・
という脳内補完が降臨したんですが、いいのでしょうか・・・
514デフォルトの名無しさん:05/01/31 10:34:49
--test1.c--
int main() { return 0; }
--test2.c--
int main() { return 0; }

この2つを合わせて実行ファイルを作ろうとするとエラーになる。
それと同じ。
515デフォルトの名無しさん:05/01/31 10:35:19
では問題、
a.hに
void func();
static int a;
と書かれているとして、
a.cpp,は
#include <iostream>
#include "a.h"
int main() {std::cout << a; func(); std::cout << a; return 0;}
b.cppは
#include "a.h"
void func() {a = 1;}
だったとしよう。

さぁどうなる。
516デフォルトの名無しさん:05/01/31 10:44:20
簡単なことをわざわざ難しく考えてなんとかしようとする人を
俗に「センスがない」と言う。

ちょっと前に別スレで
sprintf一発で済むところをstrcatを組み合わせて
ごちゃごちゃやっている人がいたが、それと同じ。
ポインタを難しいものと考える人もこの部類か。

もちろん、「センスのなさ」は
ある程度は「慣れ」でカバーできる。
517495:05/01/31 10:47:31
>>515
なんか僕への問題っぽいですね。ありがとうございます。
初期化されてないaが出力されてから、1が出力される・・・・?
518デフォルトの名無しさん:05/01/31 11:21:13
>>517
グローバル変数は、静的かどうかに関わらず0に初期化される。
静的変数は、コンパイル単位ごとにスコープを持つ。
従って、0が出力されてから、0が出力される。

仮にstatic int aではなくてただのint aなら、同じ名前のオブジェクトがそれぞれのコンパイル単位に存在し、
それらがグローバルスコープを持つためにリンケージエラーが起きるはず。
519デフォルトの名無しさん:05/01/31 12:23:54
>>499
そのレベルでModernなんか読んだら大変なことにならないか?
520デフォルトの名無しさん:05/01/31 15:39:12
>>513
>includeは単なるテキスト置換で、ルートとなるcppファイルからツリー状にヘッダが展開されてって、結果として得られたクラス定義等がつまってるcpp??をアセンブリに変換して・・
>実際のインスタンスは、cppに書いてあるから単一だけど、ヘッダでのクラス定義等は重複しうる。
>で、最終的なリンクにおいて、未定義な部分と結合される・・・
>って感じで理解してるんですが、だめですかorz
その理解で大体正しい。
関数や変数の定義は一つの翻訳単位(#includeが処理された後のソースファイルのことね)
にしか存在してはいけない。
一方、型(struct, class, enum, typedef)・inline関数・templateの定義は複数の翻訳単位に
出現しても良い。
例外として>>500が指摘していることがある。

>そっか、最終的に結合されるときは、差分だけを結合するわけじゃなくて、機械的な結合だから、ヘッダ内に何らかの実体があると複数回、それが存在することになって・・・・
>という脳内補完が降臨したんですが、いいのでしょうか・・・
うん。

>>519
あの本はtemplateの知識さえあれば読めるんじゃないか?
521デフォルトの名無しさん:05/01/31 15:53:57
スレちがいな気もするんですが
C、C++とかWindowsプログラミングに出てくるマクロについて詳しく知りたいんですが
どうしたらいいでしょうか?
そもそもマクロが何なのかもわからない状態で、本とか読んでても#define N 100ぐらいしか説明が無いので
行き詰まってます。
522デフォルトの名無しさん:05/01/31 16:00:09
>>521
MSDNやPlatformSDKのドキュメント
それで出てこなければヘッダをgrepしとけ
523デフォルトの名無しさん:05/01/31 16:00:38
そんな程度で良いんじゃない?
524デフォルトの名無しさん:05/01/31 16:01:25
プリプロセッサマクロについて知りたいならまともなC/C++の解説書読め。それで解決する
525デフォルトの名無しさん:05/01/31 16:03:04
>>521
あと、#ifとか#if definedとかと組み合わせて使えれば普通は十分かと。
折れはそれで40年間不便なかった。
526デフォルトの名無しさん:05/01/31 16:32:30
>522-525
即レスありがとうございます。
MSDN読んで足りなかったときは専門書読んでみます。
527デフォルトの名無しさん:05/01/31 16:43:04
メンバ関数ポインタなんですが、
VC++.net2003ではコンパイルして動くみたいなんですが
gcc バージョン 3.4.0だとコンパイルエラーで怒られます。
gccでメンバ関数ポインタは使えないんですか?

#include <iostream>
using namespace std;

class CTest
{
public:
void func();
void funcCall();
};
void CTest::func()
{
void (CTest::*fp)() = funcCall;
(this->*fp)();
}
void CTest::funcCall()
{
cout << "hogehoge" << endl;
}
int main(void)
{
CTest t;
t.func();
return 0;
}
528デフォルトの名無しさん:05/01/31 16:49:16
漏れの脳内コンパイラによると
>void (CTest::*fp)() = funcCall;
ん?何これ意味ワカンネ
だとさ
529506:05/01/31 18:45:58
>>507
ありがとうございました。
テンプレートの特殊化というものを知りませんでした。
おかげでひとつ利口になれました。
下はテンプレートの特殊化でぐぐって見つけたページですが
C++って本当に奥が深いのですね・・・
ttp://www.fides.dti.ne.jp/~oka-t/cpp-labyrinth.html
530デフォルトの名無しさん:05/01/31 18:50:53
>>527
自己解決
void (CTest::*fp)() = funcCall; を
void (CTest::*fp)() = &CTest::funcCall;
に変更したらうごきますた。
531デフォルトの名無しさん:05/01/31 19:03:09
>>529
Modern C++ Design
楽しいよ
532デフォルトの名無しさん:05/01/31 19:12:53
>>528
クラス CTest のメンバ関数 (引数なし、戻り値なし) を指すポインタ fp に
funcCall を突っ込む。

…で >>527 よ。
エラーの位置と内容くらいは書こうや。
533デフォルトの名無しさん:05/01/31 21:40:01
ここで出てくる質問の多くって、エラーメッセージ読めば一発で見当がつくようなのが多いんだよな。
……なんでお前らエラーメッセージを読まないんだ!
534デフォルトの名無しさん:05/01/31 21:48:54
>>533
英語だからだろうよw
535デフォルトの名無しさん:05/01/31 22:36:48
いや、初心者なら普通VC++使うからエラーは日本語だろ('A`)
しかしなんなんだろうね。ものすごくナチュラルに無視してるんだと思うけど。
536デフォルトの名無しさん:05/01/31 22:39:14
エラーメッセージを読んでも意味が分からないとか?
537デフォルトの名無しさん:05/02/01 04:10:34
心のフィルタがかかってて目に入らないんだと思う
そういう人はそもそもプログラミングには向いてない
538デフォルトの名無しさん:05/02/01 09:33:58
>>537
フィルタがかかってるのはオマエ
539デフォルトの名無しさん:05/02/01 10:49:08
>>536
慣れないとさっぱり意味判らん、てのはあるだろうね。
それはまあしょうがないにしても、コードだけ見せて
「どこかがおかしい」としか言わないってのは
(初心者かどうかとは関係なく)
人にモノを訊ねる態度じゃないよなぁ、と思う。
540デフォルトの名無しさん:05/02/01 12:17:37
>>538
都合の悪い評価に対して何も言い返せないからって
そんなに頭の悪い切り返しに走らなくても…(^_^:
541デフォルトの名無しさん:05/02/01 12:21:50
>>539
ソースを晒さず「どうしたら良いですか?」よりはまし。

テンプレートがらみのエラーメッセージは
慣れてないとホントに呪文にしか見えんしな。
542デフォルトの名無しさん:05/02/01 12:37:02
すみません、初心者なんですが、何から始めれば良いかわかりません。
何をすればいいのでしょうか?
543デフォルトの名無しさん:05/02/01 12:40:29
>>542
回線切って首釣る
544デフォルトの名無しさん:05/02/01 12:54:05
>>542
コンピャイラをインスツールする。
545デフォルトの名無しさん:05/02/01 15:29:55
アサートとかアサーションってなんなんでしょうか?

論理エラーをチェックする関数らしいんですが
546デフォルトの名無しさん:05/02/01 15:33:00
>>545
アサルトの訛りだよー つまり攻撃するって事だね。プログラムからの攻撃だお。
547デフォルトの名無しさん:05/02/01 15:46:12
・エラーメッセージを読む
・ぐぐる
これだけ知ってれば10秒で解決するような質問を投げる人間の多いこと多いこと
548デフォルトの名無しさん:05/02/01 16:37:23
それらを頼りに10秒で解決できるようになるまでには
ここで質問する以上のコストがかかるのですから、
質問するという選択は実にまっとうだと思いますが? :-)
549デフォルトの名無しさん:05/02/01 16:38:55
>>548
基礎がたりない。
下らない質問している時間があったら基礎をしっかりと抑えておけ。
そしてこのスレは用済みだ。
550デフォルトの名無しさん:05/02/01 16:45:18
>>548
2chで質問出来るならググるのも簡単だろ。
むしろ、ググる方が簡単で早いだろ。
551デフォルトの名無しさん:05/02/01 16:45:57


12 :Now_loading...774KB:04/06/23 10:56 ID:???
自分SEっぽい仕事してるんですが・・・
要は言われたものを作る仕事です。
言われた以上のものを作るのがプロってもんだと理解はしてますよ。
けど、言われた通りに作っても文句言われるんですよね。
言われた方向で、言われたレベル以上のものを作っても文句言われるんです。

要は、最後の最後で「方向が違う」って言うんですよ。
理不尽でしょ。
嫌になっちゃうでしょ。

FLASHで作品を作っていて、何が楽しいかというと、
自分で考えて、自分がいいと思って、時には制約により妥協しつつも、自分の思いで作品を晒せる。
だから、作品に対してはどんな辛らつなことを言われても甘んじて受け入れられるんですよね。
もちろん一方で楽しんでくれるひともいるからなんですが。

何か疲れた頭で書いたんで文章変なところもありますが、許してください。

別の話ですが、いろいろ言葉を調べたんですが、
「クリエイター」ってのは、言われた方向で、言われたレベル以上のものを作る人を言うそうです。
業種によっては、「エンジニア」もこれに当たるのかな。

自分の良いと思ったもの作り、それを評価してくれる人に提供するのが
「アーチスト」だそうです。

「職人」っていう言葉は前者の「クリエイター」を意味する言葉だそうです。
でも、ここ板の「職人」は、後者の「アーチスト」の類だと思うのです。


552デフォルトの名無しさん:05/02/01 19:40:49
よくchar型の配列をchar[126],char[256],char[1024]
とか2乗の数をよく利用しているのを見ますが、
2乗の数を用いると何か利点があるのでしょうか?
553デフォルトの名無しさん:05/02/01 19:55:31
>>552
メモリチップの容量が2のn乗ビット単位で進化してきたから。↓例
ttp://www.smspower.org/smsreader/cartridge.html
554デフォルトの名無しさん:05/02/01 19:57:18
>>552
マジレスすると「つい出来心で」
555デフォルトの名無しさん:05/02/01 19:58:51
>>552
2バイト文字対応
556デフォルトの名無しさん:05/02/01 20:06:38
>>>555

2バイト文字対応なら1024よりも1000の方がスッキリしていていいような
557デフォルトの名無しさん:05/02/01 20:09:52
1kbyte = 1024 だからじゃないの?
558デフォルトの名無しさん:05/02/01 20:11:45
>>552
マイコン時代はチップの容量が 4k とかだったから、
 &h0000〜&h0FFF まではチップ0
 &h1000〜&h1FFF まではチップ1
とかだったのよ。チップをまたぐと極端に遅くなったりアライメントが
ズレたりするもんだから、プログラマも領域を確保する時はチップを
またがない様に組んだものさ。その名残りさね。
559デフォルトの名無しさん:05/02/01 20:14:49
仮想メモリのページサイズが2^nだからとか?
560デフォルトの名無しさん:05/02/01 20:20:50
メモリって1000確保するのと1024確保するのでは
実際は同じだけのメモリを貰ってるから
結局1024貰ったほうがお徳…とかどっかで聞いた気がする

まぁ、上はあんま当てにならんけど
10進数で割り切れるよりも2のn乗で割り切れたほうが
情報量を計算しやすかったりなんだりで好む傾向にある
561デフォルトの名無しさん:05/02/01 20:31:56
実行ファイル単体を作って実行した場合と
同じソースをdllにして、Javaから呼び出し->実行を行った場合で
実行結果があまりに異なる現象が起きてます(ノД`)

dll内でスレッドを分けているわけでもなく、
メモリリークが発生しているわけでもなさそう(STL酷使でポインタは皆無)
なんですが、他にどういったケースが考えられるでしょうか?
コンパイラはVC7.0,7.1,MinGWで、実行ファイルでの結果はどれも期待通り得ています。

また、Javaは相方が作ったもので、私自身は詳しくありませんので、
なんとなく構文理解ぐらいしかできません。

エスパー待ちになりそうな質問で申し訳ありませんが、
経験談などでも構いませんので、何かヒントになりそうなもの、ご教授ください
よろしくお願いします。
562デフォルトの名無しさん:05/02/01 20:35:16
>>561
呼び出し規約が違う

とりあえず、引数をそのままどっかに出力する関数書いて確認してみ
アドレス貰ってるつもりが値貰ってたりその逆だったりもありえるっしょ
563デフォルトの名無しさん:05/02/01 20:44:44
びっぐてぃんぽ
りとぅてぃんぽ
の違い。
564デフォルトの名無しさん:05/02/01 20:48:00
>>563
でも大きいのが嫌いな人もいるよ
565デフォルトの名無しさん:05/02/01 21:00:06
>>562
ありがとうございます。
ひとまずひたすら値を調べてみます。
566デフォルトの名無しさん:05/02/01 21:05:56
>>564
いないよ
567デフォルトの名無しさん:05/02/01 21:12:16
>>566
いるって。
568デフォルトの名無しさん:05/02/01 22:32:15
質問です。XP、VC++ 6.0 です。

CString 型 str の値によって大量の分岐を行ないたいのですが、

switch (str) {
case "い": 〜
case "ろ": 〜
case "は": 〜
}

とすると、

〜.cpp(61) : error C2450: switch式の求める数値の型 'class CString' が不正です。
この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。

と怒られました。
CString 型の値によって分岐するには、if 文を並べるしかないでしょうか。
もしくは、キャストか CString 型のメンバの何かを使うかなどでうまく switch 文を使うことが出来るでしょうか?
569デフォルトの名無しさん:05/02/01 22:34:51
>>568
case "い":
なんてのは
const char str_i[]="い"
case &str_i
とみたいなもんなので無理です
ifを書き連ねてください
570デフォルトの名無しさん:05/02/01 22:35:02
つD言語
571デフォルトの名無しさん:05/02/01 22:36:58
>>569
CString 型うんぬんの前に "い" 自体に問題がって何で気づかないんだよ俺ヽ(`Д´)ノ
ありがとうございました。
572デフォルトの名無しさん:05/02/01 22:38:05
>>568
"い"←これ、何型ですか?
char型の値が2つ並んでいますね。

CString("い")←これはCStringクラスのオブジェクトです。
573デフォルトの名無しさん:05/02/01 22:43:07
>>568
因みに、switchで扱えるのは整数型のみ。
574デフォルトの名無しさん:05/02/01 22:44:16
>>571
CStringは型ではない。凍んどけ。
575デフォルトの名無しさん:05/02/01 23:00:54
printfの第一引数を、動的にコマンドライン引数から指示して
標準出力にて表示するコマンドを作ろうとしています。
xxxx.exe set SIZE=%s
のように実行すると
printf("set SIZE=%s", strA);
となるような。

ところが"%s"を含む文字列がうまく操作できていないようで
次の例ような現象が出ています。
(LSI-C試食版を使用しています)
int main(int argc, char *argv[]) {
  int iCnt = 0;
  char sAllArg[256];
  char *bufP;
  bufP = sAllArg;
  while ( ++iCnt < argc ) {
    bufP = stpcpy(bufP, argv[iCnt]);
    *(bufP++) = 0x20;
  }
  printf(sAllArg, "##", "@@");
}
ここで「xxxx.exe aa%s bb%s」を実行して
期待する表示内容は「aa## bb@@」なのですが
「aas」とだけ表示されます。

ぐぐるとしても、検索するキーワードすら思い浮かびません。
なにかヒントをお願いします。
576575:05/02/01 23:04:31
長文すいません
577575:05/02/01 23:09:50
すいません。自己解決しました。
578デフォルトの名無しさん:05/02/02 01:29:24
>>574 はつみみです。
579デフォルトの名無しさん:05/02/02 11:34:32
>>578
プリミティブな型以外は型とは認めない。
580デフォルトの名無しさん:05/02/02 11:46:17
>>752
>"い"←これ、何型ですか?

「const char *」型
581デフォルトの名無しさん:05/02/02 11:49:23
>>580
違います。
きみ、アホですか?
582デフォルトの名無しさん:05/02/02 11:55:23
アホっていうかどっかの学生さんなんじゃないの?
583デフォルトの名無しさん:05/02/02 11:57:50
>>582
どこの学生さんのことを言っているのか見当もつかないんだけど…^^;
584デフォルトの名無しさん:05/02/02 12:11:35
"あ"を2byteの整数として判定すればいいんだよ。
585デフォルトの名無しさん:05/02/02 12:36:05
>>581
おまえがな
586デフォルトの名無しさん:05/02/02 12:43:46
>>568
テーブル使えよ
587デフォルトの名無しさん:05/02/02 12:45:43
>>580=>>585
無能は一人で十分
588デフォルトの名無しさん:05/02/02 12:54:06
まちがいなく、>>580の方がアホだと思う。
589デフォルトの名無しさん:05/02/02 12:57:27
590デフォルトの名無しさん:05/02/02 12:57:39
いや、俺が、俺が・・・
591デフォルトの名無しさん:05/02/02 13:01:52
>>584
L'あ'
592デフォルトの名無しさん:05/02/02 13:09:19
        ゴガギーン
             ドッカン
         m    ドッカン
  =====) ))         ☆
      ∧_∧ | |         /          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
     (   )| |_____    ∧_∧   <  おらっ!出てこい>>585
     「 ⌒ ̄ |   |    ||   (´Д` )    \___________
     |   /  ̄   |    |/    「    \
     |   | |    |    ||    ||   /\\
     |    | |    |    |  へ//|  |  | |
     |    | |    ロ|ロ   |/,へ \|  |  | |
     | ∧ | |    |    |/  \  / ( )
     | | | |〈    |    |     | |
     / / / / |  /  |    〈|     | |
    / /  / / |    |    ||      | |
   / / / / =-----=--------     | |
593デフォルトの名無しさん:05/02/02 13:14:21
>>585
反論してみろや!おら!
できないのか?
え?だったら謝れやッ ボクが間違っていました。ごめんなさい。ってな。
ギャハハハハッうぇっっwww
594デフォルトの名無しさん:05/02/02 13:16:39
>>593
ボクが間違っていました。ごめんなさい。ぐすん
595デフォルトの名無しさん:05/02/02 13:22:40
>>589
英語も読めない厨房に、
ソース出すだけ無駄。
596デフォルトの名無しさん:05/02/02 14:07:45
>>585は遁走しましたか
597デフォルトの名無しさん:05/02/02 14:10:29
いますよ、もっといじめて、ゾクゾク
598デフォルトの名無しさん:05/02/02 14:29:30
const char *
だと思うんだけど違うんですか
ネタだったらすまん
599デフォルトの名無しさん:05/02/02 14:33:33
>>598
cout << (typeid ("い") == typeid (const char *)) << endl;
600デフォルトの名無しさん:05/02/02 14:46:17
今更他人面して聞きにきてんじゃねーよ
601デフォルトの名無しさん:05/02/02 15:13:57
cout << typeid ("い").name << endl;
??
602デフォルトの名無しさん:05/02/02 15:19:52
http://www.bohyoh.com/CandCPP/FAQ/FAQ00035.html
Cではchar []であり、C++ではconst char []だが、Cでも文字列リテラルの内容は書き替えてはならない。
どっちにしても配列ということには変わらない。
603デフォルトの名無しさん:05/02/02 15:44:39
.BSS
604デフォルトの名無しさん:05/02/02 15:46:14
リテラルだろ、ぷ
605デフォルトの名無しさん:05/02/02 16:14:31
ISO/IEC 9899:1999(C99規格)
6.4.5 String literals -5より
... For character string literals, the array elements have type char, ...

ISO/IEC 14882:1998(C++規格)
2.13.4 String literals -1より
... An ordinary string literal has type “array of n const char”...
606デフォルトの名無しさん:05/02/02 16:25:46
それは、でも、書き換えできるかも?、オブジェクトポインターは定数
なのは確か、
607605:05/02/02 16:37:37
>>606
ISO/IEC 9899:1999(C99規格)
6.4.5 String literals -6より
If the program attempts to modify such an array, the behavior is
undefined.

ISO/IEC 14882:1998(C++規格)
2.13.4 String literals -2より
The effect of attempting to modify a string literal is undefined.
608デフォルトの名無しさん:05/02/02 18:19:23
>>592-593
小さい子供か君は。
他所で遊びなさい。
609デフォルトの名無しさん:05/02/02 18:22:35
この二つに凹んだってことかw
610デフォルトの名無しさん:05/02/02 18:31:22
早いとこ、文字数UTF実装しろよ、だな
611デフォルトの名無しさん:05/02/02 18:47:15
>>610
612デフォルトの名無しさん:05/02/02 18:57:26
>>611
字形とか気にしなければいいんじゃない?だめか・・・
613デフォルトの名無しさん:05/02/04 13:34:41
複数のスレッドから同一のグローバル変数に代入、
もしくグローバル変数を参照した場合、エラーが起きる場合とかありますか?
614デフォルトの名無しさん:05/02/04 13:45:54
>>613
そういうことしても突然プログラムが終了するということはない。
なぜなら結局のところプロセス・スレッドの同時実行なんて、
1つのCPUが次々と切り替えながら順に実行しているだけだから。

だからと言って何も考えずに実行すると作業中の中途半端な
オブジェクトを操作することになってしまって鼻から悪魔が(ry
なんてことがあるから、複数スレッドから同じグローバル変数を
扱おうとするときはクリティカルセクションとかスレッド間の同期を取り、
同時にアクセスすることの無いようにするのが普通。
615デフォルトの名無しさん:05/02/04 13:46:39
あります。
616デフォルトの名無しさん:05/02/04 13:50:48
>>614
CPU2個積みとかも想像しておいたら?

まぁ、どっちにしろ2つ以上のスレッドで扱うデータは一つのスレッドで処理中は
他のスレッドからアクセスしないようにしないとデバッグが大変になる

しかし、ミスるとデッドロックの危険性もあるから
なんつうかマルチスレッドは嫌いですorz
617デフォルトの名無しさん:05/02/04 14:09:01
CPUいくつあっても単純な読み書きのどっちかなら別に壊れたりしない。
618デフォルトの名無しさん:05/02/04 14:14:56
cpuの数は本質とちゃう。複数のcpuでも同じだって。
ていうか共有メモリ型の分散コンピューティングやった事あるひといるの?うぇっっwww
619デフォルトの名無しさん:05/02/04 14:20:28
ダイアログととメインウィンドウのプロシージャって2つになりますよね
その場合互いに1つのグローバル変数を参照する場合は排他制御はしなくてもいい?
マルチスレッドとは関係ないですけど・・・マルチスレッド以外で排他制御する場合などないですか?
620デフォルトの名無しさん:05/02/04 14:40:28
>>619
スレ違いだし、それに今までの流れでなんでそんな
ことも理解出来ないんだよ。池沼じゃあるまいし。
621デフォルトの名無しさん:05/02/04 17:56:20
>>617
Zaurus上でのJava開発したことがあるけれど、簡単な読み書きで簡単に
フルリセットかかったりしたぞ。同期採るのがスッゲー面倒くさかった。。。
622デフォルトの名無しさん:05/02/04 17:57:33
>>618
ファームでは頻繁に使うけどなにか?
623デフォルトの名無しさん:05/02/04 18:06:40
>>621
アホ?
624デフォルトの名無しさん:05/02/04 18:06:53
>>622
なにも。
625デフォルトの名無しさん:05/02/04 18:41:18
C/C++の話題ではないのは確か
626デフォルトの名無しさん:05/02/04 21:42:43
質問いいですか?
クラスを分割してコンパイルするときに、
ヘッダとクラス定義部にファイルをわけることが多いと思いますが、
これは何故でしょうか?
定義部もヘッダファイルのほうに書いてしまうと、
何か都合のわるいことがあるんでしょうか?
627デフォルトの名無しさん:05/02/04 22:07:56
>>626
単なる慣例で深い意味はないよ。まあちょっとコンパイルが遅くなるくらいかな。
628デフォルトの名無しさん:05/02/04 22:34:32
>>627
おいおい(;・∀・)ヤメル
629デフォルトの名無しさん:05/02/04 23:47:06
>>626
そのクラスを使いたい人(というかプログラム)にとっては定義などいらない。
いらないものをincludeで読み込ませるのは無駄。
インスタンスも作らずメンバも参照しないならヘッダをincludeする必要すらない。
630デフォルトの名無しさん:05/02/05 03:08:01
そうだ、Cの話をしよう。
631デフォルトの名無しさん:05/02/05 03:20:02

Cカップ好きは正解に近い
最も限りなく正解に近い
でも、Cに満たない女性も多いので
油断は禁物で〜す
632デフォルトの名無しさん:05/02/05 04:37:26
Cガール
633626:05/02/05 10:05:03
お答えありがとうございました。
参考にさせていただきました。
634デフォルトの名無しさん:05/02/05 11:36:33
いいよなCは、
大好きだった彼女はAA65だった
635デフォルトの名無しさん:05/02/05 13:17:01
>>634
羨ましい。
636デフォルトの名無しさん:05/02/05 16:36:41
フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
637デフォルトの名無しさん:05/02/05 16:41:20
\0がない
638デフォルトの名無しさん:05/02/05 18:08:14
ストリームって何ですか?
639デフォルトの名無しさん:05/02/05 18:08:50
ガイア!オルテガ!マッシュ!
640デフォルトの名無しさん:05/02/05 18:13:33
俺を踏み台にぃぃぃぃぃぃぃ!!!
641デフォルトの名無しさん:05/02/05 18:41:07
>>638
直訳すれば「流れ」。コンピュータ用語では、先頭から順々に、シーケンシャルにしかアクセスできない
(またはランダムアクセスのコストが非常に高い)データのことを指す。



以上、アスキー デジタル用語辞典より。
642デフォルトの名無しさん:05/02/05 19:00:58
Jet Stream
643デフォルトの名無しさん:05/02/05 20:41:54
creek:小川
stream:川
river:河
644デフォルトの名無しさん:05/02/05 20:59:33
large(great) river:大河
645デフォルトの名無しさん:05/02/05 21:34:25
ちょっと質問。

VCTKを使ってるんだけど、cl.exeのコマンドラインオプションを
デフォルトで指定する方法ってない?
警告とか最適化とかを指定しておきたいんだけど。

ちょっとテストプログラムで試すのにmakefileは作りたくないし
環境変数CFLAGSとか指定してnmakeを動かすか
バッチファイルでも作っておくのが妥当なのかな。
646デフォルトの名無しさん:05/02/05 21:42:36
バッチが妥当だろうね
647デフォルトの名無しさん:05/02/05 21:57:25
普通環境変数とmake
648デフォルトの名無しさん:05/02/06 00:39:23
教えてください。
namespaceについてのですが、
どのnamespaceにでもアクセスできる変数(globle変数)を作りたいのですが。
それは無理なのでしょうか?

今、下のようなsrcでコンパイルをかけているのですが、
mの値を参照できずコンパイルエラーになってしまいます。

-- src ---
#include <iostream>

namespace N{
double value=10.00;
}

namespace M{
double value=m; <-参照できない
}

double m=99.9;

int main()
{
std::cout << "N::value= " << N::value << std::endl;
std::cout << "M::value= " << M::value << std::endl;

return 0;
}
649デフォルトの名無しさん:05/02/06 00:50:32
>>648
これならできる。
#include <iostream>

namespace N{
double value=10.00;
}

double m=99.9;

namespace M{
double value=m;
}

int main()
{
std::cout << "N::value= " << N::value << std::endl;
std::cout << "M::value= " << M::value << std::endl;

return 0;
}
650デフォルトの名無しさん:05/02/06 00:51:29
ポカーン
651648:05/02/06 00:59:08
スマネイ、凡ミスだった
652デフォルトの名無しさん:05/02/06 12:06:56
Windowsで開発を始めて4月。
とりあえず疑問をぶつけさせてください。
なんでBMPは逆さで、使いもしないデータが多いのでしょう。
設計者は何でこんなのにしたんでしょうか。
653デフォルトの名無しさん:05/02/06 12:41:07
>>648
これならできる。
#include <iostream>

namespace N{
double value=10.00;
}

double m=99.9; <--- (1) この変数のnamespace名はなんになるんですか?

namespace M{
double value=m;
}

int main()
{
std::cout << "N::value= " << N::value << std::endl;
std::cout << "M::value= " << M::value << std::endl;

return 0;
}

(1)の質問よろしくお願い
654デフォルトの名無しさん:05/02/06 12:58:25
 
655デフォルトの名無しさん:05/02/06 13:09:08
「namespace名」って何?
656デフォルトの名無しさん:05/02/06 14:02:03
>>652
その方が都合が良かったんじゃない
657デフォルトの名無しさん:05/02/06 14:10:57
>>652
リトルエンディアンとビッグエンディアン
658デフォルトの名無しさん:05/02/06 14:23:48
>>657
プ
659デフォルトの名無しさん:05/02/06 14:24:02
653の答えは654だったり(w
660デフォルトの名無しさん:05/02/06 14:36:42
エンディアン嘘つかない
661653:05/02/06 14:44:09
>>654、659
マジだ、"::m"で参照できる

有賀と産
662デフォルトの名無しさん:05/02/06 22:43:52
はじめまして。Cの入門者です。
いまとあるプログラムを書いているのですが、

int i=87654321: (←8765万4321)
char j[9];
となっているとき、aを1文字ずつ文字配列にぶちこむにはどうすればいいでしょうか?
つまり、
j[0]:8
j[1]:7
j[2]:6
・・・
としたいのです。
663デフォルトの名無しさん:05/02/06 22:45:48
>>662
sprintf が助けになるだろう。
664デフォルトの名無しさん:05/02/06 22:46:26
sprintf
665デフォルトの名無しさん:05/02/06 22:49:49
上からやるのか…面倒だなぁ
int ii,k = 10*10*10*10*10*10*10*10*10;
char j[9];
ii = 0;
for(ii = 0;ii < 9; ii++){
j[ii] = i /k;
k/=10;
}

まるでテストしてないが
666665:05/02/06 22:51:35

誤:j[ii] = i /k;
正:j[ii] = i /k +'0';
667デフォルトの名無しさん:05/02/06 22:55:16
>>662
sprintf(j, "%8d", i);
668デフォルトの名無しさん:05/02/07 00:48:18
>>652
>なんでBMPは逆さで
ビットマップではy軸の上方向を正とした座標系なのに対し
ディスプレイでは下方向が正だからそうなっちゃったんじゃないかな?

>使いもしないデータ
パディングのことだと思うんだけど
多分4バイト境界に合わせとくとメモリアクセスが速いとかそんなんだと思う。
669デフォルトの名無しさん:05/02/07 01:22:31
VC.NETでダイアログベースのアプリを作っています。
ダイアログを任意の数だけ表示させたかったのでポインタでCDialogを宣言して
new→create→ShowWindow(SW_SHOW)の手順で表示させているのですが
消すとき、OnOKまたはOnCancelでDestroyWindowしてPostNcDestroyで
delte thisしているのですがメモリが完全に元に戻りません。(少し残ります)
これはこういうもんなんでしょうか
670デフォルトの名無しさん:05/02/07 01:41:14
>>669
VCスレに逝け
リンクは>>2参照
671デフォルトの名無しさん:05/02/07 01:42:29
超初心者なんですが質問させてください。

#include <stdio.h>

main()
{
int data[10],i;

for(i=0;i<10;i++){
printf("%2d件目の入力:",i+1);
scanf("%d",data);
}
printf("\n配列内容一覧\n");
for(i=0;i<10;i++){
printf("%2d件目:%d\n",i+1,data);
}
}
これで入力と出力の値が変わるんですけど、どこが間違ってるんでしょうか。
672デフォルトの名無しさん:05/02/07 01:49:37
- scanf("%d",data);
+ scanf("%d",&data[i]);
673デフォルトの名無しさん:05/02/07 01:55:20
-printf("%2d件目:%d\n",i+1,data);
+printf("%2d件目:%d\n",i+1,data[i]);
674デフォルトの名無しさん:05/02/07 02:11:16
>>672>>673
こんな質問に答えてくれてありがとうございました。
675デフォルトの名無しさん:05/02/07 05:51:37
配列の要素番号が偶数でアクセスすると
プログラム落ちるから、おそらく型の指定が間違ってると
思い、テンプレート使ってるんでsizeof(T)と関数の呼び出し側引数sizeof(型)
で調べてみたら全く同じ数値出ました。

template <class T> void DataLoad( T* pData, int max ) {
for(int i=0; i<max; i++) {
pData[i].Load();
}
}
のようなコードです。
アクセス違反だと思われるんですが...。というか、そのメソッドに
行く前に落ちてるからアクセス違反に間違いないと。
偶数で落ちるってのも気になる。
676デフォルトの名無しさん:05/02/07 05:59:17
>>675
言ってることが意味不明だけど、そのコードで
落ちてるんだったら配列をポリモフィズムに扱ってるからじゃないか?
例えば
class Base {
};

class Derived : public Base {
};

Base* p = new Derived[10];
DataLoad(p, 10);
こんな風に
677675:05/02/07 06:12:00
確かに継承使ってますが、ポインタ使わずともダメです。
キャストしても同じ
678デフォルトの名無しさん:05/02/07 06:32:30
>>677
言ってることの端々が意味不明だから、
ごちゃごちゃ言わずにソース晒せ。
オブジェクトの生成から関数呼び出し、
あとはsizeofでテストしたコード、が重要。
679デフォルトの名無しさん:05/02/07 06:41:23
デバッガで追うだけであっさりわかりそうな気がする
680デフォルトの名無しさん:05/02/07 08:12:08
配列の要素毎の確保サイズが足りないんじゃないか?
681勉強中653:05/02/08 02:03:28
#include <cstdio>

class CTest
{
public:
void Func();
void Func2();
};

void CTest::Func()
{
void (CTest::*fpFunc)() = Func2; //<-ここでbcc32は、”メンバ関数は、アドレスまたは値を入れてください"とのエラーが出る。
(this->*fpFunc)();
}

void CTest::Func2()
{
printf("--\n");
}

int main(){
CTest c;
c.Func();
return 0;
}

このsrc、cl.exe(vc++toolkit)じゃコンパイルできるけど、bcc32.exeではコンパイルできない。
昔の仕様では、静的メンバ関数でないと、関数ポインタに設定できない仕様があったらしいことまで調べたけど
bcc32.exe 5.5.1は、あまり使わないほうがよいのでしょうか
682デフォルトの名無しさん:05/02/08 02:17:42
むしろ、bcc独自拡張の__closureが影響してる。
関数名だけを取り出すと、thisとメンバ関数のセットとして扱われる。

どんなコンパイラでも通すには &Func2とすれば良い。
683デフォルトの名無しさん:05/02/08 02:28:38
- void (CTest::*fpFunc)() = Func2;
+ void (CTest::*fpFunc)() = &CTest::Func2;
684勉強中653:05/02/08 02:34:30
>>682,683
ありがとうございました。解決しました、明日Unixでも試してみます
685超初心者:05/02/08 03:22:21
コマンドラインから単語を入力して、
二分木を用いて単語を登録するプログラムを作りたいのですが、
どうやって適切な関数を作ればいいのか分かりません。
メモリを確保する(malloc?)ことや、->を使うと良いのはなんとなく分かるのですが使い方がどうも・・・
あと単語を辞書順に並べるのはstrcmpを使おうと思っているのですが問題ないでしょうか?

↓ここで止まってます;
#include <stdio.h>

struct node {
int data;
struct node *left;
struct node *right;
};

int main(int argc, char argv[])
{
int i;
struct node *top;

for (i = 0; i < 10; i++){
kansuu()+   
}
exit(0);
}
686超初心者:05/02/08 03:23:34
コマンドラインから単語を入力して、
二分木を用いて単語を登録するプログラムを作りたいのですが、
どうやって適切な関数を作ればいいのか分かりません。
メモリを確保する(malloc?)ことや、->を使うと良いのはなんとなく分かるのですが使い方がどうも・・・
あと単語を辞書順に並べるのはstrcmpを使おうと思っているのですが問題ないでしょうか?

↓ここで止まってます;
#include <stdio.h>

struct node {
int data;
struct node *left;
struct node *right;
};

int main(int argc, char argv[])
{
int i;
struct node *top;

for (i = 0; i < 10; i++){
kansuu()+   
}
exit(0);
}
687デフォルトの名無しさん:05/02/08 03:47:09
>>686
初心者を超えたらもう、歓迎はされないのだよ。

先ずは二分木を使わないバージョンでも作ってみたらどうかね。
それから、厳密に辞書順である必要があるならstrcmp()だけでは無理だね。
688デフォルトの名無しさん:05/02/08 03:50:22
strcmp は辞書式の順序ですが何か?
まあ初心者を超えた超アホの意図するものではないと思うけど
689デフォルトの名無しさん:05/02/08 03:53:58
不思議なのが全角ひらがなの場合濁点のある文字が辞書順にならない
(元々コードがそのようになっていない)こと。
690デフォルトの名無しさん:05/02/08 04:11:12
>>688
ほほぉ、あんたの辞書では'a'は'Xray'より後にあるのかね。
691デフォルトの名無しさん:05/02/08 04:20:50
一人だけ意味が理解できていない>>690
692デフォルトの名無しさん:05/02/08 05:40:30
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF);
でリークチェックしたんですが、ファイル名、行番号が表示されない。
どなたか原因分かる方いらっしゃいませんでしょうか。
リーク情報は表示されますがファイル名、行番号のみが表示されません。

#define CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
の順で記述してます。
_CrtSetDbgFlagマクロは、プログラムエントリポイント始めに記述。

環境依存(VC++)ということで促されてこのスレで
質問です。
693デフォルトの名無しさん:05/02/08 06:59:00
>>692
ここは環境依存OKではあるがC/C++言語の話題を扱う。
開発環境だのデバッガだのの操作はその環境のスレに逝ってくれ。
VCスレは>>2あたりにリンクがあるはず。
694デフォルトの名無しさん:05/02/08 11:09:11
★初心者にVisual C++を教えるスレ★
は次スレ立ってないんだよな。
俺立てられないから誰か立てて。

>>692は_CRTDBG_MAP_ALLOC
695デフォルトの名無しさん:05/02/08 14:31:29
C言語での行列について質問があります。
行列の要素数(行数、列数)の最大値はいくつなんでしょうか?
double型で要素数90万個(3000行300列)は可能でしたが、
900万個(3万行300列)ではcore吐いて落ちるので、
最大値はこの間にあるだろうということはわかりました。
また、最大の要素数は変数型に依存するのでしょうか?
OSはFreeBSD4.9Rでcc 2.95.3を使用しています。
696デフォルトの名無しさん:05/02/08 14:42:38
メモリとアドレスが許す限りいくらでも。
697デフォルトの名無しさん:05/02/08 14:59:42
>>695
動作環境に依存するので一概には言えない
malloc でメモリを確保できなかった場合はヌルポインタが返ってくるので
それで判断すべし
698デフォルトの名無しさん:05/02/08 15:02:44
>>695
core吐いて落ちるのは別の原因の可能性もあるぞ。
699デフォルトの名無しさん:05/02/08 15:07:23
>>696
言語依存だと大きな勘違いをしておりました。
どうもありがとうございました。
700デフォルトの名無しさん:05/02/08 17:04:37
>>698
スタックオーバーフローじゃない?
701デフォルトの名無しさん:05/02/09 02:32:33
入門書を一通り終わらせたら次なにやればいい?
おまいらみたいに、ハイレベルになりたい。
702デフォルトの名無しさん:05/02/09 02:58:09
>>701
とりあえず、大会社の下請けプログラマを10年やれ
嫌なら転職しろ
703デフォルトの名無しさん:05/02/09 03:04:06
>>701
とりあえず作れ。
704デフォルトの名無しさん:05/02/09 08:10:24
間違えて子供作ってしまいました
705デフォルトの名無しさん:05/02/09 08:13:26
>>704
deleteかfreeしとき
706デフォルトの名無しさん:05/02/09 12:18:21
抹消(delete)か解放(free)か……
707デフォルトの名無しさん:05/02/09 12:23:05
abortが正解
708デフォルトの名無しさん:05/02/09 13:00:45
人生をabort
709デフォルトの名無しさん:05/02/09 14:45:46
現在200ms周期でログ(CString型)を保存するスレッドから
データをファイルに書き込むスレッドを動作させていますが
ファイルの書込みの時点で例外エラー(未定義エラー)がたまに発生します。

データを書き込むスレッドはログが300件(200kバイト程度)たまったら
動作させているのですが、ファイルの書込みでエラーがでているようです。
ちなみにファイルは書き込みスレッドが呼ばれるごとに違うファイル名で作成しています。
エラーなく書き込みさせるにはどうしたらよいでしょうか。

VC.NET2003 言語はC++です
710デフォルトの名無しさん:05/02/09 15:10:38
>>709
まさかストリームを閉じてないとかってことないよな。
711デフォルトの名無しさん:05/02/09 18:48:11
>>709
「例外エラー(未定義エラー)」 って何だよ。
712709:05/02/09 18:51:46
>>710
閉じてます

>>711
CFileException::generic 未定義エラー
のコードのことです。
713デフォルトの名無しさん:05/02/09 19:17:19
C++関数の多重定義(オーバーロード)について
詳しく載ってるサイト教えてくださいな
コンパイラの型チェック方法など知りたいです
714デフォルトの名無しさん:05/02/09 19:37:40
簡単だよ、関数名に引数の型をつなげて行くだけ。
715デフォルトの名無しさん:05/02/09 22:42:22
>>713
http://www.jisc.go.jp/
JIS検索から規格番号X3014をどうぞ。
日本語でここより詳しいところは絶対にない。
716デフォルトの名無しさん:05/02/10 01:35:37
>>715
ありがとう。
でもエラーで見れない...。しばらく待ってから見てくださいって
表示されたから、また今度見てみます。
717デフォルトの名無しさん:05/02/10 01:55:49
>>715
ローカルに保存できないんだね。
有能なプログラマを育てる為にもなんとかならんかねぇ。
718デフォルトの名無しさん:05/02/10 02:00:24
ローカルキャッシュ
719デフォルトの名無しさん:05/02/10 02:35:40
というかまぁ日本語でなければならない時点でプログラマとしては
「有能な」という接頭辞をつけるのが憚られる訳だが。
720デフォルトの名無しさん:05/02/10 08:48:43
また古いタイプの勘違いした人がいるな。
721デフォルトの名無しさん:05/02/10 12:05:32
C++のコンパイラってどこで手に入るの?
722デフォルトの名無しさん:05/02/10 12:22:34
>>721
パソコンショップ
723デフォルトの名無しさん:05/02/10 14:27:48
>>721
Borland C++ Compiler 5.5 無償ダウンロードサービスページ
724デフォルトの名無しさん:05/02/10 14:31:50
>>721
ググれば紹介ページが見付かるだろ。しね。もう来るな。
725721:05/02/10 18:10:58
また来ちゃったよ。

>>723
サンクス!
726デフォルトの名無しさん:05/02/10 21:29:30
VC++6.0 ProとVC#.net2003 standardを持ってるんですが、
4万数千円払って、VisualStudio.net proに格上げする価値はあります?
現状ではVC++7が目的になるわけですが(VB.netやVJを使う気は無いです)、
VC++7だと6に比べて画面が作りやすいとか、C++.netにソースレベルで持って行けるとか
利点があるのでしょうか?
727デフォルトの名無しさん:05/02/10 21:34:33
VC++7.1は既にゴミ同然なVC++6.0とは比較にならないほどC++標準準拠度が高いので最新のナニなライブラリが使い放題。
728デフォルトの名無しさん:05/02/10 22:04:41
>>727
すまん、日本語で書いてくれ。
729665:05/02/10 22:21:26
VC++ 6.0って標準からかけ離れてる部分多いらしくて
テンプレートクラスとかでコンパイル不可になる可能性がある
んでboostとか使うつもりなら7.1にすべしってことじゃねぇかな
730デフォルトの名無しさん:05/02/10 22:22:06
謎のHNが入ったorz
731726:05/02/11 00:44:06
>>727-729
なるほど。そんなに文法レベルで異なるんですか。
4万円ちょっとのステップアップを買おうかと思います。
732デフォルトの名無しさん:05/02/11 04:28:37
結局 BCC や Cygwin+GCC とかに落ち着くんじゃねーの?
Borlandが出したTurboCのデキの良さに焦ったM$が出したQuickCなぞ、
バグだらけな上にANSIC準拠じゃないわ遅いわ重いわバグだらけだわで
使いモンにならんかったぞ。
汚名挽回で得意の改名をして出したMS-Cは結局最後のバージョンまで
酷い使い勝手のままだったし。
733デフォルトの名無しさん:05/02/11 09:36:31
弘法は筆を選ばず。
734デフォルトの名無しさん:05/02/11 12:42:44
いまどきbccなんて本気で言ってる奴がまだいたのか。
735デフォルトの名無しさん:05/02/11 15:05:34
そうか、汚名を挽回するのか。
736デフォルトの名無しさん:05/02/11 15:22:19
挽回しちゃったよね
737デフォルトの名無しさん:05/02/11 15:24:45
名誉挽回
汚名返上
738デフォルトの名無しさん:05/02/11 15:35:01
MSは汚名返上したためしがないからな。
739デフォルトの名無しさん:05/02/11 16:03:14
Longhorn でやってくれるさ
740デフォルトの名無しさん:05/02/11 17:48:15
>>736
挽回なんかしてないよ。


汚名をすすいでないから。
挽回する必要はないもん。
741デフォルトの名無しさん:05/02/11 17:55:00
M$は常に正しいですが?何か?
742デフォルトの名無しさん:05/02/11 17:56:15
bool MS()
{
  return true;
}
743デフォルトの名無しさん:05/02/11 17:58:22
const bool MS = true;
744デフォルトの名無しさん:05/02/11 18:31:14
enum {
  MS = 1
};
745デフォルトの名無しさん:05/02/11 19:45:28
#define MS true
746デフォルトの名無しさん:05/02/11 20:40:59
class MS {
    bool operator()() const { return true; }
};
747デフォルトの名無しさん:05/02/11 21:20:08
C言語を何も分かってない素人です。

printf("\n 出力ファイル名を入力してください。\n ");
scanf("%s",&ofn);

これだと、ファイル名にディレクトリや拡張子を書かないと思いの場所に思いの形式で保存できません。
ディレクトリと拡張子をプログラムのほうで固定する方法をご教授ください。。。orz
748デフォルトの名無しさん:05/02/11 21:25:29
strcat
749デフォルトの名無しさん:05/02/11 21:28:01
winなら入力した文字列を後ろからスキャンして'.'ガあれば拡張子と見る。
さらに'\'があればそこまでがファイル名。
で、あらかじめ用意したパスと拡張子を前後に加える。
750デフォルトの名無しさん:05/02/11 21:39:54
>>747
_makepath
751747:05/02/11 21:47:02
さっそくありがとうございますorz
>>748
おかげさまで拡張子に関してはうまくいきました。ありがとうございます。
これの逆のやり方があればディレクトリもうまくいきそうなのですが・・。
>>749
winですが、、、すみません。俺のボンクラ頭脳では理解しきれませんでしたorz
>>750
漏れの持ってる入門本にはそのような関数は・・・orz
752デフォルトの名無しさん:05/02/11 22:10:24
>>746
structじゃないのが気になる
753デフォルトの名無しさん:05/02/12 00:37:03
>>749
マルチバイトだと酷い目にあうよ。
754デフォルトの名無しさん:05/02/12 05:36:48
int _tmain(int argc, _TCHAR* argv[]){
 const char* lpszBuf = "全角スペース→  " ;
 int i = 0 ;
 do{
 if((lpszBuf[i] == 0x81) && (lpszBuf[i+1] == 0x40)){
 cout << "全角スペース発見" << endl ;
 i++ ;
 }
 i++ ;
 }while(lpszBuf[i] != '\0') ;
 return 0;
}
全角スペースを発見できないです。このやり方では駄目なんでしょうか?
最終的には文字列からスペースを全て取り除く関数を作りたかったんですが
半角は問題なく出来て全角で引っかかってしまいました。
755デフォルトの名無しさん:05/02/12 08:20:49
>>754
char型が格納できる値は処理系依存。例えば-128〜127のこともある。
そんなときに0x81と比較して一致するはずが無い。だから0xじゃなくて'\x'にしろ。
(まぁ、const unsigned char *にするという逃げもあるが)

でもな全角文字のあるときはなんだかんだ言ったってワイド文字が楽だ。
int _tmain(int argc, _TCHAR *argv[]) {
    const char* pszBuf = "全角スペース→  ";
    int i = 0;
    for (int i = 0; pszBuf[i] != '\0'; i++) {
        if ((pszBuf[i] == '\x81') && (pszBuf[i + 1] == '\x40')) {
            cout << "全角スペース発見" << endl;
            i++;
        }
    }
    return 0;
}
756デフォルトの名無しさん:05/02/12 11:14:25
C++でファイル入出力の勉強しています。、
開くファイルが存在しなかった場合はプログラムを終了させようと思ってますが、
ファイルが存在してないにもかかわらず、プログラムは終了せず、
フォルダを見ると勝手にファイルが作成されています。
ファイルがない場合、即時終了させるにはどうしたら言いのでしょうか。

---- ソースファイル -----
#include <iostream.h> // 標準入出力
#include <fstream.h>  // 標準ファイル入出力
#include <cstdio>      // getchar
#include <cstdlib>    // exit

int main(int argc, char *args[]){
    ifstream fin;    // ファイル読み込み

    // 読み込み用ファイルを開く
    fin.open( args[1], ios::in );
    if( !fin ){
        cout <<"ファイル:" <<args[1] <<"が開けません。" <<endl;
        getchar();
        exit(1);
    }else{
        cout <<"ファイル:" <<args[1] <<"を開きました。" <<endl;
        getchar();
    }

    return 0;
}
757デフォルトの名無しさん:05/02/12 11:16:37
>>756
C++でexitはやめたほうがいいよ。
デストラクタが働かない。
758デフォルトの名無しさん:05/02/12 11:45:15
えーーーー
知らなかったよーーーー
759デフォルトの名無しさん:05/02/12 11:52:47
>>756
それで問題ないはずだけど。
ただし、exitをreturnにするのと、

#include <iostream>
#include <fstream>
using namespace std;
760デフォルトの名無しさん:05/02/12 13:05:32
>>758
ちょっと考えればすぐ想像できるだろ。
761デフォルトの名無しさん:05/02/12 16:14:38
int a;
int a;
int a;
int a;

int main()
{
  a = 10;
  return 0;
}

このソースがコンパイル通ってしまうことに気づいて愕然としたんですが・・・
このような表記が許されている理由がわかる人はいますか?
762デフォルトの名無しさん:05/02/12 16:17:45
>>761
Cでは通るが、C++では通らないらしい。ちょっと安心した。
763デフォルトの名無しさん:05/02/12 16:28:37
>761
aは再定義で同じ定義内容。
externの省略か?
多重定義はやめろ
764デフォルトの名無しさん:05/02/12 16:53:17
VC++6.0でmap<string, char *> m;として
m["key1"] = "data1";
m["key2"] = "data2";
と代入したら

cout << m["key1"] << endl;
cout << m["key2"] << endl;

の結果がともにdata2になるんだがどうして???
765756:05/02/12 17:16:32
>>756
デストラクタあまり意識したことなかったのでCと同じようにしてました。
C++でのexitはこれ以降止めときます。

>>759
ありがとうございます。うまく期待通りに動きました。
namespaceを使用しなければいけなかったんですね。
使用するしないで変わる意味がよくわからないので
namespaceから勉強しなおします。
766デフォルトの名無しさん:05/02/12 17:39:54
>>765
非ローカルなインスタンスがなく、exit()の使用をmain()に限定し、main()ではインスタンスを生成しなければ問題ない。
つまり、main()をOSとのインターフェースに限定するということだね。
767デフォルトの名無しさん:05/02/12 17:44:51
#include <io.h>
#include <iora.h>
#include <iostream.h>
768デフォルトの名無しさん:05/02/12 17:46:16
>>766
ごめん、漏れの頭じゃわかんない。
もうちょっとわかりやすくしてほすい。
769デフォルトの名無しさん:05/02/12 17:47:43
>>755
そういうことだったんだ
これを3日間悩み続けてました(-_-)
そもそも0x81のみでもまったく引っかからなかったので・・・
\xなんて書き方ぜんぜん知らなかったからここで聞いてよかったです
ありがとー!!
770デフォルトの名無しさん:05/02/12 18:00:04
>>768
>766は、デストラクタが必要ない状況。
771デフォルトの名無しさん:05/02/12 18:26:12
>>770
具体的にはどうすればいいんすか?
772!=756:05/02/12 18:28:13
>>757
ありがとう、今からソース書き直すよ。
773デフォルトの名無しさん:05/02/12 18:33:21
>>766
>非ローカルなインスタンス
は、あっても構わないと思われ
774デフォルトの名無しさん:05/02/12 18:54:30
質問です。

long number; 
↑の変数に入っている数字の
桁数と各桁の数字を取り出したいのですが、
どのような方法があるでしょうか。
どうかよろしくお願いします。
775デフォルトの名無しさん:05/02/12 18:57:57
sprintf(buf, "%ld", number);
strlen(buf);
776デフォルトの名無しさん:05/02/12 19:17:45
>774
電話番号だったら文字列使えよ
777774:05/02/12 19:52:49
>>776
ゲームのスコアなんです。
0〜9の数字の画像でスコアを表示させたいので
各桁の数字と桁数が必要になりました。
778デフォルトの名無しさん:05/02/12 20:31:50
>>777
>>775 じゃダメなの?
779デフォルトの名無しさん:05/02/12 20:55:50
>>764
なんでだろ?
漏れもわからん・・・
780デフォルトの名無しさん:05/02/12 21:00:14
>764
ハッシュ値の衝突か? バグっぽい
map<string,string>使え
781764:05/02/12 21:06:52
>>780
それしかないのか・・・OTL
782デフォルトの名無しさん:05/02/12 21:15:14
つーか、map<string,char*>なんかに代入してスコープ外れたときどうするつもりなのか小一時間。
783デフォルトの名無しさん:05/02/12 21:17:19
stringにつっこんで取り出すときにc_strさせれば。
784774:05/02/12 21:17:45
>>775
ありがとうございます。できました。
>>778
すぐには理解できなかったんです。すいません。
785デフォルトの名無しさん:05/02/12 21:46:28
>780
map はハッシュ表じゃないぞ
786764:05/02/12 21:59:20
というかstringに変えたところでmapの動きには変化が無いわけで・・・
787デフォルトの名無しさん:05/02/12 22:00:12
↑ジュン君発見
788デフォルトの名無しさん:05/02/12 22:06:54
実はchar * の指している先が同じエリアだったとか?
789デフォルトの名無しさん:05/02/12 23:57:02
ていうか、ほんとに>>764のソース だ け で テストしてるのか?
こういうケースはたいてい実際テストしたソースにポカミスがある。
790デフォルトの名無しさん:05/02/13 02:33:34
>>764
リテラル渡してるのが気になるところ。
nullで終わる文字列としてコピーされるのかな?

ちなみに、
template < typename T >
void showName( T& ) { std::cout << typeid(T).name() << std::endl; }
として、
showName("data1");すると、char const [6]って表示されます(VC++7.1)。
791デフォルトの名無しさん:05/02/13 02:50:37
>>790
なに寝ぼけたこと言ってんだ。
引っ込んでろ。
792デフォルトの名無しさん:05/02/13 02:55:18
C++習い始めて三日って感じですな
微笑ましいじゃありませんか
793デフォルトの名無しさん:05/02/13 03:07:50
【初心者歓迎】って、初心者が回答するスレだって
思ってるのがかなり居そうだな
794デフォルトの名無しさん:05/02/13 04:52:25
>>791-793
”nullで終わる文字列としてコピーされる”ってあたりがなんだけど,
全体としてそんな的外れかな?

using namespace std;
map<string, char *> m;
cout << static_cast<void const*>("data1") << endl;
m["key1"] = "data1";
m["key2"] = "data2";
cout << static_cast<void*>(m["key1"]) << endl;
cout << static_cast<void*>(m["key2"]) << endl;

ってやってアドレス確認してみたら,

0x446000
0x446000
0x446010

ってなったよ(g++ 3.4.0).
VC6ではおそらく,3つとも同じ数値になるんじゃない?
795デフォルトの名無しさん:05/02/13 05:00:08
>>794=>>790
おまいのレベルが低すぎて話になってないってこと。
要するに書くだけ邪魔。>>791にも言われてるだろ。
あとやっぱりずれてんの。

せめて禿本なり一冊は良本読んで出直してこい
796デフォルトの名無しさん:05/02/13 05:02:11
ruby最強なことがよく分かる。
797デフォルトの名無しさん:05/02/13 05:36:05
>>795
ごめん.文字列リテラルってスタックとは違う領域に配置されるのね...
798デフォルトの名無しさん:05/02/13 05:40:28
文字列リテラルは静的記憶域期間だけど、おまいはそれ以前の問題
799デフォルトの名無しさん:05/02/13 05:53:50
>>794
念のために言っておくが、
その一番目と二番目のアドレスが同一なのは環境依存だぞ。
800デフォルトの名無しさん:05/02/13 06:06:56
801デフォルトの名無しさん:05/02/13 13:16:16
コピーコンストラクタで引数が不正だと判断できる場合って
delete this;しちゃってもよかですか?いちお例外くらいは出しとくとして。
802デフォルトの名無しさん:05/02/13 13:27:07
>>801
つEssenceパターン
803デフォルトの名無しさん:05/02/13 13:28:55
>>801
だめ。newで呼ばれたコンストラクタで例外が発生した場合、自動的に
deleteが呼ばれる。
804デフォルトの名無しさん:05/02/13 14:08:27
デストラクタ呼ばれないから厳密にはoperator deleteではなかろか。
805デフォルトの名無しさん:05/02/13 14:52:51
operator delete[] かもしれないぞ
806801:05/02/13 16:23:23
レスありがとうございまっす!
なるほど、Essenceパターン使えばよさそうですね。
ただ、Essence役を間に挟んでのアクセスは嫌なので、
生成したインスタンスのポインタを返そうと思ったのですが、
その場合解体責任が不明確になってしまうなぁと。
smart_ptr使えばいいのかもしれないけど、組み込み系プログラム
なんでそこまでやるとおおげさな気もしてしまいます。
単純にコンストラクタで例外を発生させるだけでもよかですか?
807デフォルトの名無しさん:05/02/13 16:42:21
std::auto_ptr でも大げさなの?
なら仕方ないが。
808デフォルトの名無しさん:05/02/13 17:37:39
>>806
例外投げるコストは大丈夫で、smart_ptrが大げさ?
珍しい環境だな。
809764:05/02/13 23:50:59
map<string,string>にしたら動きました。
理由は不明・・・
810デフォルトの名無しさん:05/02/13 23:59:36
>>809
いやmap<string,string>なら期待通り(?)に動くのは当然でしょ、
問題はchar*のときの挙動なのであって。
811デフォルトの名無しさん:05/02/14 00:17:16
>>764
うちの環境(BCC)なら問題なし。
VC6があるシト検証キボン。
812デフォルトの名無しさん:05/02/14 00:32:21
>>811 無問題
813デフォルトの名無しさん:05/02/14 00:40:28
ってことは>>789じゃないの?
814デフォルトの名無しさん:05/02/14 18:23:42
プリプロセッサとマクロの違いがよくわからないんですが何が違うんでしょうか?
815デフォルトの名無しさん:05/02/14 18:31:57
>>814
#include
#define
#ifndef
etc..
これらはプリプロセッサで、コンパイルが始まる前に実行される。
マクロとは、手続きの静的な置き換えのこと。
816デフォルトの名無しさん:05/02/14 18:50:44
C言語ではさみうち法のプログラムを教えて下さい。
817デフォルトの名無しさん:05/02/14 18:53:53
マルチポストには教えられません。
818デフォルトの名無しさん:05/02/14 18:59:03
そこをなんとか・・・本当に困っているので。やっぱりいくら困って
いてもいろんなとこに書き込むのはだめですか?すみません気をつけます・・
時間がとにかくなくて・・・
819デフォルトの名無しさん:05/02/14 19:01:17
>>818
人に聞くなら信用しなさい。
マルチポストをするということはそのスレ住人を信用していないことになります。
820デフォルトの名無しさん:05/02/14 19:23:33
「静的」と「動的」の違いを教えてください。
動的に確保する、とか、、
821デフォルトの名無しさん:05/02/14 19:37:02
「性的」コンパイル時
「動的」実行時
822デフォルトの名無しさん:05/02/14 19:37:40
>>820
始めにこうと決めてしまったら動かしようがないのが静的、
決めた事を後でも動かせるのが動的
823デフォルトの名無しさん :05/02/14 19:59:14
質問させてください。
現在C++BuilderでCpad使ってるのですが、

file1.h 関数プロトタイプ宣言
file2.c  作成した関数の定義
sample1.c プログラム本体
と作って
ソースファイルをコンパイルしオブジェクトファイル作成されたのですが
その後どうやってプログラムを動かすのかがわかりません。

良ければレス下さい。。。
824デフォルトの名無しさん:05/02/14 20:04:20
>>816
宿題は自分で汁
825デフォルトの名無しさん:05/02/14 20:04:29
>>823
どこかにsample1.exeができているはず。
826デフォルトの名無しさん:05/02/14 20:10:56
>>825
ありがとうございます。探してみます。
827デフォルトの名無しさん:05/02/15 00:57:15
>>814
C/C++での「プリプロセッサ」とは、
言語仕様のうち
・コメント
・#if〜 による条件コンパイル
・#include によるファイル取り込み
・#define によるマクロ置換
などを担当する部分。
C/C++で「マクロ」と言えば、このうち「 #define によるマクロ置換」で定義されるもの。
828デフォルトの名無しさん:05/02/15 10:34:38
NT3.5&VC++5.0では
a = (a >= 100) ? 1 : a++;
が正常に動いていたのに
XP&C++.NETではaの値が増えません。
a = (a >= 100) ? 1 : a + 1;
とすれば動きましたが何故でしょう?
3項演算子使うなと言えばそれまでですが、
原因が知りたいのです。
宜しくお願いします。
829デフォルトの名無しさん:05/02/15 10:44:54
>>828
>a = (a >= 100) ? 1 : a++;

副作用点の違い。
個人的には、こんな書き方で正常に動くと思う、
あなたの頭の方がおかしいと思う。
830デフォルトの名無しさん:05/02/15 10:52:21
ちょっと割り込むけど
a = a++;
って、aの値を取り出してaに代入してからaをインクリメントするのか(結果インクリメントされる)
aの値を取り出してaをインクリメントしてから、先ほど取り出した値をaに代入するのか(結局値は変わらない)
言語的に決められてるのかな?
831デフォルトの名無しさん:05/02/15 10:54:45
>>830
規格見ればわかる
832デフォルトの名無しさん:05/02/15 10:55:00
>>830
はい。
833デフォルトの名無しさん:05/02/15 11:00:02
>>828
a = 1 + a%100;

ではダメか?
834デフォルトの名無しさん:05/02/15 11:00:10
a = a**: なんて書くアフォ始めてみた。
実在したんだな
835デフォルトの名無しさん:05/02/15 11:01:57
>>833
割り算のコストと条件分岐のコスト、どっちが高いんだろう。
836デフォルトの名無しさん:05/02/15 11:02:51
>>828
a++ってa=a+1っていう意味だよね?
a=(a>=100)?1:a=a+1;???
837デフォルトの名無しさん:05/02/15 11:09:56
>>836
勉強し直した方がいいよ
838デフォルトの名無しさん:05/02/15 14:30:10
サブクラス化したエディットコントロールにn個の要素を持つ配列aを
表示してるのですが、配列aのx番目の要素にフォーカスかキャレットが
来たときにそれを判別する方法はありますか?教えてください
839デフォルトの名無しさん:05/02/15 14:50:35
マルチウザ
840デフォルトの名無しさん:05/02/15 14:53:02
>>839
わざわざマルチしてるか巡回して調べたんですか?w
カスは黙っとけよwww
841デフォルトの名無しさん:05/02/15 15:03:26
>>838
エディットコントロールにどうやって配列を表示してるのか知らんが
(多分、ここを説明しないと誰にも判らん)
フォーカスが来たところで選択している位置を取得して、そこから
判断出来ないのか?

>>840
この上なく頭悪そうに見えるんで、「w」連発はやめておいた方が吉。
842デフォルトの名無しさん:05/02/15 15:15:15
配列を表示というか変数にテキストデータを格納して表示したってことです。
フォーカスが来たときの座標を取れたとしてその位置に表示してある
データの中身が1バイトだけわかればいいです。教えてください
843デフォルトの名無しさん:05/02/15 15:17:29
マルチは放っとけよ
844デフォルトの名無しさん:05/02/15 15:21:31
マルチじゃねぇし。カスは消えろって
845デフォルトの名無しさん:05/02/15 15:26:45
846デフォルトの名無しさん:05/02/15 15:28:30
わざわざリンク貼ってご苦労さまwwそれは2時間前にレスつかたkらマルチって言わないの。
わかるか?カス?w
847デフォルトの名無しさん:05/02/15 15:44:17
NGWord: カス, マルチ
848デフォルトの名無しさん:05/02/15 15:52:18
マルチ必死w
849838:05/02/15 15:52:55
事前に作っておいた検索アルゴリズム応用して何とかなりそうだからもういいわ。
とりあえずこのスレにはマルチじゃないのにマルチとかほざくうざい自治厨がいるってことは頭の片隅においとく
850デフォルトの名無しさん:05/02/15 16:04:24
やっとマルチが消えてくれるのか。
よかったよかった。
851C++スペシャリスト:05/02/15 16:57:27

System::DateTime now = DateTime::get_Now();
String *msg = now.ToString();
int n;
String a;

n = 123;
a = ???.Format ("n=",n); // ここのやり方がわかりません。
MessageBox::Show (msg + &a); // ここも

どなたかよろしく。
852デフォルトの名無しさん:05/02/15 17:31:41
>>851
Managed C++?専用スレがあるよ?
853デフォルトの名無しさん:05/02/15 17:35:58
>>851
なんだそのStringクラス。
環境も書かずに判るわけねぇべさ。
854デフォルトの名無しさん:05/02/15 17:36:17
>>851
まず、そこで何をしたいかを書くべきだろ。
855デフォルトの名無しさん:05/02/15 17:58:20
linuxでプログラミングの勉強中。
システムコールのクラスライブラリってないの?

類似のブツならば、gimite(http://gimite.ddo.jp/gimite/)あるけど、こっちはsocketだけだし。
856C++スペシャリスト:05/02/15 18:43:22
環境 MS VS.NET 2003
>まず、そこで何をしたいかを書くべきだろ。

 int のnをStringに変換してMsgboxに表示したいだけです。
857デフォルトの名無しさん:05/02/15 18:47:14
ワラタ
858デフォルトの名無しさん:05/02/15 18:56:30
>>856
で、言語は何だ?C++か?Managed C++か?
859デフォルトの名無しさん:05/02/15 20:02:17
マルチをばかにしないでください〜。はわわわわ〜。
860デフォルトの名無しさん:05/02/15 21:02:27
失礼します
BCCでタスクトレイのみで動くプログラムを作ろうと思っています

調べたところ、MFCやVBではNOTIFYICONDATAのhwndに
自分のウィンドウハンドルをいれてるようなのですが、
これはBCCで動かすにはどのようにしたらよいのでしょうか?

よろしくおねがいします
861デフォルトの名無しさん:05/02/15 21:07:10
>>860
C/C++とタスクトレイのみで動くプログラムはどう関係あるんだろう。
OSは何だろう。Windowsでいいのかな…
ひょっとして池沼だったりして…
862デフォルトの名無しさん:05/02/15 21:11:43
>>860
ここは言語の話題を扱うの
そーゆーのはBCCスレで聞いてちょ
タダで使えるBorland C++ Part4
ttp://pc5.2ch.net/test/read.cgi/tech/1091066805/l50

ん、WinAPIスレのほうが良いのかな?
863デフォルトの名無しさん:05/02/15 21:19:21
>>861-862
おめーらスレタイ嫁。
864デフォルトの名無しさん:05/02/15 21:28:24
>>863
環境依存OKは分かった。初心者歓迎も分かった。で?
865デフォルトの名無しさん:05/02/15 21:38:20
開発環境

環境依存
の区別ができてないってことかな?

それはそれとして、862のような「専門スレへの誘導」は普通のことだと思うがな。
866デフォルトの名無しさん:05/02/15 22:11:42
初心者向けの、環境依存したトピックもOKな『C/C++相談室』
のはずなんだが。

初心者は「環境依存したC/C++のトピック」と
「開発環境の操作方法」や
「特定(非標準)ライブラリの操作方法」
との区別がつけられない。

それはそれで仕方がないんで、そういうお客さんがきたら
専門スレへ誘導で何の問題もないはずなんだが?
ま、あんまり手荒な扱いはどうかとは思うけど。

余談だけど、VBから移行した初心者は、そもそも開発環境と言語を
切り分けて考えることすら出来ないことがままある。
「開発環境の使い方覚える前にC++の基本ぐらい勉強しとけ」
って言っても何のことかまるで理解できないんだよな。
867C++スペシャリスト:05/02/15 22:14:16
>で、言語は何だ?C++か?Managed C++か?

Managed C++でお願いします。
「注文の多い料理店」って知ってます。
なんでもいいから早く食わせてくれーー。
868C++スペシャリスト:05/02/15 22:15:48
>866
 貴方の意見に賛成します。
869C++スペシャリスト:05/02/15 22:18:13
 貴方の意見に賛成しますから、どうぞ私の質問に答えてください。
せめて貴方だけでも。
もしそうでなければ、あなたのおっしゃていることはかなり空虚に
響きます。
870デフォルトの名無しさん:05/02/15 22:22:05
>>868
そうか、ありがとう。分かってくれて僕もうれしいよ。
それならさっそく Managed C++専用スレ に逝ってくれ。
871C++スペシャリスト:05/02/15 22:29:44
>870
アレだけ解りやすく言っても馬鹿だと気がつかないのか? 直接馬鹿とは
言いたくなかったのだが。
872デフォルトの名無しさん:05/02/15 23:14:50
http://pc5.2ch.net/test/read.cgi/tech/1014486422/

お願いだから、荒さないで
873C++スペシャリスト:05/02/15 23:53:07
>お願いだから、荒さないで

下らん。お前も馬鹿か? たったアレだけの質問に答えられんのか?
能書きたれる前に答えろ。アフォー。
874デフォルトの名無しさん:05/02/16 00:16:52
Cでmalloc使って双方向リスト作りたいんですけど
なにか参考になる資料とかありませんか?
875デフォルトの名無しさん:05/02/16 00:22:22
>>874
web上に腐るほどある。
876デフォルトの名無しさん:05/02/16 00:23:43
より適切なスレがあるんだったらそこで聞いた方が早いと思うけど。
ここで聞くのは、誘導のための入り口みたいな感じで。

で、>860 は別に移動してもらうまでもないんで答えるけど、 BCC でやる場合でも何も変わらないぞ。
不可視のウインドウを作ってしまうのが常套手段だと思う。
877デフォルトの名無しさん:05/02/17 09:35:49
VCでmp3やmpeg4のストリーミングするプログラムかこうと思ってるんですが参考資料が
ほとんど無くて困ってます。誰かよい資料や方法など知ってましたら教えてください。
878デフォルトの名無しさん:05/02/17 09:44:53
ワープロで論文を書こうと思ってるんですが参考資料がありません。
つーくらい頓珍漢な質問だな。
879デフォルトの名無しさん:05/02/17 09:55:07
参考資料がないんじゃなくて脳みそが
圧倒的に足りてないだけだろ
880デフォルトの名無しさん:05/02/17 11:00:12
>>878-879
なんのためにレスしたの?
881デフォルトの名無しさん:05/02/17 11:21:17
>>880
>>877の馬鹿さ加減を笑うためだよ。普通この流れからしたらそれしかないだろ。
お前さんも>>877の同類かい?
882デフォルトの名無しさん:05/02/17 11:26:46
ってか全然調べてないんじゃないの?>>877
883デフォルトの名無しさん:05/02/17 12:47:10
参考資料 → パクっていいソース
と置き換えると納得。
884デフォルトの名無しさん:05/02/17 12:51:06
うーん、言い方が悪かったですね。
具体的に言いますと

1、デコードされたmp3やmpeg4等はどのようにクライアントに送出
  するかその具体的な方法。
2、クライアント側で受信させたデータはどのようにして再生させ
  ればいいのか?
3、できれば、クライアント側はブラウザでアクセスすればそれだ
  けで再生ができるようにしたい、その方法。

といったところです。

誰かわかりますか?
885デフォルトの名無しさん:05/02/17 13:08:35
1. あなたが仕様を決めて下さい。
2. あなたが仕様を(ry
3. あなたが(ry
俺なら、そんなの再発明しようなんて思わないな。
886デフォルトの名無しさん:05/02/17 13:10:05
>>885
答える気がねーんならくんな。
ていうか答えらんねーのかw
887デフォルトの名無しさん:05/02/17 13:27:13
C/C++にストリーミングなんて概念があったか?
888デフォルトの名無しさん:05/02/17 13:58:35
>>886
サーバ側・クライアント側共に態々自作するのなら
(どういう目的・意図があるのかは知らんが)
すべて自分で仕様を決めて実装しろ。
自作しないのなら、現存するものを使えば済む話だ。

…と言っているんだが。
そもそも、>>884 で「具体的」とか言ってるようじゃなあ…
せめて「ストリーミング プロトコル」辺りでググってこい。
889デフォルトの名無しさん:05/02/17 15:00:46
class Aを派生したクラスclassBにて

A* lpA1 ;
A* lpA2 ;
newで生成しといて

//lpA1又はlpA2のアドレスを呼び出し先に返す関数
B::GetStatus(A* pTemp)
{
if(何たら〜)pTemp=lpA1 ;
else pTemp=lpA2 ;
}
B::Reload()
{
A* pTemp ;
GetStatus(pTemp) ;//GetStatusから戻ったアドレス得たい・・けどエラー
              //&付けちゃうとclassAの変数入れちゃうし・・・・
//pTempの内容(classAの変数)を更新すると
//lpA1又はlpA2の中身が更新されて欲しい・・・
}
GetStatus関数でアドレスを返してそれをReload側で受け取って
更新内容をGetStatusで渡したlpA1, lpA2のどちらかに反映させたいんですが
アドレス渡せない・・(´・ω・`)
上記のような感じを実現したいんですが無理でしょうか?
890デフォルトの名無しさん:05/02/17 15:11:03
>>889
やりたいことを整理汁。
つーか、GetStatus()はA*を返せばいいんじゃないのか?
ポインタを理解できてないなら勉強し直すか、ポインタ使わずに考えろ。
891デフォルトの名無しさん:05/02/17 15:12:06
生理汁
892デフォルトの名無しさん:05/02/17 15:36:56
>>890
>つーか、GetStatus()はA*を返せばいいんじゃないのか?
あっ!
なんで気がつかなかったんだろう
昨日の晩から今日帰ってくるまでずっと考えてたり(^ω^;)
ありがd !!
893デフォルトの名無しさん:05/02/17 15:50:33
>>892
ちなみにどうしても引数で渡したかったら、ポインタへの参照にすれば良い。
894デフォルトの名無しさん:05/02/17 16:44:44
馬鹿は馬鹿なりにグローバル変数なんて使っちゃうからな。
895デフォルトの名無しさん:05/02/17 17:03:26
>>894
oserrはプロセス固有のグローバル変数だろが?
896デフォルトの名無しさん:05/02/17 18:38:42
出来る人は出来る人なりにグローバル変数を使う
897デフォルトの名無しさん:05/02/17 18:56:39
馬鹿は馬鹿なりに、
出来る人は出来る人なりに、
ってのをよく理解汁!!
898デフォルトの名無しさん:05/02/17 23:49:23
以下のプログラムで、配列や構造体の先頭のみの初期化でも、
残りが全て0になるのは、どの環境でも共通でしょうか。

#include <stdio.h>

int main(void)
{
int hairetu[5][5] = {0};
struct Hoge{int zero; int one;};
int x, y;

struct Hoge hoge = {0};

for(y=0; y<5; y++, puts(""))for(x=0; x<5; x++)
printf("%d ", hairetu[y][x]);

printf("%d %d\n", hoge.zero, hoge.one);

return 0;
}
899デフォルトの名無しさん:05/02/17 23:51:22
900デフォルトの名無しさん:05/02/18 00:14:12
>>898
直接関係ないけど、初期化の意味を調べ直した方がいいよ
901デフォルトの名無しさん:05/02/18 00:23:46
残りの要素は0で初期化されることが保証されてたと思うけど。
902898:05/02/18 00:33:43
>>900
どういう意味か調べていたのですが、以下に乗っている、配列の初期化は
グローバルかstaticにしか出来ないという部分ですか?始めて知りました。
http://www.wakhok.ac.jp/~kanayama/C/02/node112.html

>>901
ありがとうございます。分かりました。
903デフォルトの名無しさん:05/02/18 00:39:26
>>902
言葉の意味を調べろ、って事。
0にするだけが初期化じゃない。
904デフォルトの名無しさん:05/02/18 00:45:50
>>903
>>898が0にするのが初期化と言ってるようには見えないんだけど。
905デフォルトの名無しさん:05/02/18 00:47:36
自動変数の初期値は不定だと思っていた。配列は特別なのか…
906898:05/02/18 00:48:22
>>903-904
そこの意味ですか。分かりました。
907デフォルトの名無しさん:05/02/18 00:55:11
C の練習にとパズルを考えているのですが面白いものが思いつきません
パズルっぽい課題を知っている方、出題してくれませんか

ちなみに、昨日やった (同僚が出してくれました) のはこんな問題でした

> 下のような 10 × 10 の地図と島の数と広さを表示しなさい
> 隣接した小島はひとつの島とします (ナナメも隣接とする)

○●○○○○○●○○
○○○○●○●○○○
○○●○○○○○○●
○○○○○○○○○○
●●○○○○○●●○
○●○●●○○○○○
●○●○○●●●○●
○●○○○○○○○○
●○○○○○○●○●
●○○○○●○○●○
1.Island(1)
2.Island(2)
3.Island(1)
4.Island(1)
5.Island(1)
6.Island(13)
7.Island(2)
8.Island(1)
9.Island(3)
10.Island(1)
total:10(26)

908デフォルトの名無しさん:05/02/18 01:10:38
>>907はもうできて次の課題を捜している、という意味です
分かりにくくてすみません
909デフォルトの名無しさん:05/02/18 01:17:01
>>907
C Magazineにそんなのが毎月載ってるよ。
910デフォルトの名無しさん:05/02/18 12:27:09
>>902
そのリンク先はあまり信用しない方がいいかもしれない。
しかし…大丈夫か?北星
911564:05/02/18 15:17:24
どなたか今日宿題手伝ってくださいませんか?
class Node,class List,class Employee,class EmpTable
項目は、File Process,Linked-list,node.
報酬します。
興味のある方は、上のメアドにメールください。
ちなみにC++で6時間以内に仕上げなきゃいけないので。
912デフォルトの名無しさん:05/02/18 15:19:52
>>911
大きいのがどうしたって?
君はまず日本語を勉強するべきだと思われるが。
913デフォルトの名無しさん:05/02/18 15:21:12
つーかマルチかよ。
914デフォルトの名無しさん:05/02/18 15:34:29
>>907
最近出版された、
「パズルの宣教師」(ISBN:4-89072-816-3)
って本には、面白そうなネタが沢山詰まっている。

Cマガで使われたネタも多い。
915デフォルトの名無しさん:05/02/18 15:45:08
c++の int() のような()演算子の名前は、値生成演算子でいいのですか?
916デフォルトの名無しさん:05/02/18 16:15:08
Win2kでBorland C++ Compilerっていうフリーのコンパイラを使ってます。
関数のプロトタイプ宣言に関する質問があります。
下のAはあるC言語講座のサイトに載っていたプロトタイプ宣言の例文で、これは
警告が出ずにコンパイル出来るんですけど、Bみたいに引数を取ると
「プロトタイプ宣言のない関数」っていう警告が出てくるんです。
ちなみにBのプログラムも、ちゃんと動いて7と表示されます。
この警告はなんで出てくるんでしょうか?
A------------------
#include <stdio.h>
int plusint(int, int);
void main(){
int i1, i2;
int total;
scanf("%d %d", &i1, &i2);
total = plusint(i1, i2);
printf("%d\n", total);
}
int plusint(int a, int b){
return a + b;
}
B-------------------
#include <stdio.h>
int plusint();
void main(){
int total;
total = plusint();
printf("%d\n", total);
}
int plusint(){
int a=3;int b=4;
return a + b;
}
917デフォルトの名無しさん:05/02/18 16:19:13
void
918デフォルトの名無しさん:05/02/18 16:29:41
プロトタイプ宣言すらいらん

#include <stdio.h>
void main(){
int total;
total = plusint();
printf("%d\n", total);
}
int plusint(){
int a=3;int b=4;
return a + b;
}
919デフォルトの名無しさん:05/02/18 16:32:43
>>918さん
動きましたけど、やっぱり同じ警告が出ます。
920デフォルトの名無しさん:05/02/18 16:33:06
初歩中の初歩で申し訳ないのですが
char (*foo)[2]; や int (*foo)[2];の意味が解りません・・・。
いったいこれは何を指し示しているのでしょうか?
またどういったときに使うのでしょうか?
921デフォルトの名無しさん:05/02/18 16:38:11
配列のポインタ
printf("%x", foo++);
printf("%x", foo++);
printf("%x", foo++);
とかすれば意味がわかる
922デフォルトの名無しさん:05/02/18 16:38:12
>>920
char (*foo)[2];は、fooがchar [2]へのポインタであることを示す宣言。
たとえば、n*2の二次元配列を動的に確保したいとき、
char (*foo)[2] = (char (*)[2])malloc(n * 2);
のよう使う。
923デフォルトの名無しさん:05/02/18 16:41:02
初心者の特徴:本当に意味のあるレスは確実にスルーする。
(実例:>>916-919)
924デフォルトの名無しさん:05/02/18 16:44:16
printf()に戻り値はありますか?
925デフォルトの名無しさん:05/02/18 16:50:01
>>924
あるけど使っているのは見たことが無い。
出力されたバイト数(失敗時は負の値)が返るらしい。
926デフォルトの名無しさん:05/02/18 16:52:36
>>919
int plusint(void);
int main(void) {
 〜;
 return 0;
}
927デフォルトの名無しさん:05/02/18 16:57:45
>>917さん
>>926さん
警告出なくなりました。
ありがとうございました。
928920:05/02/18 17:01:44
>>921-922
なるほど。
解りやすい解説ありがとうございます。
何とか理解できそうです。
929デフォルトの名無しさん:05/02/18 17:15:22
>>924
fprintf()同様、出力にエラーが無いか確認するためにチェックする方がよい。
930デフォルトの名無しさん:05/02/18 17:17:53
stdoutが壊れているならどうしようも無いけどね
931デフォルトの名無しさん:05/02/18 17:19:17
>>930
リダイレクトしているかも知らん。
932デフォルトの名無しさん:05/02/18 17:21:30

リダイレクトしても書けないんだからどうしようも無いのでは?
933デフォルトの名無しさん:05/02/18 17:27:38
まだstderrが使えるかもしれない
934デフォルトの名無しさん:05/02/18 18:40:54
void mainって書くのってどうよ?
935デフォルトの名無しさん:05/02/18 18:59:17
>>934
問題なし
936デフォルトの名無しさん:05/02/18 19:00:27
>>934
問題なし。
本質的ではない。
937デフォルトの名無しさん:05/02/18 20:55:29
MMOを作ろう!企画を立ち上げました。協力できる人はこちら
http://www112.sakura.ne.jp/~kaientai-project/creategame.htm

2chスレ
http://game10.2ch.net/test/read.cgi/mmominor/1108379282/l50

くすぶってないで、自分の力を試してみよう!!
938デフォルトの名無しさん:05/02/18 22:20:50
>>900
関係ないなら擦れ野無駄なので黙ってて欲しいです。
939デフォルトの名無しさん:05/02/19 00:37:11
参照渡しって実際には何をやってるんでしょうか?
コンストラクタ呼ばなくて済むから効率いいってのはわかるんですが、
オブジェクト渡しやポインタ渡しみたいにコピーを生成しないのに
どうやって関数のスコープの中に情報を渡してるのか疑問に思ったので。
940デフォルトの名無しさん:05/02/19 00:45:15
実際にはほとんどポインタ渡しと同じ。nullのときの挙動が違うけど。
941939:05/02/19 00:51:46
>>940
参照型もポインタみたいに4バイトでアドレス保持してて
それをコピーしてるって意味でしょうか?詳しくお願いします。
942デフォルトの名無しさん:05/02/19 00:53:05
X(&X)コンストラクタ
943940:05/02/19 01:01:41
>>941
逆アセンブルして見れ
944デフォルトの名無しさん:05/02/19 01:05:07
ポインタが4バイトだと誰が言った。

const参照引数と暗黙の変換コンストラクタ呼び出しとか色々違う点はある。
945デフォルトの名無しさん:05/02/19 01:36:52
>>940
とりあえず単純な関数作って引数をオブジェクト、ポインタ、参照と変えて
VCの混合モードで見てみました。アセンブラわからないけど参照渡しのときと
ポインタ渡しのときで似たようなコードになるのは確認できました。
あとはなんとか自分で調べてみます。ありがとうございました。
>>944
そこ絶対つっこまれると思いました。質問するときは厳密に表現するように気をつけます。
946デフォルトの名無しさん:05/02/19 09:41:34
>>945
ナイスガッツ。
頑張れ。
947デフォルトの名無しさん:05/02/19 11:47:13
引数付のコンストラクタを持つクラスを、別のクラスのメンバにする方法が分かりません。

例えば
class Sub{
public:
Sub(char*);
};
のようなクラスを、

class Main{
Sub sub;
};
のようにメンバで持ちたいのですが、
コンストラクタに渡す引数はどこで指定すればよいのでしょうか?
948デフォルトの名無しさん:05/02/19 11:48:00
>>947
コンストラクタ
949デフォルトの名無しさん:05/02/19 11:50:24
>>947
参照かポインタをメンバにした方がいいよ。
950デフォルトの名無しさん:05/02/19 12:03:16
>>948 949
わかりました。ポインタをメンバにします。
ありがとうございました。
951デフォルトの名無しさん:05/02/19 12:14:39
Main::Main() : sub(引数)
{
}
952デフォルトの名無しさん:05/02/19 12:47:22
>>949
なんで?
new したら delete しなくちゃだし、
参照なら、じゃどこに実体作るのよ、って話にならん?
953デフォルトの名無しさん:05/02/19 13:06:05
>>952
普通そういう使い方したいなら継承するだろ
954デフォルトの名無しさん:05/02/19 13:09:00
相変わらず初心者が回答してるな
955デフォルトの名無しさん:05/02/19 13:50:21
>>953
コンポジットパターンちゅう奴ですわ。

>>954
と、発言するのがやっとなのですね?w
956デフォルトの名無しさん:05/02/19 14:01:05
#include <stdio.h>
#include <ncurses.h>

int main(void)
{
int i,j,k,h,x,y;
char unko[3][19] = {
" kono gyou ha 1",
" kono gyou ha 2",
"kono gyou ha 3"
};
y=8;
x=32;
initscr();
clear();
for(i = 0;i < 3; i++){
move(y+i,x);
printw(unko[i]);
}

for(j=1;j>0;j++){
}
957956:05/02/19 14:09:39
//int key,oldx, oldy;
//noecho();
//cbreak();
//keypad(stdscr, TRUE);
//while ((key = getch()) != KEY_BACKSPACE) {
// move(20,0);
//printw("------------------------ type backspace --------------------");
//}
endwin();}
文字が表示されなくて困ってます.二番目のforの無限ループのところを消して
//でコメントアウトしたところを戻せば表示されるのですがこんな結果になるのは何故ですか?
958デフォルトの名無しさん:05/02/19 14:19:02
貼り付けたところ以外に原因がある
959デフォルトの名無しさん:05/02/19 14:22:11
それ無限ループじゃないような
960952:05/02/19 14:44:45
>>953
…あなた基礎からやり直した方がいいですよ。
「is-a」「has-a」辺りから。
961デフォルトの名無しさん:05/02/19 14:48:08
>953
そう設計したクラスを使わされるヤツは可哀相だな
962デフォルトの名無しさん:05/02/19 15:37:05
>>944
>>941が言った
963デフォルトの名無しさん:05/02/19 15:42:57
>>962
そのパターンつまんねぇです。
964マイク ◆yrBrqfF1Ew :05/02/19 15:46:51
でもまあ妙なクラス設計で苦しむのが2chネラなら良いな(▽
965デフォルトの名無しさん:05/02/19 15:54:16
>>964==>>953なら微笑むところだ
966マイク ◆yrBrqfF1Ew :05/02/19 16:15:10
残念だが12〜3時までは俺は布団の中だ(▽
967デフォルトの名無しさん:05/02/19 19:13:56
つか>951で終わってるのにいつまで引っ張るんだよ。
968デフォルトの名無しさん:05/02/19 19:16:20
>>967
実体クラスとかだせぇし。
969デフォルトの名無しさん:05/02/20 01:23:09
VC++6.0からJScriptを呼び出したいんですが、ご存知の型
というかご存知の方、いらっしゃいますか?
IActiveScriptあたりを使うんでしょうか。
970デフォルトの名無しさん:05/02/20 02:33:34
> ご存知の型というかご存知の方

( ´,_ゝ`)
971デフォルトの名無しさん:05/02/20 03:25:49
>>969
テラワロス
972デフォルトの名無しさん:05/02/20 07:38:21
>>969
ShellExecute(NULL, "〜.js", ...);
973デフォルトの名無しさん:05/02/20 12:12:46
>>972
ん。説明不足でしたが、戻り値を(たぶんVARIANTで?)
取得したいんですよ。
974デフォルトの名無しさん:05/02/20 12:18:05
無理
975デフォルトの名無しさん:05/02/20 12:22:02
質問させてください。
class BASE {
public:
void (*func)(void*);
};
のvoid (*func)(void*)に
class NEW : public BASE {
public:
void new_func(NEW* obj);
};
のnew_funcのアドレスを入れたいのですが、
どうすればいいのでしょうか。
よろしくお願いします。
976デフォルトの名無しさん:05/02/20 12:41:59
>>975
class NEW;

class BASE {
public:
void (NEW::*func)(void*);
};

class NEW : public BASE {
public:
void new_func(void* obj);
};


BASE b;
b.func = &NEW::new_func;
977デフォルトの名無しさん:05/02/20 13:08:03
>>973
VARIANTでってあたりがなぁ。
978デフォルトの名無しさん:05/02/20 16:24:19
ATL使えばいいんじゃないか?
979デフォルトの名無しさん:05/02/20 16:59:59
enum って何て読んでますか?
漏れは 「イーナム」 なんだけど。
980デフォルトの名無しさん:05/02/20 17:00:16
Ruby使えばいいんじゃないか?
981デフォルトの名無しさん:05/02/20 17:00:47
いにゅーむ
982979:05/02/20 17:36:31
>>980
ご意見ありがとうございます。
983デフォルトの名無しさん:05/02/20 19:41:56
今まで「えなむ」って読んでいた……。
984デフォルトの名無しさん:05/02/20 20:14:51
えにゅめ
985デフォルトの名無しさん:05/02/20 20:37:44
986デフォルトの名無しさん:05/02/20 20:39:51
今まで「いーぬるぽ」って読んでいた・・・・・・・
987デフォルトの名無しさん:05/02/20 23:07:07
988デフォルトの名無しさん:05/02/20 23:16:40
漏れもイーナムかな
言いやすいし
989979:05/02/20 23:43:33
そろそろ次スレの季節だな。
漏れは規制で立てらんないけど。

>>987
enumerate じゃなくて enum の話をしてるんです。
int の読み方の話に integer を持ち出すようなお方ですね。
990デフォルトの名無しさん:05/02/20 23:54:42
>>987を参考にすると「えにゅむ」かな。
脳内では「いーなむ」って読んでるけど。
991デフォルトの名無しさん:05/02/21 00:06:31
えみゅむて・・・
えみゅーむです。
992デフォルトの名無しさん:05/02/21 00:07:39
うが、
えにゅーむな・・・。
993デフォルトの名無しさん:05/02/21 00:12:59
イニューム
994デフォルトの名無しさん:05/02/21 00:14:07
こらこら
次スレ立つまでネタレスは止めとけ
995デフォルトの名無しさん:05/02/21 02:42:16
「えにゅーむ」って読んでたけど正しくは何・・?
996デフォルトの名無しさん:05/02/21 02:55:05
997デフォルトの名無しさん:05/02/21 02:55:45
997
998デフォルトの名無しさん:05/02/21 03:00:02
998
999デフォルトの名無しさん:05/02/21 03:00:44
ほげ
1000デフォルトの名無しさん:05/02/21 03:01:24
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。