【初心者歓迎】C/C++室 Ver.36【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/04/01(日) 23:01:13ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.35【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1171888583/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2007/04/01(日) 23:37:030003デフォルトの名無しさん
2007/04/02(月) 00:08:17ソートの問題で、「ただし同じ値なら同じ順位を返しなさい」という
ただし書きがあって、今までなかった注意書きでどうすればいいのか分かりません。
ググったのですが・・・選択ソートを使っています。IF文の
elseでどのような指示をつければよろしいでしょうか?
0004デフォルトの名無しさん
2007/04/02(月) 01:05:35順位って1位2位ビリってか。
0005デフォルトの名無しさん
2007/04/02(月) 02:19:290006デフォルトの名無しさん
2007/04/02(月) 02:23:27まずはソースをさらすんだ
0007デフォルトの名無しさん
2007/04/02(月) 02:38:470008デフォルトの名無しさん
2007/04/02(月) 03:05:45K&W
独習C
結城浩のC言語プログラミングレッスン
0009デフォルトの名無しさん
2007/04/02(月) 03:26:310010デフォルトの名無しさん
2007/04/02(月) 04:24:100011デフォルトの名無しさん
2007/04/02(月) 06:25:033つ以上、チェックがつけばアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、かわいがってもらうことが大切だ
0012デフォルトの名無しさん
2007/04/02(月) 13:39:480013デフォルトの名無しさん
2007/04/02(月) 16:44:09あれで勉強してるひといるのか?
ちょっと見て、ん〜?ってとこが多かった。
あれで基礎固めたら大変だろうね。
0014デフォルトの名無しさん
2007/04/02(月) 19:27:14柴田望洋乙
0015デフォルトの名無しさん
2007/04/02(月) 19:31:52C++で日本語のファイル名を作成する場合はどうすればいいの
でしょうか?
ofstream out("ほげ.txt");
と書いたソースをsjisで保存してもutf-8で保存しても出来る
ファイル名は文字化けしてしまいます。
OSはWindowsXP、開発環境はVS2005です。
どなたかご教授お願い致します。
0016デフォルトの名無しさん
2007/04/02(月) 19:34:36UNICODEの定義を外すorロケール設定をする
0017デフォルトの名無しさん
2007/04/02(月) 20:20:240018デフォルトの名無しさん
2007/04/02(月) 20:22:22http://www.google.co.jp/search?q=amazon+C%8C%BE%8C%EA+%83%7C%83C%83%93%83%5E
0019C++初心者
2007/04/02(月) 20:46:41現在、VisualStudio2005上でWindowsFormアプリケーション上に配置した
ボタンクリックイベントにて別クラス
�@TestClass2.cpp
�ATestClass2.h
にて定義したメソッドを呼出そうとしているのですがうまく呼出せません。
どこに問題があるのでしょうか?
�@
#include "StdAfx.h"
#include "TestClass2.h"
TestClass2::TestClass2(void)
{
int Method2()
{
return 10;
}
}
�A
#pragma once
ref class TestClass2
{
public:
TestClass2(void);
int TestClass2::Method2();
};
0020C++初心者
2007/04/02(月) 20:48:26private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
int i_return = TestMethod();
Debug::WriteLine("処理が終了しました!!");
//この部分でTestClass2の中にあるMethod2()関数を呼出したいです。
int i_return2 = TestClass2::Method2();
}
0021デフォルトの名無しさん
2007/04/02(月) 21:38:08C++的には静的メンバ関数だっけ?
0022デフォルトの名無しさん
2007/04/02(月) 22:17:53002320
2007/04/02(月) 22:29:550024デフォルトの名無しさん
2007/04/02(月) 22:40:16double a=0;
printf("ヌルポ\n");
if( a==0 ) printf("ガッ\n");
これも例外なくNG?
ゼロだけは許されるとか、そういうのアリ?
0025デフォルトの名無しさん
2007/04/02(月) 22:48:030026デフォルトの名無しさん
2007/04/02(月) 22:49:54理想通りにいかなかったりするからだろ
0027デフォルトの名無しさん
2007/04/02(月) 22:50:010028デフォルトの名無しさん
2007/04/02(月) 22:52:06εを0とみなさないなら問題ない。
+0.と-0.は等しい。
0029デフォルトの名無しさん
2007/04/02(月) 23:04:29ゼロは特別に許された方が便利だろとか
思ったりしたんだよ
話変わるけど
大体ポインタがゼロのときエラーとかいう仕様が
まかり通ってる時点でなんかもうおかしいんだよ
ゼロ番地なのかエラーなのかわかんねーじゃん
0030デフォルトの名無しさん
2007/04/02(月) 23:06:57お前がポインタのゼロだと思ってるものはヌルポインタ。
http://www.kouno.jp/home/c_faq/c5.html
0031デフォルトの名無しさん
2007/04/02(月) 23:07:550032デフォルトの名無しさん
2007/04/02(月) 23:09:200以外でエラーになることもあるだろ
0033デフォルトの名無しさん
2007/04/02(月) 23:40:170034デフォルトの名無しさん
2007/04/02(月) 23:42:16ヌルポインタはどこも指してない無効なポインタであることが保証されてる。
ヌルポインタが全bit0であるかは環境依存。
0035デフォルトの名無しさん
2007/04/02(月) 23:45:45わかってるんだろうが、その書き方は誤解を招く虞が…。
ポインタが必要な文脈で現れた整数リテラルの0がヌルポインタを意味するのであって、
整数0をポインタとして扱ってもヌルポインタに化けるわけじゃない。
0036デフォルトの名無しさん
2007/04/02(月) 23:46:58どう書いても誤解の可能性は避けられないんだから、
ごちゃごちゃ言わずに C FAQ で済ませとけよ。
0037デフォルトの名無しさん
2007/04/02(月) 23:50:340038デフォルトの名無しさん
2007/04/02(月) 23:55:00コマンドプロンプトで
bcc32もgccも試したけど
内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出る。
何かインストールが必要なん?
0039デフォルトの名無しさん
2007/04/02(月) 23:55:40gccはCygwinもしくはMinGWのインストールが必要。
0040デフォルトの名無しさん
2007/04/02(月) 23:58:430041デフォルトの名無しさん
2007/04/02(月) 23:59:00昔(10年前くらい)、コンパイラってのは高いやつとフリーのやつではうんと差があると聞いたのですが、
今でも、borandや、gccとかじゃやっぱり駄目駄目なんですか?
0042デフォルトの名無しさん
2007/04/03(火) 00:00:51C FAQ読んでこい
0043デフォルトの名無しさん
2007/04/03(火) 00:01:03何をしたいかによっては差があるだろうけど
だいぶ前からしょぼしょぼなサブセットなんてないでしょ。
0044デフォルトの名無しさん
2007/04/03(火) 00:03:47コンパイラを買う時代は終わったよ。
最適化性能にはそれぞれ癖があるが、入門レベルじゃ違いなんかわかりゃせん
0045デフォルトの名無しさん
2007/04/03(火) 00:05:21そもそもコンピュータの性能が10年間で物凄く向上したし、コンパイラの技術も向上した。
Borland C++やGCCも全然問題ない。
そして社会も変わった。
今はMicrosoftすらコンパイラはおろかIDEもフリーで公開している。
もうコンパイラを売るような時代ではなくなった。
まあでもIntel C++はすごいという噂は良く聞くけどな。
0046デフォルトの名無しさん
2007/04/03(火) 00:22:12何でも無料になるのも開発者にとって損じゃないですかね?
0047デフォルトの名無しさん
2007/04/03(火) 00:40:56プログラムを作る動機は金だけじゃない。
金が最終目的だとしても、企業であれば宣伝効果というものもある。
0048ひろゆき@どうやら管理人
2007/04/03(火) 00:46:30一般の企業やプログラマにとってはむしろ得じゃまいか?
MSとか某は別として。MSとか某の場合は>>47の言うとおり
0049デフォルトの名無しさん
2007/04/03(火) 00:48:360050デフォルトの名無しさん
2007/04/03(火) 00:56:23質問させて下さい。
現在就職活動をしていて先日中小メーカーの面接に行ったのですが、
プログラミング経験はあるか、と聞かれました。
社内SEというものを募集しているとのことでした。
その場では無いと答えたのですが、中学校でパソコン部に所属して
いたとき、暇だったので部室にあったシューティングゲームの
プログラムらしきものが書いてあるマニュアルを見ながらtowns(?)
とかいうOSで凄くショボイゲームを作ったことがあるのですが、この
ような経験でもプログラミング経験アリといえるのでしょうか?
…自分でも意味不明なことを聞いていると思うのですが、どなたか
よろしくお願いします。。
0051デフォルトの名無しさん
2007/04/03(火) 00:58:47それはマ版ネタだとからプログラマー板へ
0052デフォルトの名無しさん
2007/04/03(火) 01:07:18昔なんてどうだっていい、今、プログラミングをCなりC++なりJAVAなり
なんなりと、現在出来るかどうかだろ。
まぁ、経験ありますと言ったら仕事増えるだけだから
やめとけばいいじゃん
0053デフォルトの名無しさん
2007/04/03(火) 01:08:33だからって、コンパイラ製品自体を売るのをやめて
他の企業がOffice競合製品を開発できないようにすべき、という話には
決してならない。
005450
2007/04/03(火) 01:25:49でもなんか関係ないみたいですね。。
0055デフォルトの名無しさん
2007/04/03(火) 03:32:20スケルトン使ってゲーム作れるまでになったのですが
細かいことが分からないので質問させてください
・スプライトを使って加算合成する方法
・テキストを表示するとフルスクリーンにできなくなるのはなぜか
下は自分のソースのせいかもしれないですが
何か分かることがあればお願いします
0056デフォルトの名無しさん
2007/04/03(火) 08:14:12情報が少なすぎて何言ってる不明だが
文脈からするに DirectX の話か?
もしそうなら DirectX 関連のスレへ。
0057デフォルトの名無しさん
2007/04/03(火) 12:21:23public:
static double a;
};
double A::a=10;
int main(void)
{
A x;
x.a=15;
A y;
}
とすると、A yで再びaが10にリセットされてしまいますが、
a=15を維持したままにすることはできないでしょうか?
クラスで共通の変数aを使いたいのですが、
クラスがどこかで作成されるたびに、aの値がリセットされてしまい、困っています。
0058デフォルトの名無しさん
2007/04/03(火) 12:36:000059デフォルトの名無しさん
2007/04/03(火) 18:43:190060デフォルトの名無しさん
2007/04/03(火) 19:00:45「Error: C3009E: 'operator new' must have a return type of 'void*' and have a first argument of type 'size_t'」
こんなエラーが出てしまいます。
実装はこんな感じです。
class base{
static void * operator new( size_t size) {
return malloc_local(size);
}
}
間違いの指摘や、ご存知な事がありましたら教えてください。
006160
2007/04/03(火) 19:02:45public:
static void * operator new( size_t size ) {
return malloc_local(size);
}
};
すみません。修正。
006220
2007/04/03(火) 20:30:43再度ご質問させて下さい。
現在、プロジェクトに(通常)C++クラスファイルを追加して
クラスの中にメソッドを組み込み他メソッドより(ボタンクリックイベント)
�@ C_plus2.cpp
�A C_plus2.h
�@にプログラム本体(メソッド)を記述し、�Aにプロトタイプ宣言を
行った上でWindowsForm上のボタンクリックイベントより�@に本体のある
メソッドを呼出そうとしているのですが呼出す事が出来ません。
(インテリセンスは通りますがエラーになります。)
どうすれば2ファイル(*.cpp & *.h)に分けたクラスに記載のメソッドを
呼出す事が出来るのでしょうか?
※ヘッダーファイルにメソッド本体を記述すると、ボタンクリックイベント
の内部に通常の呼出しコードを気記述することによりメソッドを呼出せます。
(ヘッダーファイルにメソッドを全て記述すれば他クラスと2ファイル
006320
2007/04/03(火) 20:32:42(ヘッダーファイルにメソッドを全て記述すれば
問題無くボタンクリックイベント内部から�@に本体のあるメソッドを呼出す
事が出来ます。)
0064デフォルトの名無しさん
2007/04/03(火) 20:58:20class base{
public:
void * operator new( size_t size ) {
return malloc_local(size);
}
};
0065デフォルトの名無しさん
2007/04/03(火) 21:08:42↓こんなんで動いてるけどそうじゃなくて?
○test.h
class CTest{
public:
CTest(){};
~CTest(){};
void debug( char *str);
};
○test.cpp
#include "stdafx.h"
#include "test.h"
void CTest::debug(char *str){
OutputDebugString(str);
}
○XXXDlg.cpp
#include "test.h"
void CXXXDlg::OnBnClickedOk()
{
CTest hoge;
hoge.debug("OK\n");
//OnOK();
}
006660
2007/04/03(火) 21:18:22static削っても、同様のエラーが出ます。
class base{
public:
void * operator new( size_t size ) {
return 0;
}
};
malloc_local()に起因してるのではないかと思い、
してみましたが、これも変わらず。
0067C++初心者?
2007/04/03(火) 21:23:47只今、VC6を使用してPro*Cのプログラミングをしているのですがビルドすると不要なBreak文がありますとエラーが出てしまいます。
プログラムの流れとしては
�@DBからデータを取得する
�A取得したデータをもう片方のテーブルと差分を取り対象のデータを取得する。
�B�Aで取得した差分のデータをワークテーブルにインサートする
今の問題の現象は�Bでおきています。
うまく説明できていないと思うのですが、何かヒントとなるようなことを教えていただけるとありがたいです。
DBはオラクル9を使用しています。
0068デフォルトの名無しさん
2007/04/03(火) 21:37:36006920
2007/04/03(火) 21:39:00解決しました。どうもありがとうございます。
どうやら #include <hoge2.h> の記述位置を using 直下(同一スコープ)
に記述していたことが原因でした。
本当にありがとうございます^^;
0070デフォルトの名無しさん
2007/04/03(火) 22:13:07いま、プログラムの勉強もかねて作ってみたいPGがあるのですが、C#で作ったほうがよいのか、
C++で作ったほうが良いのか迷っております。
作ってみたいPGとは、オンラインゲームの麻雀ゲームの支援ソフトです。
既存の画面だとどうにもやりづらくて、それならば勉強もかねて、
専用のGUIを作成し、このボタンを押したらこの牌をすてるだとか、
自分のやりやすいようにGUIを作成してみたいなと、思ったわけです。
色々調べてみたのですが、C#というのはC++とVBの良いところを持ち合わせたものだとか
というのはわかったのですが、ではこのようなPGを作ったときの相性はどちらが
よいのだろうと疑問がでました。
また、WinnyはC++で作成されており、なぜC#ではつくられていないのだろうという
疑問もあります。
もし、お分かりになる方がいらっしゃれば、ご教授願えないでしょうか?
0071デフォルトの名無しさん
2007/04/03(火) 23:10:23ってのがそもそもどういうのかによるかな。
場合によってはUWSCみたいなマクロのがよい。(非GUIだけど)
作りたいものってのは置いといて、言語の勉強ならC#でいい。
C++は悪い意味で多くを受け入れすぎ。先にモダン言語に矯正されとくといい。
> また、WinnyはC++で作成されており、なぜC#ではつくられていないのだろう
C++は一番融通が利くからね。RADからアセンブリまできめ細かく。
ということで、C#ならスレ違いになるので他で勉強してください。
0072デフォルトの名無しさん
2007/04/04(水) 00:40:52Pro*CはCじゃないからここで回答は得られにくいかと。
つーか、折角Oracleに大枚叩いているんだろうから聞けばいいじゃん。
0073デフォルトの名無しさん
2007/04/04(水) 01:01:07C#でもC++でも、使いこなせるほうで作れば良いじゃん。
っていうか、勉強がてらか。
気楽にやれると思いきや結局DllImportで
api使う事になっちゃうC#?
mfcを使ってみてはむかついて、クラス設計で悩んで
頭がクラクラしちゃうC++?
メッセージ毎の処理と、api群や自作関数とたわむれて
しまいに何の処理書いてるのかわからなくなるC?
ま、C#で良いか。
>WinnyはC++で作成されており
>なぜC#ではつくられていないのだろう
C#登場2001年Winny2002年5月に公開
0074デフォルトの名無しさん
2007/04/04(水) 13:18:340075デフォルトの名無しさん
2007/04/04(水) 16:01:070076デフォルトの名無しさん
2007/04/04(水) 16:07:00streambuf::pubsetbuf()
0077デフォルトの名無しさん
2007/04/04(水) 16:19:51C++ストリームはCのFILE*でできたことなら
何でもできるようになっていると思って間違いない
0078デフォルトの名無しさん
2007/04/04(水) 18:00:11あとUNIX(XWINDOW)とVCのchar型って何バイト違うんですか?
2個目の質問の解説等が日本語で載ってるサイト知ってたら教えてください。
0079デフォルトの名無しさん
2007/04/04(水) 18:33:351. 式の中ならあってもなくても同じこと。
http://www.kouno.jp/home/c_faq/c4.html#12
2. sizeof (char)は常に1と定められている。
1バイトが8ビットとは限らないが、それは基本的にCPU次第。
http://www.kouno.jp/home/c_faq/c7.html#8
0080デフォルトの名無しさん
2007/04/04(水) 19:52:47関数ポインタのことか?
0081デフォルトの名無しさん
2007/04/04(水) 19:59:31みたいのを*Funcで一塊だと思ってるとか?
008278
2007/04/04(水) 20:03:16レスどうもです。
1なんですが、宣言で*関数とあります。戻り値は関数の中でchar *r
と宣言されたものがreturn rで返ってます。
使われる場合は
i=*関数;
ってなってます。
ようするに関数に*がついてるからiにはrの中身が代入されるんですか?
ポインタと同じで
紹介してもらったHP見たんですが、質問の仕方が悪かったため
違う様な気がします…
情報小出しにして申し訳ないですがもう一度教えてください。
0083デフォルトの名無しさん
2007/04/04(水) 20:34:30{
int ret=うんたら;
return ret;
}
char * hoge2() //返り値は(char *)型
{
char *ret=うんたら;
retern ret;
}
何の違いもない。
008478
2007/04/04(水) 21:30:02ありがとう!!
0085デフォルトの名無しさん
2007/04/04(水) 21:34:460086デフォルトの名無しさん
2007/04/04(水) 21:37:360087デフォルトの名無しさん
2007/04/04(水) 22:26:13#include <stdio.h>
#include <dir.h>
main(){
char b[1024];
struct ffblk Fd;
do{
if( findfirst("*",&Fd,FA_RDONLY|FA_HIDDEN|FA_ARCH)==EOF)break;
printf("%s\n",Fd.ff_name);
}
while(!findnext(&Fd));
}
0088デフォルトの名無しさん
2007/04/04(水) 22:27:040089デフォルトの名無しさん
2007/04/04(水) 22:29:46ありがとうございます
わかりました
0090824
2007/04/04(水) 22:50:26Debug::WriteLine("A","の値は","ホゲです。");
という風にしか連結することは出来ないのでしょうか?
C#の場合だと
Debug.WriteLine("A" + "の値は" + "ホゲです。");
といった感じで連結出来るのですがC++.netでもお手軽な連結
方法は何かありますか?(VS2003利用です。)
0091デフォルトの名無しさん
2007/04/04(水) 22:57:27WriteLine以外ではString::ConcatとかStringBuilderを使っておけ。
ネイティブなstd::wstringに変換する関数を作ってやるなんて方法も考え付くけど、
それはそれで色々制限があって面倒だろう。
ちなみにVC++ 2005 (C++/CLI)だとマネージドでも演算子多重定義が使えるようになった。
0092デフォルトの名無しさん
2007/04/04(水) 23:39:49>>91
そうですか。残念ですが諦めます。
やっぱりC#が一番便利です。
0093デフォルトの名無しさん
2007/04/04(水) 23:45:48どうやってわたせばいいんでしょうか
0094デフォルトの名無しさん
2007/04/04(水) 23:51:27void f(ARR&);
ARR a;
f(a);
0095デフォルトの名無しさん
2007/04/05(木) 09:15:38配列の配列といっても二次元配列じゃなくて
0096デフォルトの名無しさん
2007/04/05(木) 10:31:05BccDevやVisualC++なら
#include <stdio.h>
//---------------------------------------------------------------------------
int main(void)
{
printf("hello");
return 0;
}
//---------------------------------------------------------------------------
を保存してデバッグなしで開始するとウィンドウが現れてちゃんとhelloと表示されます。
ところがTurboでコンソールアプリケーションでC言語を選び
上記の操作をすると一瞬ウィンドウが開いたかなと思ったら即閉じてしまうんです
hello だけ表示できればあとは何とかなると思いますがそこまで教えていただけませんか?
0097デフォルトの名無しさん
2007/04/05(木) 10:46:52キー入力、時間待ちをいれろ
0098デフォルトの名無しさん
2007/04/05(木) 11:36:42#include <stdio.h>
int ch;
int main(ivoid)
{
printf("pl");
ch=getchar() ;
return 0;
}
getchar を使ってwindowを表示しEnterを押すと消えるようになりました
とりあえずしばらくこれでやってみます。
ありがとうございました
0099デフォルトの名無しさん
2007/04/05(木) 11:49:430100デフォルトの名無しさん
2007/04/05(木) 11:51:540101デフォルトの名無しさん
2007/04/05(木) 15:11:46インラインは関数のみに使うもの?
それともCとC++の違いですか?
0102デフォルトの名無しさん
2007/04/05(木) 15:17:05inlineは関数にのみc99やc++で使用できる。
0103102
2007/04/05(木) 16:12:31staticで外部変数ならそのファイルでのみ有効
内部変数ならその関数の内部のみで有効
関数はそのファイルでのみ有効
ということですか。ありがとうございます。
0104102
2007/04/05(木) 16:13:20間違った
0105デフォルトの名無しさん
2007/04/05(木) 21:13:20信頼できる知人からVC++6.0で動いているソースコードを頂きました。
実際、コンパイルできるところと、実行できるところは確認済みです。
そのコードをVS2005に移植してみようと思い、コンパイルをかけてみたのですが、
CString CxxxDoc::Func()
{
//中略
return -1;
}
のようなコードがありました。VC++6.0Proでコンパイルが通っている事を確認したので、
ソースに間違いはないと思っていたのですが……、これは一体どういうことでしょうか。
VC++6.0では、こんなコードが許されるのでしょうか?
知人の環境はXP Pro VC6.0 Proです。
よろしくご解答お願いします。
0106デフォルトの名無しさん
2007/04/05(木) 21:17:13というマクロが定義してあるのですが、コレどういう意味なのでしょうか?
こんなマクロ初めてみた上にishigh(c)なんてソースの中のどこにもなくて
困っています。
0107デフォルトの名無しさん
2007/04/05(木) 21:21:39VC++ 6のやつの代わりにVC++ 2005 (ATL/MFC 8)のCStringTのコンストラクタを見てみたけど、
http://msdn2.microsoft.com/ja-jp/library/cws1zdt8(VS.80).aspx
有り得そうな可能性としては、次のどちらか。
•_variant_t1つを引数に取るもの
•char/wchar_t1つとその長さ(デフォルト引数=1)を取るもの
標準C++では複数回の暗黙の変換はやらないことになっており、
VC++ 2005がそれに準拠するようになったからだと思う。
>>106
charが8ビットだとして、最上位ビットが立っているかどうかということだろう。
0108デフォルトの名無しさん
2007/04/05(木) 23:19:08bool a;
bool b;
};
これが定義されてて
cppファイルに
Test func(Test t){
return t;
}
こういう関数を作りました
そして.hファイルに
Test func(Test t);
と定義しても宣言構文エラーになっちゃいます
どうしたらいいでしょうか
わかりづらくてすいません
0109デフォルトの名無しさん
2007/04/05(木) 23:21:41↓
struct Test func(struct Test t);
0110デフォルトの名無しさん
2007/04/05(木) 23:22:03そのTest構造体が定義されているのはどこだ?
0111デフォルトの名無しさん
2007/04/05(木) 23:23:22ヒント:cppファイル
0112デフォルトの名無しさん
2007/04/05(木) 23:27:56cppファイルは全部Common.hをincludeしてあるんですが
Test構造体が定義してあるのは他の.cppファイル.hファイルとは違う.hファイル
です
そこに問題があるんでしょうかね
0113デフォルトの名無しさん
2007/04/05(木) 23:30:20エラーメッセージをコピペして下さい
0114デフォルトの名無しさん
2007/04/05(木) 23:35:30ふたつ定義すると
エラー E2141 C:\My Documents\Project3\Npc.h 112: 宣言の構文エラー
エラー E2238 C:\My Documents\Project3\Npc.h 114: 'MAP_SCENE' の宣言が複数見つかった
エラー E2344 C:\My Documents\Project3\Npc.h 112: 一つ前の 'MAP_SCENE' の定義位置
エラー E2141 C:\My Documents\Project3\Npc.h 114: 宣言の構文エラー
0115デフォルトの名無しさん
2007/04/06(金) 00:24:590116デフォルトの名無しさん
2007/04/06(金) 01:01:32struct Test;
の行を入れてみてから、もう一度
0117デフォルトの名無しさん
2007/04/06(金) 07:43:18でも参考にしている人のソースにはそんな文ないんですが
どうしてなんでしょうか
0118デフォルトの名無しさん
2007/04/06(金) 07:51:43インクルード順序
0119デフォルトの名無しさん
2007/04/06(金) 09:52:100120デフォルトの名無しさん
2007/04/06(金) 10:47:30環境はVS.NET 2003です。
MSDNチュートリアルを見ながら、ATL のActiveX コントロールを作ってみたんですが、dll の容量が324Kbでした。
同様の物を MFC で作った ocx の容量は144Kbでした。
てっきり ATL の方が小さくなると思ってたんですが...
ひょっとして、MFC の方は別途必要な物があるんでしょうか?VBRUNJPなんとかみたいに。
どうかよろしくお願いします。
0121デフォルトの名無しさん
2007/04/06(金) 11:30:05静的にリンクする(ルーチンを自分で持つからでかくなる)か
dllを使う(dllを呼ぶから自分は小さいが実行時に呼ぶdllが必要)かは
ATL, MFCともにプロジェクトのプロパティで設定できる。
デフォだとATLは静的リンクでMFCは共有dllだったかも。
MFCで共有dllにしたときに必要なdllは、vectorとかでパッケージになってます。
0122デフォルトの名無しさん
2007/04/06(金) 21:09:15.exeになってしまいます。exeでもcgi-binのディレクトリに置けばCGIとして実行されますが
URLの最後がexeだと怪しいファイルをDLさせようとしているのだと勘違いされるかもしれないので
拡張子をCGIにしたいんですけど、どうすればいいんですか?
Visual Studio.net使ってます
0123デフォルトの名無しさん
2007/04/06(金) 21:17:340124デフォルトの名無しさん
2007/04/06(金) 21:22:46すみません、それはどこに記述すればいいんですか?
0125デフォルトの名無しさん
2007/04/06(金) 22:22:050126デフォルトの名無しさん
2007/04/07(土) 00:32:34「グローバル変数の作成順番というものは、存在するのでしょうか?」
(例えば、ポインター変数の方が優先的に作られるとか。)
(下記のプログラムを例とする):
なぜ、このような質問をしたかというと、
もし、グローバル変数の順番が決まってないと、
先にhoge g_obj;が生成された場合、
g_objのコンストラクタ内でまだ作成されていないg_pが使用されることに
なってしまい、危ないと思ったからです。
//グローバルな場所
int *g_p=0;
hoge g_obj;//オブジェクトを作ることで、このクラスのコンストラクタ発動
//hogeクラス
class hoge{
hoge(){//コンストラクタ内
g_p = new int;//g_pを使う
}
};
どうかよろしくお願いします。
0127デフォルトの名無しさん
2007/04/07(土) 00:44:220128デフォルトの名無しさん
2007/04/07(土) 00:54:36初心者にそれはないだろ、取り合えず、おまい、氏ね
0129126
2007/04/07(土) 01:32:14グローバル変数 順番 などで一通り検索して、見つからなかったので
ここで質問させてもらいました。
意地悪言わないで、どうかご教授お願いできないでしょうか?
0130デフォルトの名無しさん
2007/04/07(土) 01:36:31○ご教示
知らない言葉を無理して使わないほうがいい
0131デフォルトの名無しさん
2007/04/07(土) 01:40:49グローバル変数の初期化順序は不定
0132デフォルトの名無しさん
2007/04/07(土) 01:40:51初期化順に依存するコードからは、鼻から悪魔が出る可能性がある。
現実には、「初期化コードを必要としない(POD)データ」は
最初から実行ファイルに含められて(必要なら開始時にコピー)いるし
「初期値が与えられてない変数」は、スタートアップルーチンで0に埋められる。
0133126
2007/04/07(土) 02:16:22勉強になりました^^;
>>131
>>132
グローバル変数 順序 で検索したら、出てきてくれました。
順序が不定ということがはっきりわかりました。
これで安心して眠れます。
ご回答ありがとうございました!
0134デフォルトの名無しさん
2007/04/07(土) 03:38:38static initialization
dynamic initialization
の順に初期化される(らしい)ので依存できたりできなかったりする
0135デフォルトの名無しさん
2007/04/07(土) 08:10:16//char s[50]; いつもはこっちでした。
char* str="hello";
sprintf(s.c_str(),"%s",str);
OutputDebugString(s.c_str());
buiderの環境になりまして、動的な感じで文字列の
長さを扱いたいと思ってます。
上記のようにすると、"hello"が出力されましたが、
こういう使い方しても大丈夫でしょうか?
0136デフォルトの名無しさん
2007/04/07(土) 08:54:19String s が別のものならばなんともいえんけど、
stlのstringだったら、const cahr *c_str() だと思うからコンパイル時にエラーとか警告が出てない?
s = str で十分だろう。
0137デフォルトの名無しさん
2007/04/07(土) 23:03:52Stringって何。typedef std::string String とかやってんの?
だとすると、
sprintf(s.c_str(),"%s",str);
こんなことやっちゃ駄目。
sprintf()には十分なサイズの書き込み可能な領域を指す非constなcharポインタを
渡さなければならない。
sprintf()はもともとC++ではその型安全性の無さによって好ましくないと
言われている(snprintf()ではなくsprintf()を使うなら、バッファ
オーバーフローの問題もある)。
代表的な代案は
1) std::sstreamを使うか、
2) printf-likeにやりたいなら、非標準だがboost::formatなり類似のものを使う
ってとこだ。
0138デフォルトの名無しさん
2007/04/08(日) 00:13:18まあ、c_str()がconstなchar*を返す点は全く同じだが。
0139デフォルトの名無しさん
2007/04/08(日) 00:39:56いっちょフィルターでも作ってみるかとググってみたら、理学博士の方がソース公開してるの見つけました。
やったーと思って目を通してみたんですが...むずい!
即効寝ちゃって今だに鬱の自分。。。氏んだほうがいいですか?
ソース http://open.nime.ac.jp/downloader.php?downloadkey=focusshare_src
0140デフォルトの名無しさん
2007/04/08(日) 04:33:31SirectShowだろうがDirectShowだろうが、やってみて
壁に当たってあきらめようと思ったり、頭ん中真っ白になって
もうわけわからんってなったりしても、やり続ければ実は実る。
Cを勉強しだした頃を思い出せ、ポインタや構造体や再帰やetc
いろいろ壁にぶち当たってきただろ、それでも続けてきたから
今があるんだろうが。
時計の針だぞ、前に進まなきゃ捨てられるんだよ。
でも寝とけ。
俺はC#で苦戦中じゃ。
0141デフォルトの名無しさん
2007/04/08(日) 09:31:16寝たらちょっと復活。気長にやります。アリ。いっぺんに全部理解しようとしてた。神か>>141
C#か。FrameWork 覚えるので苦戦してるのかな。ガンガレ、でも寝とけ。
0142デフォルトの名無しさん
2007/04/08(日) 14:04:10Debugモードだとビルドできるのですが
Releaseモードにするとエラーがでてビルドできません
しかも、そのエラーは自分のソースじゃない部分で起きているんです
未解決の外部シンボル _GUID_PerfMasterTempo が関数 "int __cdecl AdoInit(void)" (?AdoInit@@YAHXZ) で参照されました。
こういう感じのエラーがたくさん出てます
どうすればいいんですか?
0143デフォルトの名無しさん
2007/04/08(日) 15:08:40コンストラクタでnewによりメモリを割り当てて、以降メンバー関数で使いたいのですが
何故か割り当てたはずのメモリが解放?されている模様。
(Access Violationエラーになり、ポインタのアドレスも0xcdcdcdcdに)
こういう使い方って出来ないのでしょうか?
0144デフォルトの名無しさん
2007/04/08(日) 15:13:27再現する最小のソースを晒して味噌。
0145デフォルトの名無しさん
2007/04/08(日) 15:24:39int a;
int b;
} _ST_KIHON;
class Myclass
{
private:
_ST_KIHON *m_stKihon;
public:
Myclass();
~Myclass();
void Set(int, int, int);
};
Myclass::Myclass()
{
_ST_KIHON *m_stKihon = new _ST_KIHON[20000];
memset(m_stKihon, 0, sizeof(_ST_KIHON) * 20000);
}
Myclass::~Myclass()
{
delete []m_stKihon;
}
void Myclass::Set(int a, int b, int n)
{
m_stKihon[n].a = a;
m_stKihon[n].b = b;
}
0146デフォルトの名無しさん
2007/04/08(日) 15:25:18void main()
{
Myclass *cmy = new Myclass;
cmy->Set(1,2,0);
}
再現するソースを載せます。環境はVC6です。cmy->Setでアクセスする際、落ちてしまいます。
0147デフォルトの名無しさん
2007/04/08(日) 15:35:00ローカル変数に突っ込んでどうする。
0148デフォルトの名無しさん
2007/04/08(日) 15:36:000149デフォルトの名無しさん
2007/04/08(日) 15:40:49privateに宣言しているポインタではなくローカルで宣言していることになってるのか?w
0150デフォルトの名無しさん
2007/04/08(日) 15:52:01○m_stKihon = new _ST_KIHON[20000];
0151デフォルトの名無しさん
2007/04/08(日) 16:32:10ありがとう
0152デフォルトの名無しさん
2007/04/08(日) 17:11:28初期化子使えよ
0153デフォルトの名無しさん
2007/04/08(日) 17:28:06どっちでも一緒だよ
0156デフォルトの名無しさん
2007/04/09(月) 02:34:06関数呼び出しのときアドレス呼び出しをすると呼び出し元の
変数の値を呼び出し先の関数内部で書き換えることができるのは理解しています
同じようにポインタ変数を書き換えたいのですが、どうやってアドレス呼び出ししたらいいのでしょうか?
よろしくお願いします。
0157デフォルトの名無しさん
2007/04/09(月) 02:46:10char * foo;
someFunction(& foo);
ということをしたいのなら、
void someFunction(char ** bar);
0158デフォルトの名無しさん
2007/04/09(月) 02:55:170159デフォルトの名無しさん
2007/04/10(火) 03:36:500160デフォルトの名無しさん
2007/04/10(火) 03:54:300161デフォルトの名無しさん
2007/04/10(火) 08:24:08int main (void)
{
unsigned int ch;
ch = 'あ';
printf("%c\n",ch);
return 0;
}
で「あ」が表示されないのですけれど、
どうすれば表示されるのでしょうか?
0162デフォルトの名無しさん
2007/04/10(火) 08:36:56int main (void)
{
char ch[] = "あ";
printf("%s\n",ch);
return 0;
}
0163デフォルトの名無しさん
2007/04/10(火) 08:38:09int main (void)
{
char* ch = "あ";
printf("%c%c\n",ch[0],ch[1]);
return 0;
}
0164デフォルトの名無しさん
2007/04/10(火) 08:39:27int main (void)
{
char* ch = "あ";
printf("%c%c\n",*ch,*(ch+1));
return 0;
}
0165デフォルトの名無しさん
2007/04/10(火) 08:42:29int main (void)
{
int ch = 'あ';
printf("%c%c\n",ch&255,ch>>8);
return 0;
}
0166デフォルトの名無しさん
2007/04/10(火) 08:49:090167デフォルトの名無しさん
2007/04/10(火) 10:35:11if ( c == ESC){ code = JIS}
else if ( isspace(c) || isprint(c)) { }
else if ( c >= 0x80{
if ( code == JIS) return BIN;
lh = HIGH;
}
else { return BIN;}
}
というコードで
else if ( isspace(c) || isprint(c)) { } は
条件式が真の場合何も実行されなくて、
このif ( lh == LOW)のブロックから何も返さず抜けるのでしょうか?
それと
if ( code == JIS) return BIN;
lh = HIGH;
の部分はcodeにJISが代入されていた場合return BINが実行されて、関数が終了するから
lh = HIGH;は実行されないんでしょうか?
0168デフォルトの名無しさん
2007/04/10(火) 12:53:552) はい
0169デフォルトの名無しさん
2007/04/10(火) 12:55:45ホントですか?
まったくあてずっぽうに解釈したのに俺ってセンスいいのかな?
0170デフォルトの名無しさん
2007/04/10(火) 12:57:330171デフォルトの名無しさん
2007/04/10(火) 15:18:430172デフォルトの名無しさん
2007/04/10(火) 15:38:13こんな事言って何も言わないなら最初から何も言わなきゃいいのに。
0173デフォルトの名無しさん
2007/04/10(火) 17:11:080174デフォルトの名無しさん
2007/04/10(火) 17:12:150175デフォルトの名無しさん
2007/04/10(火) 19:07:42親クラス名::メンバと書かなければいけないわけですが、
この親クラス名が長けりゃを何回も書くのが面倒なので#defineマクロつかって短くしちゃう
ってのはありなんでしょうか?
元に戻すとしても、検索置換一発なんであまり悪く無いとは思うんですがどうなんですか?
0176デフォルトの名無しさん
2007/04/10(火) 19:09:28ていうか毎度クラス名タイプしてんの?
普通コピペだと思ってた・・・
0177デフォルトの名無しさん
2007/04/10(火) 19:09:45IDEの支援機能 or コピペでいいじゃん
0178デフォルトの名無しさん
2007/04/10(火) 19:16:40あくまで自分用ならやってみてもいいとは思うけど。
0179デフォルトの名無しさん
2007/04/10(火) 19:19:51慣れの問題以外で何か理由とかあるんでしょうか?
0180デフォルトの名無しさん
2007/04/10(火) 19:36:30長い上に意味が不明瞭で、しかも似たような関数や変数が点在したりすると目も当てられない。
0181デフォルトの名無しさん
2007/04/10(火) 20:31:16せめてマクロよりはtypedefを使え
0182デフォルトの名無しさん
2007/04/10(火) 20:33:07ちょw
0183デフォルトの名無しさん
2007/04/10(火) 21:09:51マジすか!
0184デフォルトの名無しさん
2007/04/11(水) 03:52:550185デフォルトの名無しさん
2007/04/11(水) 05:08:58そのときは関数ポインタを使う必要があって、同じ引数を持つ関数が10個くらいあったから。(しかも長い)
0186デフォルトの名無しさん
2007/04/11(水) 05:14:360187デフォルトの名無しさん
2007/04/11(水) 08:54:00ゆえに.cppは不要
0188デフォルトの名無しさん
2007/04/11(水) 09:25:210189185
2007/04/11(水) 15:11:58今にして思えばラッパ関数でも作ればよかったんだが。
でも、引数が多くなった時に構造体使うのってなんか好きになれない。
あ、複合リテラル使えばいいのか……C99対応してないけど……。
0190デフォルトの名無しさん
2007/04/11(水) 23:52:46これを関数に渡して中身を更新するようにしたいのですが、
引数の指定や渡し方がいまいち分かりません。
誰かアドバイスおねがいします
0191デフォルトの名無しさん
2007/04/11(水) 23:56:130192デフォルトの名無しさん
2007/04/12(木) 00:02:12その配列のアドレスを**namelistに返したいと思っています。
0193デフォルトの名無しさん
2007/04/12(木) 00:13:140194デフォルトの名無しさん
2007/04/12(木) 00:18:31その言葉を使用しました
0195デフォルトの名無しさん
2007/04/12(木) 00:40:17>関数の中でダブルポインタに配列を作成して、
>その配列のアドレスを**namelistに返したいと思っています。
そのまま渡せばいいんじゃないの?
いいから書いた関数をあっぷしてみ。
じゃなければ呼び出し側をあっぷしてみ。
話はそれからだ。
0196デフォルトの名無しさん
2007/04/12(木) 03:27:00main()
{
STAT stat[5];
func(stat);
}
func(STAT *stat[])
{
for(int i=0;i<5;i++)stat[i]->menber1=1;
}
上のように、構造体STATを要素数5の配列で宣言して、
その中身を関数funcで操作したいのですが、エラーがでてしまいます。
(上のままだと「STAT * 型は STAT ** 型に変換できない」という具合でエラーがでます)
これはどこが間違っているのでしょうか・・・よろしければご助言お願いします。
0197デフォルトの名無しさん
2007/04/12(木) 03:55:41STAT型のポインタを保持する配列statの中身はSTAT*だから
STAT stat[i]って宣言だとstat[i]の中身はSTAT型そのものになってしまう
試しにうちの環境で適当にSTAT定義して、STAT* stat[5];って宣言したら通ったから
多分あってると思う!!
0198デフォルトの名無しさん
2007/04/12(木) 04:14:35呼び出し元で STAT stat[5]; と宣言するなら func(STAT *stat)でstat[5]の中身を操作できる。
func(STAT *stat) { for(int i=0;i<5;i++)stat[i].menber1=1; }
ポインタを2重に使わなければいけないのは次のようなケース。
func(STAT **stat) {
int i;
*stat = malloc(sizeof(STAT)*5);
for (i=0; i<5; i++) (*stat)[i].menber1 = 1;
}
main() {
int i;
STAT *stat;
func(&stat);
for (i=0; i<5; i++) printf("%d\n", stat[i].menber1);
}
0199デフォルトの名無しさん
2007/04/12(木) 04:32:05それぞれの方法で試したところ、上手くいきました。
質問の回答だけでなく、細かな補足説明までしていただいて
ありがとうございます。勉強になりました&&キュゥンときました。
0200デフォルトの名無しさん
2007/04/12(木) 04:34:39たとえば stat[5]でSTATのインスタンスごと作ってくれて
stat[5].member[1]でアクセスできるようなの
多重間接参照ってなんかダサいですし
0201デフォルトの名無しさん
2007/04/12(木) 04:58:56配列へのポインタとポインタの配列は別物だからな。
あとSTATの定義を晒さないとコメントできんよ。
0202デフォルトの名無しさん
2007/04/12(木) 05:38:26コンパイラを通りません、どうしてでしょうか?
#include <stdio.h>
#include <stdlib.h>
struct STAT {
int member1;
} ;
func(STAT **stat) {
int i;
*stat = malloc(sizeof(STAT)*5);
for (i=0; i<5; i++) (*stat)[i].menber1 = 1;
return;
}
main() {
int i;
STAT *stat;
func(&stat);
for (i=0; i<5; i++) printf("%d\n", stat[i].menber1);
return;
}
0203デフォルトの名無しさん
2007/04/12(木) 05:58:48もしCでコンパイルしてるならtypedefがいるんじゃね?
typedef struct stat_ { int menber1; } STAT;
0204202
2007/04/12(木) 06:05:58どうやら
> (*stat)[i].menber1
がSTATのメンバであるmember1にならないのが原因のようです
これを他の部分を変えず、かつ直感的な表現に直す方法ってありますかね?
0205デフォルトの名無しさん
2007/04/12(木) 06:17:22単なる誤字だろそれ
member1
menber1
0206202
2007/04/12(木) 06:21:01これで学校行けますありがとうございました!!!
やっぱコピペで済ませるのって慣れてないやばいんですね^^
0207デフォルトの名無しさん
2007/04/12(木) 06:39:48そうか、面接で「ダブルポインタは自信がありますがトリプルポインタはちょっと……」なんて
すっとこどっこいなことを言ってた香具師もその本を読んでたのかも知らんな。
0208デフォルトの名無しさん
2007/04/12(木) 06:44:150209デフォルトの名無しさん
2007/04/12(木) 06:47:35C++でこれをコンパイルしてるのなら警告でまくりだろ
0210デフォルトの名無しさん
2007/04/12(木) 07:16:540211デフォルトの名無しさん
2007/04/12(木) 07:20:070212デフォルトの名無しさん
2007/04/12(木) 07:28:27*一個ならまだ許せるけど、多重はちょっと厳しいじゃん
組み込みとかC++が使えないところってそんなのばかりなの?
0213デフォルトの名無しさん
2007/04/12(木) 07:28:46リンクドリストなんかどうするんだよ。
0214デフォルトの名無しさん
2007/04/12(木) 07:38:21これぐらいなら階層じゃなく、「次」とか「前」とか「先頭」みたいに「ポインタ」の意味で使えるから脳足りんの俺でも理解できる
で、階層構造どうやって表現したらいいの?
0215デフォルトの名無しさん
2007/04/12(木) 07:40:490216デフォルトの名無しさん
2007/04/12(木) 07:53:11"トリプル"ポインタ
ダブルって言う人はアスタリスクの数を数えているのかもしれないが、
ダブルってのは階層を示すものではないと考えるのでオレは受け入れられない
0217デフォルトの名無しさん
2007/04/12(木) 08:10:19のような型になるような構造も普通に出てくるのかなぁ…
0218デフォルトの名無しさん
2007/04/12(木) 08:19:250219デフォルトの名無しさん
2007/04/12(木) 08:36:58**********a = 1;
0220デフォルトの名無しさん
2007/04/12(木) 08:49:170221デフォルトの名無しさん
2007/04/12(木) 13:09:08std::string s = "abcdefg";
でgを削りたい場合は
s = s.substr(0,s.size()-1);とやるしかないのでしょうか?
0222デフォルトの名無しさん
2007/04/12(木) 13:15:05You、末尾に'\0'を書いちゃえYO!
0223デフォルトの名無しさん
2007/04/12(木) 13:19:59std::stringは直接編集してはいけない。
0224デフォルトの名無しさん
2007/04/12(木) 13:41:39resize すれば
0225デフォルトの名無しさん
2007/04/12(木) 13:51:060226デフォルトの名無しさん
2007/04/12(木) 14:00:49ありがとうございます。resizeもeraseも自分が見てるサイトには載ってなかったもので・・・
どちらか使ってやってみます。
0227デフォルトの名無しさん
2007/04/12(木) 17:23:55ポインタを使ってメモリの0から100を読み込んでみようと下のプログラム
書いてみたのですが、実行すると、0x00000000をread出来ないと出て来ます。
どうすれば0x00000000からのデータを読む事が出来ますでしょうか?
--------------ソース--------------
#include <stdio.h>
void main(void){
int *p=0;
int n;
for(n=0;n<=100;n++){
printf("%x", *p);
}
}
0228デフォルトの名無しさん
2007/04/12(木) 17:28:06今のOSでは一般のプログラムが見られる場所はそのプログラムに割り当てられた空間だけです。
大人しくargvの辺りでも覗いてなさい。
0229デフォルトの名無しさん
2007/04/12(木) 17:28:49ヌルポインタはどこも指していないポインタだから読めるわけがない
0230デフォルトの名無しさん
2007/04/12(木) 17:39:33この問題で一番大事なことは上の事実
0231227
2007/04/12(木) 17:45:46でも、diskprobeとかだとMBRが読めたりしますよね?
これって全然違う話なんですかね?mbrをc言語で読み込んでみたいんです…。
というか、OS書くの忘れてました。すみません。
>>229
なるほど。
0232デフォルトの名無しさん
2007/04/12(木) 17:49:230233デフォルトの名無しさん
2007/04/12(木) 17:50:57ディスクの特定の場所を読みたいならディスクのドライバに命令を送って読み出せばいい
0234デフォルトの名無しさん
2007/04/12(木) 17:52:09mbrってハードディスクにある奴じゃないのか?
お前が読もうとしてるのはメモリなんだが
0235デフォルトの名無しさん
2007/04/12(木) 17:59:05ディスクの先頭セクタを読みたいなら、ディスクデバイスを適当に開けば普通に読めます。
#大抵のOSで。
尤も、それ自体もやはり、管理者権限が必要だったりもします。
処で、>231にもOSが書いてありませんねぇ。
0236227
2007/04/12(木) 18:02:26XPは読み込めるんですか?SP2なんですが。
>>233
検索してみます!
>>234
Σ( ̄Д ̄)ガーン
そうですよね…MBRってHDDの先頭セクタなのか!
ってか、メモリの最初には何が読み込まれてるんだろう…。
HDDのデータなんですけど、ポインタでメモリの番地を指定して操作出来るように
HDDもアドレス(セクタ?)で指定して読み込む事は可能なんですか?
それともファイルポインタでファイル名とかを指定する事でしか
読み込めない/書き込めないんですかね?
0237227
2007/04/12(木) 18:07:18お騒がせしております(T-T)
>>235
>処で、>231にもOSが書いてありませんねぇ。
申し訳ありません!!!!!!m(T◇T )m
Windows XP(SP2)です。
0239227
2007/04/12(木) 18:21:00今みてみました。それから検索してたら
ttp://ext2read.sourceforge.net/documentation/inside-hard-disk/
こういうのが出て来たんですけど、msdnの解説同様( ゚д゚)ポカーンな状態なので、
まずは買って来た本を一通り読み終えてから(まだポインタの章なので)
いただいた情報をもとに検索してみたいとおもいます!
>>235さん、質問に答えていただいたみなさん、ありがとうございました!
0240デフォルトの名無しさん
2007/04/12(木) 18:46:38erase は古い環境で名前が違ってたり引数違ってたりすることもあるから、その点は注意な。
0241デフォルトの名無しさん
2007/04/12(木) 20:14:470242でぬるぽ
2007/04/12(木) 22:59:28叩くなりスルーなりお好きに
ttp://denullpo.exblog.jp/5410369/
0243デフォルトの名無しさん
2007/04/12(木) 23:50:22\\
\\\
\ ∧_∧
( ´・ω・)
G と) ガッ >>242
ヽ⌒)、 \人∧__∧
 ̄ (_) >`д´)')
∨つ /
0244デフォルトの名無しさん
2007/04/13(金) 06:51:35普通のクラスを書くときにはヘッダファイルとソースファイルを
別々に作りますが、テンプレートクラスに関しては
同一のファイルに記述しないと外部参照エラーが出てしまいます。
Javaみたいでどうも気持ち悪いんですが、何か解決策はありますか?
template <typename X> X CTest<X>::func(){ ... }
↑これをクラスの宣言の後ろに書けばちゃんと動きますが、
別のソースファイルに書くとダメです。
0245デフォルトの名無しさん
2007/04/13(金) 07:24:150246デフォルトの名無しさん
2007/04/13(金) 08:21:36ttp://www.fides.dti.ne.jp/~oka-t/cpplab-template-3.html
0247デフォルトの名無しさん
2007/04/13(金) 08:54:57テンプレートはあくまでコンパイル時に解釈・生成されるものだというのは
要するにこういうことだったんですね。
ありがとうございました。
0248デフォルトの名無しさん
2007/04/13(金) 09:05:220249デフォルトの名無しさん
2007/04/13(金) 09:09:51Windowsなら
Zeromemory(pDest, sizeof(type)*size);
みたいな感じか、もちろん基本型に限るが
0250デフォルトの名無しさん
2007/04/13(金) 09:12:010251デフォルトの名無しさん
2007/04/13(金) 09:17:14char *hoge=(char *)Dest;
for(int i=0; i<sizeof(type)*size; i++)
hoge[i]=0;
てか、そもそも何をnewで確保するの?
0252デフォルトの名無しさん
2007/04/13(金) 09:31:52memsetでもOKですか?
0253デフォルトの名無しさん
2007/04/13(金) 09:41:120254デフォルトの名無しさん
2007/04/13(金) 12:09:41PODなら初期化してくれるだろ
T* t = new T();
e.g.
int* p = new int(); // *p->0
0255デフォルトの名無しさん
2007/04/13(金) 12:50:450256デフォルトの名無しさん
2007/04/13(金) 14:24:390257デフォルトの名無しさん
2007/04/13(金) 17:49:26普通にstd::vector<int>確保すればデフォルトコンストラクタで初期化されるよ
0258デフォルトの名無しさん
2007/04/13(金) 17:54:44配列でも初期値で初期化なら問題ないでしょ
int* p = new int[10]();
0259デフォルトの名無しさん
2007/04/13(金) 19:25:50Cを使ったソケットプログラミング(ネットワークプログラミング)を学ぶのに
オススメの書籍、又はWEBサイトが御座いましたら、教えていただけますでしょうか。
0260デフォルトの名無しさん
2007/04/13(金) 19:30:180261デフォルトの名無しさん
2007/04/13(金) 19:41:11→ inetd で ウマー
プロトコル周りは RFC (原文&日本語訳) を参照
# 「インターネットRFC辞典」持ってるけど結局 RFC本体を追うしなぁ…
Windows だと ASync 周りが嫌らしいので、
MSDN +
http://pc11.2ch.net/test/read.cgi/tech/1171029896/ のテンプレサイト +
ぐぐる +
MFCのソース眺める +
などなど
0262デフォルトの名無しさん
2007/04/13(金) 20:09:18じゃあ入出力インターフェイスとしてistream/ostream持ってるクラスなら
それをそのままhttpストリームにして出力できるんすか?
0263デフォルトの名無しさん
2007/04/13(金) 20:18:19ソケット ⇔ ファイルハンドル が inetd の仕事だからな。
# クライアント記述だと inetd ダメポかも…
ソケットに流すべきパケットのルール = プロトコル は、
千差万別なので 仕様書 (=RFC) を見るしかない。
で、HTTP ぐらいになると、そのルールが複雑怪奇だから難しいさね。
0264デフォルトの名無しさん
2007/04/13(金) 20:37:44どんな相手でも入出力できるようにできる。
inetdとか使わないで自前でやるときにはね。
0265デフォルトの名無しさん
2007/04/13(金) 23:57:030266デフォルトの名無しさん
2007/04/13(金) 23:59:07百害あって一利なし
0267デフォルトの名無しさん
2007/04/14(土) 00:27:06絶対に投げちゃダメだから.
全然強制力もないし,あんま意味ないけどね
0268デフォルトの名無しさん
2007/04/14(土) 00:28:23とりあえずデストラクタとswapにはつける。
0269デフォルトの名無しさん
2007/04/14(土) 00:47:33やっぱその程度にしか使えないのね
0270デフォルトの名無しさん
2007/04/14(土) 00:48:420271デフォルトの名無しさん
2007/04/14(土) 02:14:510272259
2007/04/14(土) 04:13:08今度立ち読みしてみます。ありがとうございます。
>>261
沢山の回答ありがとうございます。かなり勉強になりそうなので
特にテンプレによく目を通したいと思います。ありがとうございました!
0273デフォルトの名無しさん
2007/04/14(土) 04:54:14C++以外の例外について分かっているなら、いっしょだと思うよ。
0274デフォルトの名無しさん
2007/04/14(土) 07:27:440275デフォルトの名無しさん
2007/04/14(土) 10:27:120276デフォルトの名無しさん
2007/04/14(土) 12:56:37BMPファイルに保存するだけでも、なんかすげー色々やることあって敷居高いのですが、
HDC渡すだけで勝手に画像ファイル作って保存してくれるみたいな
都合のいいライブラリってないもんですか?
0277デフォルトの名無しさん
2007/04/14(土) 13:22:310278デフォルトの名無しさん
2007/04/14(土) 13:39:09レスありがとうございます。GDI+ってプラスって言うくらいだから
さらに高機能でめんどくさくなると思ったのですが、
調べてみたら簡単になってるのですね。
なんか良い書籍ないか探して、GDI+について勉強してみます。
0279デフォルトの名無しさん
2007/04/14(土) 15:34:28危険性って何のこと?
0280オナニストガロア ◆HEfxsk5e3k
2007/04/14(土) 16:17:47今さっきまでnamespaceの存在を知らなくてコンパイルが出来なくて困ってました。
よろしくおねがいしまふ
0281デフォルトの名無しさん
2007/04/14(土) 20:31:30Windows APIを使ったプログラミングを始めようとしたんですが、
ビルドするといきなり、
\source\main.c(1) : fatal error C1083: include ファイルを開けません。'windows': No such file or directory
というエラーが出てしまいます。
プロジェクトは、Win32コンソールアプリケーションでつくったので
問題はないと思うのですが、
何がいけないのでしょうか?
#include <windows.h>
int WINAPI WinMain(HINSTANCE hinst,HINSTANCE hPreInst, LPSTR pCmdLine,int nCmdShow)
{
MessageBox(NULL,"Hello, World","タイトル",MB_OK);
return 0;
}
0282デフォルトの名無しさん
2007/04/14(土) 20:33:430283デフォルトの名無しさん
2007/04/14(土) 20:40:58Platform SDKは、インストールをしています。
PSDK〜.exeってやつですよね?
0284デフォルトの名無しさん
2007/04/14(土) 20:43:20VisualStudio(C++)専用スレへどうぞ。
0285デフォルトの名無しさん
2007/04/14(土) 20:47:09VCにPSDKの場所を設定する必要もある。
0286デフォルトの名無しさん
2007/04/14(土) 22:50:54'a'は一文字、"abcde"は文字列と教わりましたが、では
'abcde'と定義した場合どういう意味になるのでしょうか?
0287デフォルトの名無しさん
2007/04/14(土) 22:58:45コンパイラによって"str"と同じだったり、エラーが出たり
0288デフォルトの名無しさん
2007/04/14(土) 22:58:48出来たか?
4文字までならできる処理系もないではないが…
0289デフォルトの名無しさん
2007/04/14(土) 23:05:20妄想乙。
>>286
シングルコーテーションで囲んだ文字は整数値として扱われるので、
sizeof(int)と同じ文字数までしか書けない筈。
おまけにその値が同解釈されるかは環境依存。
例えば、'abcd'と書いて'a'<<24|'b'<<16|'c'<8|'d'になるか'a'|'b'<<8|'c'<<16|'d'<<24になるかは
同じコンパイラでもバージョンによって違っていたりする。
0290デフォルトの名無しさん
2007/04/14(土) 23:09:42互換性を断ち切ったそう多くない箇所なので要チェック。
0291デフォルトの名無しさん
2007/04/14(土) 23:36:010292デフォルトの名無しさん
2007/04/14(土) 23:46:300293デフォルトの名無しさん
2007/04/14(土) 23:50:11具体的にはどんなの?今でも触れたり使われたりしてる?
>>292が今使ってるとか?
0294デフォルトの名無しさん
2007/04/14(土) 23:51:550295デフォルトの名無しさん
2007/04/15(日) 00:02:44本当!?大丈夫なの!?そんな処理系もうない!?
0296デフォルトの名無しさん
2007/04/15(日) 00:04:110297デフォルトの名無しさん
2007/04/15(日) 00:07:270298デフォルトの名無しさん
2007/04/15(日) 00:09:38visual c++をインストールしたのですが、c言語を使ってprogrammingの学習をしたいのですが
windowsのコマンドプロンプト上でc言語のprogramをするにはどうしたらよろしいのですか?
環境設定等が解らず困ってます。
どうか、ご指導のほどよろしくお願いします。
0299デフォルトの名無しさん
2007/04/15(日) 00:14:22どのくらいのレベル以上からだと 規格に準拠していない処理系まで
考慮しなければならない?
せいぜいintが16ビット系にしかあたったことないなー
NULLが0じゃないのにもあたったことないし運がいいだけかなー
0300デフォルトの名無しさん
2007/04/15(日) 00:19:11> NULLが0じゃない
それはどっちもANSI準拠だろ
0301オナニストガロア ◆HEfxsk5e3k
2007/04/15(日) 00:19:560302デフォルトの名無しさん
2007/04/15(日) 00:23:040303デフォルトの名無しさん
2007/04/15(日) 00:24:15NULL==0なものにしかあたったことがない。
というか、NULL==0という前提なコード書きまくりんぐ。
お前はどうだい?
0304デフォルトの名無しさん
2007/04/15(日) 00:26:220305デフォルトの名無しさん
2007/04/15(日) 00:28:17http://www.kouno.jp/home/c_faq/c5.html
はい、おしまい。
0306デフォルトの名無しさん
2007/04/15(日) 00:42:050307デフォルトの名無しさん
2007/04/15(日) 01:11:484月だな
0308デフォルトの名無しさん
2007/04/15(日) 02:01:400はNULLとしてよいがNULLは0とは限らない と書いてあるンだけど・・・
NULLが0でない処理系が今でも生き残ッているのか聞きたいンだが。
0309デフォルトの名無しさん
2007/04/15(日) 02:04:02ヌルポインタの内部表現が0でない処理系ならごまんとある。
0310デフォルトの名無しさん
2007/04/15(日) 02:12:54#define NULL ((void*)0)
とされてるCの処理系なら今でもあるよ。
0311デフォルトの名無しさん
2007/04/15(日) 02:15:17NULL が 0 でないコンパイラを自分で作ればいいじゃないか
0312デフォルトの名無しさん
2007/04/15(日) 02:25:57具体例機盆ぬ
0313デフォルトの名無しさん
2007/04/15(日) 03:06:51ポインタが現われるべきところに書かれた0は
整数型として解釈されることはないんだけど。
「16進数の0x1Aはおかしい!整数の中に文字定数'A'が入っている!」
って言っているようなもの。
0314デフォルトの名無しさん
2007/04/15(日) 03:07:38流れ読めよ。
0315デフォルトの名無しさん
2007/04/15(日) 03:11:24具体例きぼんぬ
>>314
こうですか?わかりません><
0316デフォルトの名無しさん
2007/04/15(日) 03:35:070317デフォルトの名無しさん
2007/04/15(日) 03:51:35ポインタ様と0を比較するというのは
ポインタ様がぬるぽかどうか比較することと等しいということガッ
言語規定で規定されているので、これはおかしくない
0318デフォルトの名無しさん
2007/04/15(日) 03:53:390319デフォルトの名無しさん
2007/04/15(日) 04:18:49優良パチンコ店 エイトワン
に行こう! 遠隔(※1)を絶対やってないのは「エイトワン」だけ!
違法ロム(※2)を絶対使ってないのも「エイトワン」だけ!
エイトワンでは、遠隔等が可能な設備は入れていません。 ロムも、警察がチェックしやすいようにしています。
詳しい方はご存知の通り、どんなにパチンコの遊戯人口が変動しても、その市場規模は変わりません(※3)。
要するに、客が減っても、残った客から絞り盗る量を増やして調整しているのです。
しかし、何故それが可能なのか?…ご理解頂けると思いますが、9割以上の店が確実に遠隔等を行ってます。
1万店以上の中でも、遠隔も違法ロムも確実にやってないのは「エイトワン」1店だけです!
※1…遠隔とは
「お、あの客は新顔だな。勝たせて味を占めさせるか。遠隔操作で設定変更しよ」
「客が減ってきたな。ま、設定を絞めて(違法)、1人あたりから搾る量を増やせばいいか」
「あのオヤジ負け続けてるからそろそろ辞めるかもな。今日は勝たせてやるか」
※2…違法ロムとは
「うちのアタリ確率は、もちろん他と同じ『○○○分の1』ですよ!(ロムいじってるからウソだけど)」
※3 市場規模 遊戯人口
平成06年 30兆4,780億円 2,930万人
平成08年 30兆0,630億円 2,760万人
平成10年 28兆0,570億円 1,980万人
平成12年 28兆6,970億円 2,020万人
平成14年 29兆2,250億円 2,170万人
平成16年 29兆4,860億円 1,790万人
0320デフォルトの名無しさん
2007/04/15(日) 04:19:590321オナニストガロア ◆HEfxsk5e3k
2007/04/15(日) 08:34:26今林先生の本読んでる
0322デフォルトの名無しさん
2007/04/15(日) 15:23:030323デフォルトの名無しさん
2007/04/15(日) 15:38:400324デフォルトの名無しさん
2007/04/15(日) 16:29:54like "Ess, I'm Dee".
0325デフォルトの名無しさん
2007/04/15(日) 17:28:37どっちかというとEss, I aim Dee.
0326デフォルトの名無しさん
2007/04/15(日) 19:25:13誰も定義の話をしてないだろ
ちゃんと読めよ低脳
0328デフォルトの名無しさん
2007/04/15(日) 21:13:070329デフォルトの名無しさん
2007/04/15(日) 21:29:29↑
このサイトぶっ潰しませんか??
写メとか貼って気持ち悪いです。自分は初心者なんで潰し方がよく
分からないのでみなさんお願いします。
0330デフォルトの名無しさん
2007/04/15(日) 22:14:260331デフォルトの名無しさん
2007/04/15(日) 22:17:12お前を通報しました
0332デフォルトの名無しさん
2007/04/15(日) 22:56:520333デフォルトの名無しさん
2007/04/16(月) 00:56:11typedef struct {
char a;
char b;
} St;
void poo(int x, int y){
St **hoge;
hoge = (St **)malloc(sizeof(St*)*x);
for(int i=0;i<x;i++){
hoge[i] = (St *)malloc(sizeof(St)*y);
}
}
これだと駄目でした。コンパイル通っても中身にアクセスしようとするとふっとびます。
hoge[3][5].a = 'T';
のように使いたいのですが。
0334デフォルトの名無しさん
2007/04/16(月) 01:04:23poo(3, 5); って呼び出してるって落ちでは?
こちらではpoo(4, 6)でちゃんと動く。
0335デフォルトの名無しさん
2007/04/16(月) 01:14:56poo(100,100)等と入れてるのでそういうわけではないみたいです。
他の部分との影響かもしれないのでもう少しいじくってみます。
0336デフォルトの名無しさん
2007/04/16(月) 01:25:55念のためCodeGuardを掛けてみたけど「解放されていません」の
警告以外はエラー出ないねやっぱり。
0337デフォルトの名無しさん
2007/04/16(月) 02:02:54メンバ関数を呼び出すとアクセス違反が発生しましたって
怒られるんですが、何が悪いんでしょうか。
class Circle : public Shape{
public:
Circle(int radius=0)throw();
Circle(const Circle& circle) throw();
virtual void draw() const throw();
virtual ShapePtr clone() const throw(bad_alloc);
virtual ShapePtr createSimilar() const throw(bad_alloc);
protected:
int radius_;
};
ShapePtr Circle::createSimilar() const throw(bad_alloc)
{ return new Circle(); }
ShapePtr Circle::clone() const throw(bad_alloc)
{ return new Circle(*this); }
void userCode(ShapePtr s ) throw(){
cout << "userCode() number1:";
s->draw();
ShapePtr copy = s->clone();
cout << "userCode() number2:";
copy->draw();
ShapePtr similar = s->createSimilar();
cout<< "userCode() number3:";
similar->draw();
}
0338デフォルトの名無しさん
2007/04/16(月) 02:10:10コードが足りない。症状が再現する最小のソースを貼って。
0339デフォルトの名無しさん
2007/04/16(月) 02:22:49#include <new>
#include <memory>
using namespace std;
class Shape;
typedef auto_ptr<Shape> ShapePtr;
class Shape{
public:
Shape() throw();
virtual ~Shape() throw();
virtual void draw() const throw() =0;
virtual ShapePtr clone() const throw(bad_alloc)=0;
virtual ShapePtr createSimilar() const throw(bad_alloc) =0;
protected:
int radius_;
};
Shape::Shape() throw(){}
Shape::~Shape() throw(){}
class Circle : public Shape{
public:
Circle(int radius=0)throw();
Circle(const Circle& circle) throw();
virtual void draw() const throw();
virtual ShapePtr clone() const throw(bad_alloc);
virtual ShapePtr createSimilar() const throw(bad_alloc);
protected:
int radius_;
};
0340デフォルトの名無しさん
2007/04/16(月) 02:23:28:Shape(), radius_(radius){}
Circle::Circle(const Circle& circle)throw()
{ this->radius_ = circle.radius_; }
void Circle::draw() const throw()
{ cout << "Circle: radius=" << radius_ << "\n"; }
ShapePtr Circle::createSimilar() const throw(bad_alloc)
{ return new Circle(); }
ShapePtr Circle::clone() const throw(bad_alloc)
{ return new Circle(*this); }
void userCode(ShapePtr s ) throw(){
cout << "userCode() number1:";
s->draw();
ShapePtr copy = s->clone();
cout << "userCode() number2:";
copy->draw();
ShapePtr similar = s->createSimilar();
cout<< "userCode() number3:";
similar->draw();
}
int _tmain(int argc, _TCHAR* argv[])
{
ShapePtr c(new Circle(42) );
cout << "main() number1:";
c->draw();
userCode(c);
return 0;
}
こんな感じです。
お願いします。
0341デフォルトの名無しさん
2007/04/16(月) 02:28:52{ return auto_ptr<Circle>(new Circle()); }
ShapePtr Circle::clone() const throw(bad_alloc)
{ return auto_ptr<Circle>(new Circle(*this)); }
これでどう?
0342デフォルトの名無しさん
2007/04/16(月) 02:31:57return ShapePtr(new Circle());
}
ShapePtr Circle::clone() const throw(bad_alloc) {
return ShapePtr(new Circle(*this));
}
悪いこっちの方が見やすいね。
0343デフォルトの名無しさん
2007/04/16(月) 02:51:24いけました。ありがとうございます。
なるほど、ちゃんとauto_ptrにして返さないと駄目だったんですね。
0344デフォルトの名無しさん
2007/04/16(月) 02:54:43簡単に言うとそういう事なんだけど、その前にコンパイルエラーに
ならなかった?
_tmain()とあるからVisual C++だと思うんだけど。
0345デフォルトの名無しさん
2007/04/16(月) 02:57:48error_cc1.cpp:46: error: conversion from `Circle*' to non-scalar type `ShapePtr' requested
のようなエラーを返す。
0346デフォルトの名無しさん
2007/04/16(月) 12:19:020347デフォルトの名無しさん
2007/04/16(月) 13:01:37ちょっと、ちょっとちょっとレベルだよな
0348デフォルトの名無しさん
2007/04/16(月) 13:33:13Func(p1,p2,p3,p4)
として呼び出した関数が、呼び出された側では
1: Func(謎の値, p1, p2, p3)
ってなっちゃうケースと、正しく
2: Func(p1,p2,p3,p4)
てなるのにその関数内でp4が破壊される(あたらしく宣言したローカル変数が上書きしてしまう)ケースがある。
デバッガでアセンブラを追ったところ、call Func の直前にpush p1 しているのは確認済み。
(呼び出し側はcdeclなのでp4から順に全てpush。)
callで呼ばれた関数に入った直後に、デバッガのスタックトレースウィンドウ内で上記現象を確認している。
(これってスタックを見てるのかな)
callと、call内部最初のステップとの間に、デバッガでは見えない何らかのバイナリがあるのかな。
もしくはDLLプロセス空間へ切り替わる(この辺じつはよく理解していない)際に、スタックポインタがおかしくなる(上記現象を説明できる仮説が立てられていない)とかそういうことかな。
DLL経由関数呼び出しの、バイナリレベルの挙動についてなにか知ってたら教えてくれ〜
0349デフォルトの名無しさん
2007/04/16(月) 13:48:240350デフォルトの名無しさん
2007/04/16(月) 14:00:010351デフォルトの名無しさん
2007/04/16(月) 14:01:38extern "C" で呼び出すようにし、C++の形式の関数は使わない
ようにするのが原則だけどそんな事は知ってるよね。
0352デフォルトの名無しさん
2007/04/16(月) 14:06:350353デフォルトの名無しさん
2007/04/16(月) 14:07:44C++ って標準は __stdcall だっけか?
0354デフォルトの名無しさん
2007/04/16(月) 14:22:23提供できる。
ただし、extern "C" を使った場合でもCならばC、C++ならC++で
受けないとthisポインタの絡みでずれてくる。
extern "C"は名前マングリングだけに関係する。
0355デフォルトの名無しさん
2007/04/16(月) 14:30:19extern "C"はDLL側では指定してるが、呼び出し側はどこでどうやって指定すればいいのかわからんw
(GetProcAddress で関数ポインタで呼んでいる)
>>351
>>352
その場合、callの前に push this 的なものが入るんじゃないの?
さらに調べていたら、1のケースでも最後のパラメタは破壊されるようだ。
あと、Debugでビルドするとすべて正常に動く。
0356デフォルトの名無しさん
2007/04/16(月) 14:33:35一度__stdcallにしてビルドしなおしてみてよ。
DEFファイルの書き方はわかるよね?これを書けば
extern "C"は不要になるので。
0357348
2007/04/16(月) 14:34:53>Debugでビルドするとすべて正常に動く。
訂正。DLL側をDebugでビルドするとすべて正常に動く。
0358デフォルトの名無しさん
2007/04/16(月) 14:34:56typedef ret_type (__cdecl *pfunc) (arg_types...) PFUNC;
PFUNC pfn;
(FARPROC&)pfn = GetProcAddress();
アドレスを受ける変数に呼び出し規約を埋めるんだ
0360デフォルトの名無しさん
2007/04/16(月) 14:39:35GetProcAddress() だけで完結した呼び出しなら
明示してるんだから extern "C" はイラネ-な。
0361デフォルトの名無しさん
2007/04/16(月) 14:40:12extern "C"はC++の名前マングリングを止めるもの。
メインもDLLも同じ処理系の同じC++で開発するなら必要ない。
(修飾名も同じになるから)
__declspec(ddexport)とか__declspec(dllimport)を使えば
DEFファイルは不要。
0362デフォルトの名無しさん
2007/04/16(月) 14:41:25なぜならWin32APIには名前マングリングが存在しないから。
それと
×ddexport
○dllexport
0363デフォルトの名無しさん
2007/04/16(月) 14:42:42やってくれるので気にする必要はない。
0364デフォルトの名無しさん
2007/04/16(月) 14:51:18構造体を値渡ししてたり とか 可変引数だけど個数間違えたり とかしてない?
0365348
2007/04/16(月) 15:01:02実は呼び出しは結構怪しいことになってて、
union DllVar { //4-byte generic container variable
HWND handle;
DWORD dword; //NULL
LPCSTR string; //String
bool boolean; //Boolean
float number; //Number
};
というのがまずあって、呼び出し側は
typedef LPCSTR (_stdcall *METHOD)(DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar,DllVar);
ってなってるが、受け取り側は必要な数しか受け取らない。
オーストラリア人の技術者が「これでOK」って言ってたので
(_cdeclでは呼び出し側がスタック破棄もするからその点で言っても問題なさそう)
信用してるんだが。
__stdcall 試してみるyo。
0366デフォルトの名無しさん
2007/04/16(月) 15:05:51stdcallは呼び出された側がスタックを破棄するので、
スタックにつまれた引数の数を正確に知らなくてはならない。
可変個引数を取る関数ではstdcallを使えない(指定してもcdeclと同じになる)のもこのため。
だからそういう関数ならcdeclにしておけ。
0367デフォルトの名無しさん
2007/04/16(月) 15:33:28#if sizeof(wchar_t) == 4 も
#if sizeof(L'A') == 4 も
定数式では無いと、コンパイラが受け付けてくれません。
何かいい方法ありませんか?
0368デフォルトの名無しさん
2007/04/16(月) 16:36:22CならWCHAR_MAXの値を見るくらいしかないと思う。
0369デフォルトの名無しさん
2007/04/16(月) 16:43:580370デフォルトの名無しさん
2007/04/16(月) 16:52:010371デフォルトの名無しさん
2007/04/16(月) 17:05:41マルチスレッドで、ソケットプログラミングをしたいのですが、
winsock2.hをインクルードするだけでエラーが出てしまいます。
どうすればよいのでしょうか?
0372デフォルトの名無しさん
2007/04/16(月) 17:08:320373371
2007/04/16(月) 17:11:58すみませんでした。
↓みたいなエラーが57個でます
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock2.h(112) : error C2011: 'fd_set' : 'struct' 型の再定義
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock.h(54) : 'fd_set' の宣言を確認してください。
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock2.h(147) : warning C4005: 'FD_SET' : マクロが再定義されました。
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock.h(88) : 'FD_SET' の前の定義を確認してください
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock2.h(156) : error C2011: 'timeval' : 'struct' 型の再定義
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock.h(97) : 'timeval' の宣言を確認してください。
c:\program files\microsoft visual studio 8\vc\platformsdk\include\winsock2.h(212) : error C2011: 'hostent' : 'struct' 型の再定義
0374デフォルトの名無しさん
2007/04/16(月) 17:19:580376デフォルトの名無しさん
2007/04/16(月) 18:30:52でもよかったとおもた。
Windows.hがwinsock.hもincludeするのが理由とか何とか
0377デフォルトの名無しさん
2007/04/16(月) 18:33:150378デフォルトの名無しさん
2007/04/16(月) 18:38:200379デフォルトの名無しさん
2007/04/16(月) 19:32:450380デフォルトの名無しさん
2007/04/16(月) 20:32:14string str[] = {"aaa", "bbb", "ccc", ""};
を宣言して、
string *tmp = str;
while (*tmp->c_str()) {
printf("%s", tmp->c_str());
tmp++;
}
とやると、一応cccと表示されループを抜けるのですがこれは正しい処理なのでしょうか?
もし間違っているなら正しいやり方を教えてください。御願いします。
0381デフォルトの名無しさん
2007/04/16(月) 20:55:45>>369
>>370
sizeofが使えないのは不便ですよね^^
結局、WCHAR_MAXの値を使うことにしました。
ありがとうございました。
0382デフォルトの名無しさん
2007/04/16(月) 21:04:40for (string *tmp = str; !tmp->empty(): ++tmp) {
printf("%s", tmp->c_str());
}
自分ならこう書く
0383デフォルトの名無しさん
2007/04/16(月) 21:20:140384デフォルトの名無しさん
2007/04/16(月) 21:26:290386デフォルトの名無しさん
2007/04/16(月) 21:46:06std::vector<std::string> str;
str.push_back("aaa");
str.push_back("bbb");
str.push_back("ccc");
for (std::vector<std::string>::const_iterator pos = str.begin(); pos != str.end(); ++pos)
std::cout << pos->c_str() << std::endl;
と書いちゃうな・・・・
0387デフォルトの名無しさん
2007/04/16(月) 21:48:100388デフォルトの名無しさん
2007/04/16(月) 22:08:05tmp->size()では?
つまり論理が逆ではと思います。
0389デフォルトの名無しさん
2007/04/17(火) 00:13:19class Neko {
classA hoge1;
classB hoge2;
}
コンストラクタは hoge1→hoge2、デストラクタはその逆の順番で
呼び出されているように見えますが、
これはC++の規格として保証されていますか?
0390デフォルトの名無しさん
2007/04/17(火) 00:14:580391デフォルトの名無しさん
2007/04/17(火) 00:24:31ありがとうございました。
0392デフォルトの名無しさん
2007/04/17(火) 00:30:01それでいいじゃんと思う俺ホビープログラマー
0393デフォルトの名無しさん
2007/04/17(火) 00:52:090394デフォルトの名無しさん
2007/04/17(火) 00:55:35これ以外の書き込みは嘘だと思え
0395デフォルトの名無しさん
2007/04/17(火) 01:02:180396デフォルトの名無しさん
2007/04/17(火) 01:04:41http://www.kuzbass.ru:8086/docs/isocpp/special.html#class.base.init
の-5-から
>Then, nonstatic data members shall be initialized
>in the order they were declared in the class definition
>(again regardless of the order of the mem-initializers).
非staticデータメンバはクラス定義での宣言順に初期化される。(メンバ初期化リストの順序は関係ない)
0397デフォルトの名無しさん
2007/04/17(火) 01:10:030398デフォルトの名無しさん
2007/04/17(火) 01:16:28保障されている。
staticでないメンバ変数は宣言どおりの順番でコンストラクタが呼び出され――12.6.2
デストラクタはその逆順で呼び出される――12.4.6
0399デフォルトの名無しさん
2007/04/17(火) 01:25:30エディタで宣言の順番を変えてしまうだけで動かなくなる不思議なコードになる。
とはいえ、そういう初期化順序を考慮したい場合もままあるわけで、そんなコードを書くなと主張するわけにも行かず。
せめて、書かないほうが良いと主張するのが精一杯。
>>390みたいに、C++プログラマ全員に、規格書をきっちり読んで置けというのも酷な話。
0400デフォルトの名無しさん
2007/04/17(火) 01:25:42そろそろ、この類の事象を 不定だの未定義だの屁理屈並べずに
エラーにするか動作を定義するか どちらかにすべきだと思うんだ。
0401デフォルトの名無しさん
2007/04/17(火) 01:28:16参照が問題を複雑にしてくれるから、とりあえずエラーにするという選択肢じゃ解決にはならんだろうな。
0402デフォルトの名無しさん
2007/04/17(火) 01:29:03だったらC++なんか使うなよ
0403391
2007/04/17(火) 04:36:55いくつかの値(hoge1とかhoge2とか)のポインタを保持しておいて、
デストラクタでファイルに書き出す、というクラスを
C++をやり始めた頃に作ってずっと使っていたのですが、
このクラスのデストラクタが呼び出されるよりも先に
hoge1やhoge2が破壊されてしまったらまずいじゃん、
ということに最近気付いたんです。
0404デフォルトの名無しさん
2007/04/17(火) 08:26:50親子関係だからセーフだね
親戚同士の順序依存するってーと >>389 での classB のコンストラクタに
classA のポインタとるようなやつとかかな
0405391
2007/04/17(火) 08:42:26(コンストラクタではなくて、初期化ルーチンの中で
ClassB.AddItem()みたいな関数を使うのですが)。
C++はずっと独学でやってきていたので
すごく変な構造だったのではないかと不安だったんですが、
幸いにして(?)私にそこまでのオリジナリティーは
なかったようですね。ちょっと安心です。
0406デフォルトの名無しさん
2007/04/17(火) 08:50:19ネットで検索すると同じ質問があるのですが解決してません
多分ファイル名の日本語がヤバそうなのです
環境はVC8のExpressで、Win32コンソールでCLR未使用
コマンドラインから使うタイプです
あとマルチバイトにしています
海外のソフトとかデスクトップ上のファイルが不可なので、日本語対応とかあるのでしょうか?
0407オナニストガロア ◆HEfxsk5e3k
2007/04/17(火) 09:15:42C++が書けるとどういった利点がありますか?
ちなみに環境はVineLinux gccです
0408デフォルトの名無しさん
2007/04/17(火) 09:24:19正確に言うとコンストラクタは持っているけどC++の中で言うクラスではない。
当たり前の話だけど、利点はどう使うか、何に使うか、何と比べるかによる。
0409デフォルトの名無しさん
2007/04/17(火) 09:33:07・静的型によるいくつかの利点(当然、静的型には欠点もある)
・オーバーロードが可能
・コンパイル時に型に関する大部分のバグを排除できる
とりあえず思いついたのはこのくらい。
0410デフォルトの名無しさん
2007/04/17(火) 09:41:34local.h
0411デフォルトの名無しさん
2007/04/17(火) 12:13:17WIn32は関数名の後ろにAが付いているものはANSI用で
感じはシフトJISとして扱われる。Wがついている物がUNICODE。
0412デフォルトの名無しさん
2007/04/17(火) 15:02:090413348
2007/04/17(火) 15:36:46orz
エラーは別の原因。MFCのデバッグ版をリンクすると正常動作するのに、リリース版だと例外が発生。
うおーデバッグできねえ
0414デフォルトの名無しさん
2007/04/17(火) 15:47:23vに1, 3, 2, 3, 4がこの順番で入っているとします。
STLのremove()は処理後の有効な最後の要素を指すイテレータを返すので、
remove(v.begin(), v.end(), 3)とすると、返るイテレータは4を指していると思います。
だから、
v.erase(remove(v.begin(), v.end(), 3), v.end());
とすると、4から末尾まで消えてしまい、1, 2だけになる気がするのですが
どうしてならないのでしょうか?
0415デフォルトの名無しさん
2007/04/17(火) 15:51:16std::remove()は処理後の削除された無かった最後の要素の
"次の"位置を返す。つまりこの場合はv.end()を指している。
0416デフォルトの名無しさん
2007/04/17(火) 15:53:23つまり、1, 2, 4, 4 となり、二つの4の最後の方を返す。
0417デフォルトの名無しさん
2007/04/17(火) 15:57:34#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
int a[] = {1, 2, 3, 4};
std::vector<int> v(a, a + 4);
std::vector<int>::iterator pos = std::remove(v.begin(), v.end(), 3);
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
v.erase(pos, v.end());
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}
0418デフォルトの名無しさん
2007/04/17(火) 16:08:43>v.erase(remove(v.begin(), v.end(), 3), v.end());
>とすると、4から末尾まで消えてしまい、1, 2だけになる気がするのですが
なになに、3が2つとも消えるって言いたいの?
1 3 2 3 4
0 1 2 3 4
^ ここしか消えないよ
0419418
2007/04/17(火) 16:09:46最後の行の^は3を指している。
0420デフォルトの名無しさん
2007/04/17(火) 16:13:46#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
int main()
{
int a[] = {1, 3, 2, 3, 4};
std::vector<int> v(a, a + sizeof(a) / sizeof(a[0]));
std::vector<int>::iterator pos = std::remove(v.begin(), v.end(), 3);
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
v.erase(pos, v.end());
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}
0421414
2007/04/17(火) 16:34:17removeの返却値は、vの先頭部分に形成された「指定値が取り除かれた配列」の最後の要素を指す
のでは無くて、
「取り除かれた配列」の後に続く部分の最初の要素を指す
1,3,2,3,4の例でいうと、v[2]を指すイテレータではなく、v[3]を指すイテレータが返る
ということでしょうか?
0422デフォルトの名無しさん
2007/04/17(火) 16:41:12そういう事だね。
std::remove()のアルゴリズム自体は要素を削除するというのではなく
削除対象以外の要素を前に詰める働きをする。
そして削除対象の要素の先頭を返すのでそれをerase()にかけてやれば
うまく削除対象が無くなるわけだ。
0423MSDN
2007/04/17(火) 16:43:52if (!(*(first + N) == val))
*X++ = *(first + N);
このステートメントは、範囲 [0, last - first) 内の各 N に対して実行されます。
この関数は、結果として X を返します。
つまり、述語 *(first + N) == val を真とする要素だけをシーケンスから除去し、残りの要素の相対的な順序を変更しません。
さらに、変更されたシーケンスの終端を指す反復子の値を返します。
いくつ条件にマッチしたかに関わらず、end() が返る でおk?
0424414
2007/04/17(火) 16:44:360426デフォルトの名無しさん
2007/04/17(火) 20:28:48std::locale::global(std::locale(""));をmainの頭に書いてもだめか?
0427デフォルトの名無しさん
2007/04/17(火) 20:41:05そうでなくてもSDKのヘッダ見りゃ#define UNICODEで分けてあるし・・・
0429デフォルトの名無しさん
2007/04/17(火) 21:09:17クライアント側で接続ボタンを押すと、サーバに接続して
メッセージを取得してそれを表示するというものを作っています。
[クライアント側]
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3832.txt
[サーバー側]
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3833.txt
↑がソースです。コンパイルはできるのですが、
取得したメッセージが5文字目から文字化けしてしまいます。
どうすればよいのでしょうか?
0430デフォルトの名無しさん
2007/04/17(火) 21:13:16お前の環境じゃsizeof(char*) == 4だからだろ
0431デフォルトの名無しさん
2007/04/17(火) 21:17:32レスありがとうございます。
buf = (char *)malloc(11);
とかにしても、やはり5文字目から文字化けしてしまいます・・・
0432デフォルトの名無しさん
2007/04/17(火) 21:20:37おいおい
bufがcharの固定配列ならありだけど・・・
0433デフォルトの名無しさん
2007/04/17(火) 21:35:49char *buf じゃなくて char buf[1024] にして文字化けが
解消されました。ありがとうございました!
0434デフォルトの名無しさん
2007/04/17(火) 22:08:25それだけの領域を用意するってのはもったいなくないですか?
どうにかできないでしょうか?
0435デフォルトの名無しさん
2007/04/17(火) 22:15:050436デフォルトの名無しさん
2007/04/17(火) 22:39:51まずここがおかしい事に気づくべし。
#define BUFFERMAX 1024
buf = (char *)malloc(sizeof(char) * BUFFERMAX);
固定長文字列がイヤなら、最初に固定長数値型で文字数を取得しとくべし。
0437デフォルトの名無しさん
2007/04/17(火) 22:43:01動的には求まらないから
0438デフォルトの名無しさん
2007/04/17(火) 22:57:280439デフォルトの名無しさん
2007/04/17(火) 23:08:240440デフォルトの名無しさん
2007/04/18(水) 00:12:15とりあえず>>435で納得することにしました。新たに問題が・・・
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3835.txt
サーバー側からメッセージを何回か受信し、受信するたびに改行して表示していきたいのですが、
lstrcatが上手く動作しません。lstrcatというよりもstrcpyの動作をしてるような感じです。
何が原因なのでしょうか?
0441デフォルトの名無しさん
2007/04/18(水) 00:22:01受信データがヌルターミネートされてないオチとみた。
0442デフォルトの名無しさん
2007/04/18(水) 00:49:410443デフォルトの名無しさん
2007/04/18(水) 01:00:100444デフォルトの名無しさん
2007/04/18(水) 01:01:17GetWindowText(h1 , (PSTR)logtxt , 32768);
lstrcat((PSTR)logtxt, "\r\n");
lstrcat((PSTR)logtxt, (PSTR)intxt);
SetWindowText(h1 , (PSTR)logtxt);
とりあえず、エディットのウィンドウを2つ作って、↑のような形でlstrcatをやってみたら、
目的の表示を得ることができました。受信データがヌルターミネートされてない事が原因なら
どうすれば解決するのでしょうか?
0445デフォルトの名無しさん
2007/04/18(水) 01:57:09頭悪いプログラムと、効率化をほどこしたプログラムでは、
計算処理の実行時間が、どれほど違ってくるものか調べてみたいのですが、
その実行時間を調べるには、どうしたら良いのかがわかりません。
環境はLinuxでgccコンパイラを使ってます。 教えてください。
0446デフォルトの名無しさん
2007/04/18(水) 02:00:52プロファイラを使うのが一番。
gcc関連でプロファイラツールがなんかあったと思うからそれ探してみ。
0447デフォルトの名無しさん
2007/04/18(水) 02:03:55ヌルターミネートすればいい
0448デフォルトの名無しさん
2007/04/18(水) 04:17:19int t1 = タイム
・・・
int t2 = タイム
時間 = t2 - t1
ってやってる
1行ソース変えて性能うpしたかどうか程度ならベンピ
0449デフォルトの名無しさん
2007/04/18(水) 06:54:40つ[rdtsc]
>>448
time()使うなら、difftime()を使うべきかと。
#ま、どうでもいいといえばどうでもいいけど。
0450ほんとの初心者
2007/04/18(水) 11:44:164バイト長の64k個のデータの配列を示すvoidポインタがあって、
そのデータを64k個のfloat型のデータとして読み込みたいだけ
なんですが、どうしてもうまくいきません。
#include "stdio.h"
void *buffer;//(ここに4バイト長のデータが64k個ある)
float val[0x10000];//64k個のfloat型の配列を用意した。
//val配列で、bufferの指し示すアドレスから始まる64k個のデータを受け取りたい。
for (i = 0 ; i < n ; i++)
{
val[i]= * (float*)(buffer + i);
}
どう直せばいいのでしょうか。すんませんが教えてください。
よろしくお願いします。
0451デフォルトの名無しさん
2007/04/18(水) 11:53:410452デフォルトの名無しさん
2007/04/18(水) 12:01:10あんたなんかむしむし
0453デフォルトの名無しさん
2007/04/18(水) 13:09:170454ほんとの初心者
2007/04/18(水) 13:47:22ああ、そうやって書けばいいんですか。ありがとうございました。
本見てもググッても、voidポインタが配列を指し示している例がなかなか
見つからずに困っていました有難う。
0455デフォルトの名無しさん
2007/04/18(水) 14:59:47float *buffer = (float*)void_buffer;
とかやると思うけどけどね
0456デフォルトの名無しさん
2007/04/18(水) 14:59:54別に void ポインタが配列を指していない例からでも
このくらいは分かることだろう。
ここで、なぜそれでうまくいくのか、を深く考えておかないと、
後々また困ることになると思われる。
0457デフォルトの名無しさん
2007/04/18(水) 17:39:33C#やJAVAみたいに言語レベルで存在しないので、何がよいか捜してます。
0458デフォルトの名無しさん
2007/04/18(水) 17:41:460459ほんとの初心者
2007/04/18(水) 18:22:59追加のアドバイス感謝します。本には配列が初めのアドレスを指すポインタ
だからポインタに配列名を代入してやれば良いとか、いろいろ書いてあって
書いてある事は読めばわかるのですが、まだなかなか応用は利きません。
今回のアドバイスでまた一つ勉強になりました。
0460デフォルトの名無しさん
2007/04/18(水) 18:34:28この2つの変数 a, b の値を一時変数を使わずに相互に
入れ替えるテクニックがあったとおもったけど
どんなんだったっけ?
0461デフォルトの名無しさん
2007/04/18(水) 18:35:450462デフォルトの名無しさん
2007/04/18(水) 18:42:43#define SWAP(a, b) (a += b, b = a - b, a -= b)
でど?
0463デフォルトの名無しさん
2007/04/18(水) 18:45:13JIS X 3010 : 2003 が ISO/IEC 9899 : 1999 に相当する。
JISC のウェブサイトから入手できるはず。
0464デフォルトの名無しさん
2007/04/18(水) 18:47:21a ^= b, b ^= a, a ^= b;
0465デフォルトの名無しさん
2007/04/18(水) 18:47:37ttp://www.dd.iij4u.or.jp/~okuyamak/Information/xor_fixed_swapping.html
0466デフォルトの名無しさん
2007/04/18(水) 18:48:25http://www.jisc.go.jp/
JIS検索→規格番号 X3010
0468デフォルトの名無しさん
2007/04/18(水) 20:45:400470デフォルトの名無しさん
2007/04/18(水) 21:48:31どしたらいいですか?
0471デフォルトの名無しさん
2007/04/18(水) 21:53:27確かにC/C++でswapすることはあまり意味が無い。
だが、8bit程度の超小型マイコンではまだ現役だね。
0472デフォルトの名無しさん
2007/04/18(水) 22:35:06派生クラスで新たに作ったメソッドが基底クラスのプライベート属性にアクセス
できないのがどうも納得いかないというか。
派生クラスに何も書かなければ基底クラスと同じコードを書いたと見なされ、
違う機能だけ書き足せば良い、というのが継承だと解釈していたんですけど、
その解釈でいくとアクセスできる筈な気がして仕方がないです。
引数付きコンストラクタがそのままでは継承されないのもイマイチ意図が
わかりません。
何か根本的な継承の精神を誤解しているんでしょうか?
0473デフォルトの名無しさん
2007/04/18(水) 22:41:20じゃ、おまいが新しい完璧な言語を作ればいい
0474デフォルトの名無しさん
2007/04/18(水) 22:44:24そのためのpretectedだ。
protectedなメンバ変数はどの派生クラスでも書き換えられるのだが、
逆に言えばどこから書き換えられているのか把握しづらくなるということで、
実際のところグローバル変数と同様に推奨されていない。
(やるならせめてprotectedなアクセサ書けということだ)
0475デフォルトの名無しさん
2007/04/18(水) 22:45:48何言ってんだお前?
0477デフォルトの名無しさん
2007/04/18(水) 23:12:14#define private public
ですよ
0478デフォルトの名無しさん
2007/04/18(水) 23:14:30有難うございます
う〜ん、わかったようなわからないような…継承の設計意図
派生クラスで新たに作ったメソッドが基底クラスの属性の値を
書き換えはしなくても取得したくなることは良く出てきそうな気がして…
(実際にC++でまともに組んだことはまだ無いですが)
0479デフォルトの名無しさん
2007/04/18(水) 23:22:56デザパタを意識した設計になると自然と出てくる。
abstractや空実装であることも多く、実装クラスに特性を与えるためによく使われる。
でも既存アプリのカスタマ屋さんあたりだと
バグがあったときに直しやすいからprivate禁止だ
という方針を立てる人もいる。
ケースバイケースってことでこれもアリかなと思う。
0480デフォルトの名無しさん
2007/04/18(水) 23:50:54よくクラスの継承を動物とか哺乳類とか犬に例えたりするけど、
どんな哺乳類だって動物の基本的な性質は変更できないわけで。
0481デフォルトの名無しさん
2007/04/19(木) 00:13:02このプログラムをコンパイルするとこんなエラーがでてくるのですが↓
program.cpp: In function ‘int convert_vector_space(Vector, int, int, unsigned char*)’:
program.cpp:90: error: invalid types ‘unsigned char[int]’ for array subscript
program.cpp: In function ‘int convert_image_space(Vector, unsigned char*)’:
program.cpp:101: error: invalid types ‘unsigned char[int]’ for array subscript
どう修正すればいいでしょうか
コンパイラはGCC 4.1、OSはLinuxです
0482デフォルトの名無しさん
2007/04/19(木) 00:23:14pimage[y][x]と書こうとしても、pimageが只のunsigned charへのポインタなのでできない。
幅も関数に渡して、pimage[y * width + x]とすればいい。
0483デフォルトの名無しさん
2007/04/19(木) 00:24:190484デフォルトの名無しさん
2007/04/19(木) 00:36:19そういうことなんですか
ありがとうございます
0485デフォルトの名無しさん
2007/04/19(木) 01:12:35COMオブジェクトを作成して使いたいんだが、方法が全くわからん。
DLLはregsvr32済みだとして、文字列かGUIDでインスタンスを生成したい。
参考サイトでもいいので教えてエロい人><
0486481
2007/04/19(木) 08:08:39直して途中にベクトルの成分を出力するルーチンを追加しました。
コンパイルの通るものができたのですが、
Width:256 Height:256
0 0 ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
0 0 ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
(以下省略)
と言う風に結果が反映されないようです。
Width:256 Height:256
0 0 252 47 19 86 35 109 33 48 100 67 65 62 81 56 51 10
4 0 250 43 11 80 31 101 31 41 105 65 68 59 88 67 41 8
(以下省略)
こんな感じの結果を出したいのですが、どう修正すればよいのでしょうか?
0487デフォルトの名無しさん
2007/04/19(木) 08:13:02< fprintf(fp,"%d ",vect[i].data[j]);
違ったら済まん。
0488481
2007/04/19(木) 08:21:24サンクスです。
Width:256 Height:256
0 0 ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
0 0 ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@ ^@
(以下省略)
の中身は
Width:256 Height:256
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
(以下同様につき省略)
でした。
何がいけないんだろう・・・う〜ん
0489デフォルトの名無しさん
2007/04/19(木) 08:52:52今のまんまだとvector[0...4095]をコピーして渡しちゃう。ポインタを渡さないと値を変更できない。
# で、あってる?
int convert_vector_space(Vector *vect,int offx,int offy,unsigned char *pimage);
/* 画像データをベクトル化する */
for(j=0; j<block_y; j++){
for(i=0; i<block_x; i++){
chk = convert_vector_space(&(vector[j*block_y+i]),4*i,4*j, image);
}
}
/* 4*4の画素ごとにブロック分割し、データを列ベクトル化する */
int convert_vector_space(Vector *vect,int offx,int offy,unsigned char *pimage){
int i,j;
vect->x_start = offx;
vect->y_start = offy;
for(j=0; j<4; j++){
for(i=0; i<4; i++){
vect->data[4*j+i] = pimage[(offy+j)*XLENG+(offx+i)];
}
}
return 0;
}
0490デフォルトの名無しさん
2007/04/19(木) 10:48:28C/C++と関係ないのでスレ違い
0491デフォルトの名無しさん
2007/04/19(木) 12:51:15スレ違いじゃねぇだろ
単純にCOMサーバ使うコーディングが分からないんだろ
>>485
#import でググれ
0492デフォルトの名無しさん
2007/04/19(木) 21:25:54#importだとGoogleは#を無視してくれるので悲惨なことになる。
0493デフォルトの名無しさん
2007/04/20(金) 14:44:09ウィンドウのメッセージループ中でクラスを使用したい。
ボタンクリックでクラスのメンバー変数の値を変化させ、画面を閉じる際にそのメンバー変数の値により
処理を振り分ける。
こんな感じの処理を行いたいのですが、普通にクラスを定義すると頻繁にコンストラクタ処理が呼ばれ
負荷が大変なことになりそう・・・。
どういうふうに書けばいいのでしょうか?
アドバイスお願いします。
0494デフォルトの名無しさん
2007/04/20(金) 14:48:02頻繁に呼ばれるって
ループ中で宣言しなけりゃいいだけだろ・・・
0495デフォルトの名無しさん
2007/04/20(金) 14:57:38メッセージ処理部分でAのメソッドを呼ばせるようにして
そいつから処理させればいいんじゃないの?
0496デフォルトの名無しさん
2007/04/20(金) 20:14:08まずはWindowsアプリがどんな構造を持っているか、そもそもクラスとは何なのか理解するべき。
MFCを使わずに開発しているとしても話は全く変わらないから、
とりあえずメインウィンドウをクラスとして書き出してみ。
0497デフォルトの名無しさん
2007/04/21(土) 00:57:44com import イベント でぐぐったら悲惨な目に会った経験があるぞw
0498デフォルトの名無しさん
2007/04/21(土) 11:48:44下のコードを考えました。
char s[NUM];
fgets(s, sizeof(s), stdin);
s[strlen(s) - 1] = '\0';
printf("strint1 =%s\n", s);
fgets(s, sizeof(s), stdin);
s[strlen(s) - 1] = '\0';
printf("strint2 =%s\n", s);
入力文字数がNUMを下回っていれば想定どおりの結果になるのですが、オーバーフローす
ると残りの分がストリームに残り、それが2回目のfgets()に渡ってしまいます。このよ
うな場合、一端ストリームをクリアするのが定石でしょうか?あるいは他に良く使われ
る方法があるのでしょうか?
0499デフォルトの名無しさん
2007/04/21(土) 12:12:51NUMが1024なら、1500文字打ったとき?
while( fgets(s, sizeof(s), stdin) )
{
・・・・
}
こんなかな?
超えたら2回動く
テキストファイル読むときは、↑みたいな感じで書いた
0500デフォルトの名無しさん
2007/04/21(土) 14:21:02沖縄県での選挙ですが、どうか民主党だけは避けてください。県民の生命に関わる可能性があります。
民主党の最大の公約は一国二制度(※)ですが、一度「一国二制度 沖縄 三千万」で検索をお願いします。
この際、民主党のHPで調べても良いです。以下の注釈↓と矛盾することは書いてないはずですから…
※一国二制度
簡単に言えば沖縄を中国と日本の共有物にし、そこに3000万人の中国人を入植させます。
(つまり沖縄人口の 96% を中国人にして、実質、沖縄を中国人の居住地とします。)
さらに「自主」の名の下、沖縄で有事が起きても自衛隊は干渉できません。
3000万人の中国人が、少数派となった130万人の日本人に何をしても、です。
そして反日教育を受けた中国人の反日感情の強さは、ほとんどの日本人の理解を超えるものです。
今回の選挙で民主党が勝った場合、「自主」「発展」を連呼しつつ段階的に進めていくことになります。
自主と言っても、自主を認めるのが「住人の96%が中国人となった」後だということに気をつけてください。
発展と言っても、新沖縄の少数派となった「少数民族日本人」の発展ではないことに気をつけてください。
0501やっぱ名無しにすべきですか?
2007/04/21(土) 14:23:340502デフォルトの名無しさん
2007/04/21(土) 14:27:33fgets()の代わりにこんなラッパーでも使えば?
>>498のように、行にN文字以上入力された場合
残りを切り捨てたいというケースにしか使えないが。
char *xfgets(char *s, size_t n, FILE *f)
{
char *p;
int c;
if (!fgets(s, n, f))
return 0;
if ((p = strchr(s, '\n')))
*p = 0;
else
while ((c = getchar()) != EOF && c != '\n')
;
return s;
}
0503デフォルトの名無しさん
2007/04/21(土) 14:36:34うっかりゼロクリアしてることに気づかないとか悲しいことが未だにある。
構造体はデフォルトがパブリックなクラスであるって考えはヤバイ。
0504デフォルトの名無しさん
2007/04/21(土) 14:44:51環境が分からんのでなんとも
0505デフォルトの名無しさん
2007/04/21(土) 14:50:56インラインアセンブリ言語での記述であることを示す。
0506498
2007/04/21(土) 16:28:22回答ありがとうございます
>>502
なるほど!理解できました。こんなのを短時間に考え付くのは流石ですね。
たったこれだけの要求にこの泥臭さはいかにもCだなぁ。これは課題の中
から疑問点を抽出して質問したのですが、実際の現場でのこのような要求
はほとんどないということでしょうか?
あと、関数の型がポインタなら、"return 0"ではなく"return NULL"の方が
自然だと思ったのですが、この書き方でもいいのでしょうか?
0507デフォルトの名無しさん
2007/04/21(土) 16:54:03>構造体にクラスを入れられるのは規制して欲しいな。
structのメンバとしてclass変数を指定することを言っている?
そんなのstructを使わなきゃいいじゃん。
structが残っているのはC/C++のコード流用性のためだけにあるものだと思うけど。
classの中にstructメンバが入るのはあり得るとして新規にstructを定義して
classメンバを入らなきゃならない状況ってあるか?
CのコードをC++として流用する場合ならpublicになってなきゃつじつまが合わなくなると思ぞ。
0508デフォルトの名無しさん
2007/04/21(土) 16:55:50他の人が作った struct を使う場合の話じゃね
0509デフォルトの名無しさん
2007/04/21(土) 16:56:03ポインタが必要な場面に現れた0は、ヌルポインタとして扱われる。
0510502
2007/04/21(土) 17:07:17- while ((c = getchar()) != EOF && c != '\n')
+ while ((c = getc(f)) != EOF && c != '\n')
0511デフォルトの名無しさん
2007/04/21(土) 17:12:28std::stringとかメンバにする人もちらほらいるかと。
0512498
2007/04/21(土) 17:38:07それは理解していますが、可読性という意味ではNULLの方が上かな、
と思いまして。というのも、私が一瞬理解できなかったからです。
未熟と言われればそれまでですが。
>>502
そうか… fがstdinとは限らないからですね。
0513デフォルトの名無しさん
2007/04/21(土) 18:44:18レガシーC使いでもちゃんと勉強している人は構造体をmemset()する愚は理解しているものだが。
実際漏れの勤める会社でも構造体をmemset()する癖のある香具師がど填まりしていたよ。
#std::stringじゃなくてCStringってところがあれだけど。
で、当人曰く、「memset()できないなら危なくて使えないな」という間抜けっぷり。
0514デフォルトの名無しさん
2007/04/21(土) 19:01:39コンパイラによっては警告が出て鬱陶しいんだよな。
0515デフォルトの名無しさん
2007/04/21(土) 19:10:200516デフォルトの名無しさん
2007/04/21(土) 19:13:05なんでダメなんだっけ?
0517デフォルトの名無しさん
2007/04/21(土) 19:23:14多分、内部でSysAllocStringを呼んでるのでわ?
CStringを0でセットすると取得した領域がゾンビになるのでわ?
0518デフォルトの名無しさん
2007/04/21(土) 19:28:06すまん。構造体の方。
いっつもゼロ埋めしてるんだけど、これがまずいなら
オレは今から全裸でコンビニに行かねばならん。
0519デフォルトの名無しさん
2007/04/21(土) 19:31:52する理由は?
百害あって一利なしなのだが。
#これから食事なので、百害の詳細については後程。
0520デフォルトの名無しさん
2007/04/21(土) 19:43:220521518
2007/04/21(土) 19:44:43自分で構造体を使うとき、誕生時に全ての要素がゼロであるような
使い方というか設計をしてるから。
他人のライブラリのときは、どうでもいいけど保険でゼロ梅してる。
とりあえず、もう服は全部畳んだ。
0522デフォルトの名無しさん
2007/04/21(土) 19:51:47ZeroMemory だけど
0523デフォルトの名無しさん
2007/04/21(土) 20:03:31struct Foo foo = { 0 };
で済ますほうが簡潔な上に、ポインタや浮動小数点数等もよろしくやってくれるな。
まーPODを単にビット的にゼロフィルすれば良いと分かっているケースでは
memset()/bzero()/ZeroMemory()の類でもいいんでないの。
0524デフォルトの名無しさん
2007/04/21(土) 20:03:45非PODでは、仮想関数テーブルなどソースコード上にないメンバが存在する可能性がある。
また、浮動小数点数の0やヌルポインタがビットパターン0の並びであることは保障されていないので、
PODでもmemsetでの0クリアはするな(初期化子でならOK)といわれる所以。
0525518
2007/04/21(土) 20:06:10>浮動小数点数の0やヌルポインタがビットパターン0の並びであることは保障されていない
あ、そうだった! なるほど・・・うかつであった。
以後気をつけます。
ではこのままコンビニに行ってきます。
0526デフォルトの名無しさん
2007/04/21(土) 20:35:57つーかWinにおけるMS定義の構造体はMS自身がサンプルコードやらでZeroMemoryしてるしなぁ
まぁ、他環境への移植性を考慮するなら安易なmemsetはヤメテオケってことかと
0527デフォルトの名無しさん
2007/04/21(土) 21:04:08構造体の部分だけ移植性気にしてもしゃーないわな。
0528デフォルトの名無しさん
2007/04/21(土) 21:04:42それをわざわざ無にしてバグの発見を遅らせることになりかねないね。
0529デフォルトの名無しさん
2007/04/21(土) 21:09:14VisualStudioの動作する環境で0クリが問題になるのか?
vtbl壊してたらどっちみち動かないだろ?ん?
0530デフォルトの名無しさん
2007/04/21(土) 21:38:13いまさら環境依存とかいっても、実際ヌルポインタが0じゃない環境って
冷静に考えたらまず無いよね。浮動小数点も。
ま、そーゆーアーキテクチャが現存してるなら、それに携わるときだけ
気をつければいっか。
0531デフォルトの名無しさん
2007/04/21(土) 21:42:59こっちゃ蒸し暑いぜ
0532デフォルトの名無しさん
2007/04/21(土) 22:45:07>>528
意味分からない。
0533デフォルトの名無しさん
2007/04/21(土) 22:47:00必要な値として 0 を入れてるんだろ?
0534デフォルトの名無しさん
2007/04/21(土) 22:59:21それが本来あるべき姿なのだが、
現実には>>513のようにとりあえず常に0クリアするという奴が後を絶たない。
0535デフォルトの名無しさん
2007/04/21(土) 23:21:470536デフォルトの名無しさん
2007/04/21(土) 23:36:040537デフォルトの名無しさん
2007/04/21(土) 23:50:550538デフォルトの名無しさん
2007/04/21(土) 23:51:410539デフォルトの名無しさん
2007/04/21(土) 23:54:36でRAII来たこれ
0540デフォルトの名無しさん
2007/04/22(日) 00:08:350541デフォルトの名無しさん
2007/04/22(日) 00:09:220542デフォルトの名無しさん
2007/04/22(日) 01:28:440543542
2007/04/22(日) 01:30:250544デフォルトの名無しさん
2007/04/22(日) 01:50:42そこまでするならクラスにしろよ、ってな話だな。
0545デフォルトの名無しさん
2007/04/22(日) 03:59:03どうすれば実現できるでしょうか
0546デフォルトの名無しさん
2007/04/22(日) 04:00:27IShockwaveFlash
0547デフォルトの名無しさん
2007/04/22(日) 04:07:220548デフォルトの名無しさん
2007/04/22(日) 04:31:42つか、構造体は関数のない方がいいでしょ
使うときは通信とかの場合だし
32バイト単位とかで切ったりするんでしょ
>>542
C++じゃなく、C言語かね、理系?
30年前の凄い有名な本あるけど、・・・古い
Cアルゴリズム大百科、みたいなのがオススメ
中に、クイックソート、挿入ソート・・・、ニュートン法、ガウス・・・
とか載ってるヤツ
0549デフォルトの名無しさん
2007/04/22(日) 09:33:28MSがそういう使い方を推奨している以上そう使うのがどおり。
基本的にライブラリの実装者のやり方に合わせる。
それ以外ではいろいろ問題ありだから使わないけどね。
0550デフォルトの名無しさん
2007/04/22(日) 09:43:09「通り」(どおり)
0551デフォルトの名無しさん
2007/04/22(日) 11:14:290552デフォルトの名無しさん
2007/04/22(日) 11:33:550553デフォルトの名無しさん
2007/04/22(日) 11:46:24HOGE hoge = {0};がデフォ
0554デフォルトの名無しさん
2007/04/22(日) 11:54:00メーン、memはmenじゃないぜ〜
0555デフォルトの名無しさん
2007/04/22(日) 12:11:11C言語コーダが
Hoge h = { 0 };
可能かどうかは自分で判断できるし、
作った時点では問題ないよな。
人様が作った構造体や、自作の構造体でもバカの一つ覚えで
memsetしちゃうのは問題アリじゃね。WinAPIで指定してる場合はともかく。
>>513 が言うように、個別の初期化は多少の手間は増えるけど
安全だし、それでいいと思うけどなあ。
#C++だって、わざわざ初期化リストを設けてるし(C++ならstructでも使えるよ)
0556デフォルトの名無しさん
2007/04/22(日) 12:13:03気になって気になって今日は良く寝れそうだ。
0557デフォルトの名無しさん
2007/04/22(日) 12:57:38常識的に考えて・・・
0558デフォルトの名無しさん
2007/04/22(日) 13:02:20いや、setmen は男を何かにセットする関数だろ
常識的に考えて・・・
0559デフォルトの名無しさん
2007/04/22(日) 13:10:18エロいな
0560デフォルトの名無しさん
2007/04/22(日) 13:10:38そうしてたけど、最近の VC++ は警告出すから困る。
#pragma で抑制できるけど。
>>552
strcpy, strcat, strchr とか文字列に関するものは str が接頭辞になってる。
同じく、memset, memcpy, memmove とかメモリに関するものは mem が接頭辞になってる。
悩む必要性は無い。
0561デフォルトの名無しさん
2007/04/22(日) 13:35:110562デフォルトの名無しさん
2007/04/22(日) 13:44:510563デフォルトの名無しさん
2007/04/22(日) 13:49:12アップキャスト(ポインタ・参照渡し)・スライシング(値渡し)が起こるだけで、
言語規格上問題ないだろ。
向こうでオブジェクトが作成され、自分はそれへのポインタを受け取るという場合に
派生クラスへのポインタで受けたら、言語規格上未定義にはなるだろうけどさ。
0565デフォルトの名無しさん
2007/04/22(日) 16:13:33VC++ の CRect は RECT を継承したクラスなんだぜ。
でも、レガシーAPIに渡せるだろ?
仮想関数がないからな。
0566デフォルトの名無しさん
2007/04/22(日) 16:25:18仮装関数は関係ないだろ
0567デフォルトの名無しさん
2007/04/22(日) 16:25:32ちゃうちゃう。
CRectはRECTを継承してない。内部の最初に保持してるだけ。
is-aじゃなくてhas-aの関係
同様の方法でWinAPI32に引き渡せるMFCクラスあるでよ。
0568デフォルトの名無しさん
2007/04/22(日) 16:27:37CRectはRECTを継承しているよ
0570デフォルトの名無しさん
2007/04/22(日) 17:34:42変換演算子あるんだから使えよカスwwwwww
0571デフォルトの名無しさん
2007/04/22(日) 18:06:240572デフォルトの名無しさん
2007/04/22(日) 18:06:58ああ、そうだ。関係なかった。すまん。
0573デフォルトの名無しさん
2007/04/22(日) 18:24:121.気にせずmemset
2.最近のmallocはゼロクリア保障なのでそれを信じる
3.地味に全部真面目に設定
0574デフォルトの名無しさん
2007/04/22(日) 18:32:22Cなんだよな。
1.自作の構造体で間違いないのならおk
2.保証されてるかどうかちゃんとCユーザーズマニュアルを見れ
3.一番安全
0575デフォルトの名無しさん
2007/04/22(日) 18:32:320576デフォルトの名無しさん
2007/04/22(日) 18:32:57大嘘を付くな
0577デフォルトの名無しさん
2007/04/22(日) 18:41:35え、いや、ウソじゃないです。ごめんなさい。うそじゃないです。
0578デフォルトの名無しさん
2007/04/22(日) 18:55:40>最近のmallocはゼロクリア保障なのでそれを信じる
ってホントなの?どういう環境での話?
main() {
for(;;) {
struct { int i; } *s = malloc(sizeof *s);
assert(s->i == 0);
}
}
すぐに死ぬけど
0579デフォルトの名無しさん
2007/04/22(日) 19:05:370580デフォルトの名無しさん
2007/04/22(日) 20:38:22#include <stdio.h>
struct TEST1 { int x; int y; };
struct TEST2 { int x; int y; void setXY(int x, int y) { this->x = x; this->y = y; }};
struct TEST3 { int x; int y; virtual void setXY(int x, int y) { this->x = x; this->y = y; }};
int main() { printf("%d %d %d\n", sizeof(TEST1), sizeof(TEST2), sizeof(TEST3)); return 0; }
結果
8 8 12
0581デフォルトの名無しさん
2007/04/22(日) 21:05:10だから?
0582デフォルトの名無しさん
2007/04/22(日) 21:30:50でも、こういうことは問題ないはず。
void proc(TEST1*);
void f()
{
TEST3 t;
proc(&t);
}
0583デフォルトの名無しさん
2007/04/22(日) 21:33:39#include <math.h>
int main(void)
{
double hoge = 9.0;
printf("%f\n", sqrt(hoge));
return 0;
}
WinのVisualStudioだと何事もなく、普通にコンパイルできるのですが
Linuxのgccコンパイラだと警告がでて、コンパイル出来ません。
エラーメッセージは↓
$gcc -Wall -o test test.c
/tmp/ccppfSqM.o : ln function 'main':
test.c:(.text+0x35): undefined reference to 'sqrt'
collect2: ldはステータス 1 で終了しました
誰か理由がわかる方、いらっしゃいますでしょうか?
0584デフォルトの名無しさん
2007/04/22(日) 21:34:36大体のところ、vtblはメモリ領域の先頭に付くんだから。
0585デフォルトの名無しさん
2007/04/22(日) 21:35:32FAQすぎるFAQだな。
-lm
0586デフォルトの名無しさん
2007/04/22(日) 21:35:41libmをリンクしろ
0587デフォルトの名無しさん
2007/04/22(日) 21:40:36すまん、TEST1-TEST3は継承関係があると勝手に思い込んでいたorz
0588デフォルトの名無しさん
2007/04/22(日) 21:44:18ありがとうございました。 一瞬でできました orz
GCCは最近使いだしたので、イマイチわかってなかったんです。
精進します orz
0589デフォルトの名無しさん
2007/04/22(日) 22:04:18とりあえず表示は調べてできるようになりました。
ATL+COM、だと思います。
で、実行中のFLASHを右クリックしてもポップアップがでないようにしたいのですが、
どうすれば可能でしょうか?
0590デフォルトの名無しさん
2007/04/22(日) 22:35:24flashの方で禁止すればいいだろ。
0591デフォルトの名無しさん
2007/04/22(日) 22:38:48そこは作り手任せでいいのか。
0592デフォルトの名無しさん
2007/04/23(月) 00:29:1811ページ目にあるコードの
template <template <class> class CreationPolicy>
class WidgetManager : public CreationPolicy<Widget>
{
...
void DoSomething()
{
Gadget* pW = CreationPolicy<Gadget>().Create();
}
};
CreationPolicy<Gadget>().Create();
のようにクラス名の後に括弧が置かれているのは何を表しているのでしょうか?
0593デフォルトの名無しさん
2007/04/23(月) 00:36:170594デフォルトの名無しさん
2007/04/23(月) 00:43:14クラス名の後ろに括弧を置くと、無名インスタンスが
作成されるということなんでしょうか?
0595デフォルトの名無しさん
2007/04/23(月) 00:47:51コンストラクタを呼んでいる。
クラス名が書かれているという見慣れない構文だと考えるのではなく、
ただの関数呼び出しがされているだけ。
0596デフォルトの名無しさん
2007/04/23(月) 00:57:26コンストラクタのあとに.Create()が付いているのはどういうことなんでしょうか?
コンストラクタは返り値を持たないので、返り値に対してメソッドを呼ぶことはできない
と思うんですが・・・
0597デフォルトの名無しさん
2007/04/23(月) 01:09:430598デフォルトの名無しさん
2007/04/23(月) 01:18:12コンストラクタを直接呼び出せるとか、そういったマニアックな構文の情報が
載っているWebサイトか本はないでしょうか?
これから先も見慣れない構文がどんどん出てきそうなので・・・
0599デフォルトの名無しさん
2007/04/23(月) 01:25:350600デフォルトの名無しさん
2007/04/23(月) 01:26:11まあ規格書でも買っとけ。
0601デフォルトの名無しさん
2007/04/23(月) 01:31:57手元にあるプログラミング言語C++第三版にもコンストラクタを直接呼び出す
云々の説明がないので気になってました。(そもそもテンプレートの型指定に
テンプレートを使ってる時点で既にマニアックですね)
0602デフォルトの名無しさん
2007/04/23(月) 01:39:31の実装依存にならざるを得ない問題について詳しく知りたいのですが、
なんて検索すればいいんでしょうか。
0603デフォルトの名無しさん
2007/04/23(月) 01:41:10いやコンストラクタを直接呼び出すなんて大げさな表現だが、
実態はただの一時オブジェクト作成だろ。
0604デフォルトの名無しさん
2007/04/23(月) 01:42:470605デフォルトの名無しさん
2007/04/23(月) 01:49:110606デフォルトの名無しさん
2007/04/23(月) 01:49:41C#か?ジェネリクス!?
ttp://discuss.develop.com/archives/wa.exe?A2=ind0306c&L=dotnet-cx&P=3655
0607デフォルトの名無しさん
2007/04/23(月) 01:51:37君は何を言っているんだね?
少々落ち着きたまえ
0608デフォルトの名無しさん
2007/04/23(月) 01:56:12ありがとろう
0609デフォルトの名無しさん
2007/04/23(月) 01:59:550610デフォルトの名無しさん
2007/04/23(月) 08:34:570611デフォルトの名無しさん
2007/04/23(月) 08:37:090612デフォルトの名無しさん
2007/04/23(月) 08:45:450613デフォルトの名無しさん
2007/04/23(月) 09:14:31異なるプラットフォーム(同じ信仰を持たない人相手)では意図した通りに動作しない可能性があります。
0614デフォルトの名無しさん
2007/04/23(月) 09:31:46コンパイラベンダも最適化オプション間で同じ動きをするようにわざわざ調整するくらいなんだから。
0615デフォルトの名無しさん
2007/04/23(月) 09:54:04++演算子を変なオーバーロードしててその副作用が欲しい時?
まだ始めたばっかだからであった事無いけど、
そのうちそんなややこしいことし無けりゃならないような設計をせざるを得ないような状況って出てくるの?
0616デフォルトの名無しさん
2007/04/23(月) 10:26:250617デフォルトの名無しさん
2007/04/23(月) 10:27:040618デフォルトの名無しさん
2007/04/23(月) 11:02:100619デフォルトの名無しさん
2007/04/23(月) 17:14:50は単なる例え。
a[i]=i++;
でもいい。
0620デフォルトの名無しさん
2007/04/23(月) 18:00:22>>616
0621デフォルトの名無しさん
2007/04/23(月) 18:25:52どうせ最適化してくれるよ。
0622デフォルトの名無しさん
2007/04/23(月) 19:37:49つ 10.4.10 一時オブジェクト
一時オブジェクトは、コンストラクタを明示的に起動することによっても作成される。
0623デフォルトの名無しさん
2007/04/24(火) 01:27:27本来メンバ関数は実装ファイルに書くことになってますが、
ソースが二カ所に分かれるのは明らかに扱いにくいし、保守性が悪そうなのです。
関数の入出力は宣言として書く必要がありますし。
もっともそうすると、main以外はクラスのメンバとしているため、
実装ファイルに書くことが無くなってしまうわけですが。
0624デフォルトの名無しさん
2007/04/24(火) 01:49:05普通CやC++のオブジェクトファイルははソーステキストの
変更の有無で再コンパイルするかどうか決まるので、
>>623をやってしまうとそのクラスの実装を少しいじるだけで
関係するすべてのソースを再コンパイルする必要が出てくる。
小規模プロジェクトならまったく問題ない
0625デフォルトの名無しさん
2007/04/24(火) 08:07:480626デフォルトの名無しさん
2007/04/24(火) 08:15:101クラス1ソース&ヘッダぐらいに分割するべきなんでしょうかね?
なんかプロジェクトフォルダのファイル数が1000超えてるんですが
0627デフォルトの名無しさん
2007/04/24(火) 08:15:29WTLとか全部ヘッダだよね
0628デフォルトの名無しさん
2007/04/24(火) 08:18:491ソースに限定される規定は無い
1クラスが2ソース使ってようが3ソース使ってようが関係無い
そしてファイルを分けるとともにフォルダも分けることを考えなさい
0629デフォルトの名無しさん
2007/04/24(火) 08:20:440630デフォルトの名無しさん
2007/04/24(火) 08:36:59・・・て、1クラス=2、3ファイル!?
基本、クラス名=ファイル名で、1クラス=1ファイルにしてる
あとフォルダと、分割も
ソース入り乱れてヤバくならない?
0631デフォルトの名無しさん
2007/04/24(火) 08:42:34別にダイナミックリンクしなくても、
スタティックライブラリ作って
スタティックリンクでいいじゃん。
0632デフォルトの名無しさん
2007/04/24(火) 08:46:19確かに便利だが、ぐちゃぐちゃになるよね
0633デフォルトの名無しさん
2007/04/24(火) 15:05:51ならなかったんですよね。
って返事遅れました。スマソ。
C++FAQなんですが、意味不明な訳とこういう
コンパイルエラーなコード以外は結構いい本っぽいんですけどね。
0634デフォルトの名無しさん
2007/04/24(火) 19:50:42数値計算パートは分けたりしてるな
0635デフォルトの名無しさん
2007/04/24(火) 20:08:04それぞれ別ライブラリにして分離すればいいのかな?
0636デフォルトの名無しさん
2007/04/24(火) 20:38:05書式指定で表示したい場合ってどうするんですか?
0637デフォルトの名無しさん
2007/04/24(火) 20:40:33そうでない場合は、使ってる処理系のマニュアルを読んでくれ。
0638デフォルトの名無しさん
2007/04/24(火) 20:40:53マルチバイト文字を%cで出力しようとかそういう無理なことをしようとしない限り。
0639デフォルトの名無しさん
2007/04/24(火) 20:52:51トンです。
初心者ですまないのですが、
C言語で文字形態を全部2バイトのワイド文字にするのってどうするんですか?
そのまま書いたら'a'は1バイトで'あ'は2バイトですよね。
0640デフォルトの名無しさん
2007/04/24(火) 21:02:59ワイド文字が欲しければ L'a' や L'あ' と書く(ワイド文字リテラルは wint_t 型)
0641デフォルトの名無しさん
2007/04/24(火) 21:04:26C/C++でのワイド文字リテラルはL'あ'のようにLを前置したもの。
同様にワイド文字列リテラルがL"いろは"という風に存在する。
このワイド文字はwchar_t型になるが、sizeof (wchar_t) == 2とは限らない。
UCS-4を採用して4になっている環境もある。
ワイド文字(列)・マルチバイト文字(列)の相互変換する
Cの関数はwctomb, wcstombs, mbtowc, mbstowcs。
C++もロケールと関連して同様のものがある。
0642デフォルトの名無しさん
2007/04/24(火) 21:08:16のエンコーディングって成功したりしなかったりしない?
ソースがSJISでVCだとうまくいったけど、
cygwin環境でコンパイルしたら失敗したorz
0643デフォルトの名無しさん
2007/04/24(火) 21:09:490644デフォルトの名無しさん
2007/04/24(火) 21:10:01--input-charset=CP932 --exec-charset=CP932
0645デフォルトの名無しさん
2007/04/24(火) 21:23:37cygwinはlocaleまわりが糞でmbstowcs()等が使い物にならんから諦めろ。
ワイド文字リテラル自体はiconvを扱えるバージョンのgccなら
charset指定すれば大丈夫だが、libcが腐っているのでは仕方が無い。
0646デフォルトの名無しさん
2007/04/24(火) 21:41:30その後、ruby1.8は肝心のファイル作成がfopen経由なのを忘れてた。
wfopenはライブラリが頼りなさげなので、これでは片手オチなのでボツ。
1.9追いかけてみるか・・・
0648デフォルトの名無しさん
2007/04/24(火) 21:44:07ありがとうございます!
基本的なことっぽいのに初心者用の本にその辺のことが書いてなかったので
非常に助かりました!
0649デフォルトの名無しさん
2007/04/24(火) 23:11:21ありがとうございます。
--input-charsetとか知らなかったです。
>>643
>>645
cygwin環境が根本的におかしいのですね^^
解説ありがとうございました。
0650デフォルトの名無しさん
2007/04/24(火) 23:44:23一人がウィンドウを閉じたら、全員の接続が切れてしまいます。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3859.txt
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3860.txt
上がクライアント側のソースで、下がサーバ側のソースです。
原因が全然分からなくてもうどうしたらいいノアふえjjrじえgとわあえrたおえjら
0651デフォルトの名無しさん
2007/04/24(火) 23:52:43recvがSOCKET_ERRORを戻すと、Winsockが
やる気なくして全部のソケットが死ぬ。
0652デフォルトの名無しさん
2007/04/24(火) 23:59:13ありがとおおございます!
WSACleanup()をWM_DESTOROYの所に移したら正常に動作しました!
3時間の悩みが8分で解決するとは・・・
0653デフォルトの名無しさん
2007/04/24(火) 23:59:420654デフォルトの名無しさん
2007/04/25(水) 00:12:41winsock関係の質問スレッドがなくてここで質問させてもらいました・・・
Cっぽい香りもほのかにするので、許してもらえると思いました・・・
0655デフォルトの名無しさん
2007/04/25(水) 00:16:37ネットワークプログラミング相談室 Port19
http://pc11.2ch.net/test/read.cgi/tech/1171029896/l50
0656デフォルトの名無しさん
2007/04/25(水) 00:29:57誘導ありがとうございます!
0657デフォルトの名無しさん
2007/04/25(水) 01:11:16「警告 W8004 X:\data\src\Test.cpp 11: 'test' に代入した値は使われていない(関数 main() )」
という警告がでます。delete文を生かせば警告は出ません。
警告の内容が合っていないような気がするのですが、
これでいいのでしょうか?
#include<iostream>
class Test {
public:
Test() {}
~Test() {}
void func() { std::cout << 12345 << std::endl; }
};
void main() {
Test *test = new Test();
test->func();
//delete test;
}
0658デフォルトの名無しさん
2007/04/25(水) 01:13:58BCC5.8.2では警告出ないよ。
多分古いBCCのバグだね。
0659デフォルトの名無しさん
2007/04/25(水) 01:14:180660デフォルトの名無しさん
2007/04/25(水) 01:34:06使われなくなった変数・オブジェクトに対して使われてないっていう警告を出すよ。
0661657
2007/04/25(水) 01:47:41回答有難うございます。
bccはBorlandからフリーダウンロードできる5.5.1です。
かなり古い物ですね。
原因はインライン展開の結果、
使われないと判断されたということのようですね。
今のところ実害は無いので、気にしないことにします。
警告は全部潰したいのだけど・・・。
0663デフォルトの名無しさん
2007/04/26(木) 20:00:14「代入」ではないってことで良いんですか?
0664デフォルトの名無しさん
2007/04/26(木) 20:10:110665デフォルトの名無しさん
2007/04/26(木) 20:25:40分かりました。有難うございます。
0666デフォルトの名無しさん
2007/04/26(木) 20:40:590667デフォルトの名無しさん
2007/04/26(木) 20:45:580668デフォルトの名無しさん
2007/04/26(木) 20:49:390669デフォルトの名無しさん
2007/04/26(木) 20:53:590670デフォルトの名無しさん
2007/04/26(木) 20:56:11普通に関数にしろよ
#define fthru(fin, fout, n) do { size_t m = (n); while(m--) putc(getc(fin), fout); } while(0)
0671デフォルトの名無しさん
2007/04/26(木) 21:16:38ありがとうございます。ですが、読み書きが超遅すぎです。
0672デフォルトの名無しさん
2007/04/26(木) 21:18:45いくらなんでも一文字ずつじゃ遅いだろ。
0673デフォルトの名無しさん
2007/04/26(木) 21:25:170674デフォルトの名無しさん
2007/04/26(木) 21:36:18マルチスレッドを意識したlibcの場合、getc()/putc()は古典的な
マクロ実装でない上に、呼び出し毎に(つまり一文字単位で)
排他制御を行うようになっている実装が多い。
例えばVC++の場合、シングルスレッド版のスタティックリンクライブラリ
以外ではそうなる。マクロ+排他無しと関数呼び出し+排他ありでは、
当然速度面で劇的な違いがある。
古典的にはgetc()/putc()はそれほど遅いものではなかったのだが、今時は
速度が気になるケースでは使わないほうが良いかもしれない。
>>672
getc()/putc()であっても、特に何もしなければデフォルトのサイズ
(BUFSIZ)のバッファが使われ、その単位でのI/Oが行われる。
setvbuf()はBUFSIZでは不十分だというのなら初めて使えば良い。
getc()/putc()が遅いというのは、また別の次元の話だ。
0675デフォルトの名無しさん
2007/04/26(木) 21:50:04どんなものぐさだよ
0676デフォルトの名無しさん
2007/04/26(木) 21:56:54参考になります。
0677デフォルトの名無しさん
2007/04/26(木) 22:25:05それは初めて聞いた。getc()/putc()の中身をトレースしてmutexの
呼び出しがあるかどうか確認してみる。
0678677
2007/04/26(木) 22:32:310679デフォルトの名無しさん
2007/04/26(木) 22:36:280680デフォルトの名無しさん
2007/04/26(木) 22:46:53_getc_nolock、_getwc_nolock
_putc_nolock、_putwc_nolock
0681VC++.net
2007/04/26(木) 23:01:26//
#include <iostream.h>
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
cout << "coutのテストです";
return 0;
}
コンパイルしています...
contest.cpp
contest.cpp(9) : error C2065: 'cout' : 定義されていない識別子です。
な、なんで?
0682デフォルトの名無しさん
2007/04/26(木) 23:05:48× iostream.h
○ iostream
× cout
○ std::cout
自分で書いたんならいいが、コピペ元の本やサイトがあれば晒しとけ。
0683デフォルトの名無しさん
2007/04/26(木) 23:06:40<iostream.h>は古い(ISOに入っていない)ということで、
最近のVisual C++からは削除された。
今は<iostream>というヘッダ名になっている。
coutなどは名前空間stdの中で宣言されている。名前空間を知らなければ勉強しろ。
これとは関係ないが、"stdafx.h"のインクルードより前の記述は無視されるはず。
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "coutのテストです";
return 0;
}
0684デフォルトの名無しさん
2007/04/26(木) 23:06:450685デフォルトの名無しさん
2007/04/26(木) 23:14:04ってうんこな方法って聞いたんですが本当ですか?
0686デフォルトの名無しさん
2007/04/26(木) 23:16:31関数内とか、閉じたブロックの中でやる分にはほとんど害は無い。
グローバルや名前空間内でやるのはうんこ。ヘッダでやったら死刑。
0687デフォルトの名無しさん
2007/04/26(木) 23:23:26旧形式のヘッダまで、こんな感じで<cstdio> 詰め込むとか狂気の沙汰だ。
0688デフォルトの名無しさん
2007/04/26(木) 23:27:44char buffer[256];
size_t i = 0;
while (i < n) {
size_t read_size = n - i < sizeof(buffer) ? n - i : sizeof(buffer);
fread(buffer, 1, read_size, fin);
fwrite(buffer, 1, read_size, fout);
i += read_size;
}
}
こんなのはどう?
0689デフォルトの名無しさん
2007/04/26(木) 23:30:06{
void f(int);
}
using namespace A;
namespace B
{
void f(int);
}
using namespace B;
int main()
{
f(7); //B::fを呼ぶつもり。でも実際にはA::fとB::fで曖昧エラー
}
例えばAは巨大なライブラリの名前空間であり、
そこにある別の何かを使おうと思ってusing namespace A;を書いたが、A::fの存在を知らなかった。
なんてことは起こらないだろうと思っていると、痛い目に遭う。
0690デフォルトの名無しさん
2007/04/27(金) 00:30:26それはVC++8.0からだな。
VC++8.0でシングルスレッド版スタティックリンクライブラリ(LIBC.LIB)
が廃止された関係で作られたんじゃないかな。
0691デフォルトの名無しさん
2007/04/27(金) 00:30:32ありがとうございます。
コピペ元は猫でもわかるです。
0692デフォルトの名無しさん
2007/04/27(金) 00:41:42>>687
>>689
なるほどなるほど
実験用に書くごく小規模のものを除けば
ソースファイル内でのusing宣言程度にとどめておいたほうが無難ですね
0693デフォルトの名無しさん
2007/04/27(金) 01:42:45な真似はぜったいにしてはいけない」とありますが、これは何故でしょう?具
体的にはどんな問題がありますか?
0694デフォルトの名無しさん
2007/04/27(金) 01:51:30srand() に何を渡すつもりだ?
0695デフォルトの名無しさん
2007/04/27(金) 01:55:31乱数の質がとても悪くなる。
0696デフォルトの名無しさん
2007/04/27(金) 02:19:44順当に考えれば時間かな
>>695
そうなんや。
0697デフォルトの名無しさん
2007/04/27(金) 02:50:34#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <windows.h>
void func(){
srand(time(NULL));
printf("%d ", rand());
}
int main(){
int i;
srand(time(NULL));
for(i=0; i<20; i++)
printf("%d ", rand());
printf("\n");
for(i=0; i<20; i++)
func();
printf("\n");
for(i=0; i<20; i++){
func();
Sleep(1000);
}
return 0;
出力:
22201 17506 10327 21515 11769 30486 19614 1582 31820 209 26900 5342 13956 31930 23843 18046 1218 19168 4043 27868
22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201 22201
22201 21985 21770 21554 21338 21123 20907 20692 20476 20260 20045 19829 19613 19398 19182 18966 18535 18319 18104 17888
0698デフォルトの名無しさん
2007/04/27(金) 09:43:03毎回srandで時刻を渡してたら1秒間はまったく同じ数字が出る
0699デフォルトの名無しさん
2007/04/27(金) 14:40:15毎回srandを呼べば済む場合というのは、
そもそも最初からsrandに渡す値を乱数として扱っても問題ないってことだ。
0700693
2007/04/27(金) 17:00:32>>697
最初のループ出力と最後のループ出力(2番目は論外)
の標準偏差を比較すると、最初のループの方が7.8倍
も大きいから、この場合は毎回srand()をしない方が
圧倒的に勝れていると言うことは実感としてわかりま
した。
そこで試しにより細かく、gettimeofday()を使って時
間をマイクロ秒単位で出し、同様に標準偏差を比較す
ると、今度はsleep()を使用せずとも結果は1.08倍と
なり、誤差程度になりました。
このことから、時間を充分に小さくすればランダムに
なると思います。ただし、そんなことをしても関数
callの分オーバーヘッドが増えるだけで、何らメリッ
トはない。つまり、毎回srand()を呼ぶことが「絶対
」駄目な理由とは、アルゴリズム上いけないと言うこ
とではなく、単に「無駄」だから、と自分なりに結論
づけましたが、どうでしょうか。
>>699
いえ、例えば上記でいえば、gettimeofday()のマイク
ロ秒はランダムな数値とは言えないので、そうとも言
い切れないと思います。揚げ足取りなら申し訳ない。
0701デフォルトの名無しさん
2007/04/27(金) 17:14:50そもそも、なんでsrandが必要なのか考えたことある?
0702デフォルトの名無しさん
2007/04/27(金) 17:53:24結局文脈次第。法律で禁じられてはいないし、プログラムが落ちるわけでもない。
そんなにやりたいならやっていい。
「こういう使い方をする」と想定されて作られた物の、その使い方に従いたくない理由がさっぱりわからないが。
0703デフォルトの名無しさん
2007/04/27(金) 17:58:340704デフォルトの名無しさん
2007/04/27(金) 18:07:57gccでコンパイルする時
parse error before "ナンチャラ"
ナンチャラは引数の型名
って出るんですけど
原因がよく分かりません
どなたかこのエラーについて教えて下さい
0705デフォルトの名無しさん
2007/04/27(金) 18:12:480706デフォルトの名無しさん
2007/04/27(金) 18:13:31この場合は単純すぎるが。
前の行でセミコロンとか中括弧が抜けてるとか、そんなもんじゃないのか?
0707デフォルトの名無しさん
2007/04/27(金) 18:16:280708デフォルトの名無しさん
2007/04/27(金) 18:21:340709デフォルトの名無しさん
2007/04/27(金) 20:43:310710デフォルトの名無しさん
2007/04/27(金) 20:49:360711デフォルトの名無しさん
2007/04/27(金) 20:50:32ポインタの参照先がconst → int const *
ポインタ自体がconst → int * const
上記二つの複合 → int const * const
0712デフォルトの名無しさん
2007/04/27(金) 20:54:250713デフォルトの名無しさん
2007/04/27(金) 21:03:24なんか簡単な読み方というか覚え方というか無いんでしょうか?
0714デフォルトの名無しさん
2007/04/27(金) 21:05:57int const *p → *p が const
int * const p → p が const
const の右にあるやつが const ってだけの話だ。
0715デフォルトの名無しさん
2007/04/27(金) 21:16:120716デフォルトの名無しさん
2007/04/27(金) 21:26:59わかりにくくなったらtypedefで単純化するんだ。
0717デフォルトの名無しさん
2007/04/27(金) 21:49:20例外的なスタイル( const が左側にある )なのに一番一般的な使い方だという。
0718デフォルトの名無しさん
2007/04/27(金) 21:51:44別に例外でも何でもないと思うが。
0719デフォルトの名無しさん
2007/04/27(金) 21:56:07const int == int const みたいにconstを
右においても左においても同じ意味になるのなんてこれだけ。
他の場合は const を書く位置が厳密に決まっている。
0720デフォルトの名無しさん
2007/04/27(金) 21:58:17どの型修飾子においても同じで例外ではない。
0721デフォルトの名無しさん
2007/04/27(金) 22:02:35ちょww、基本型の話してんじゃねぇよ。
const int (== int const) と違って
int * const, int * const *, int ** const 等々に代替表現は存在しないってこと。
0722デフォルトの名無しさん
2007/04/27(金) 22:05:39ああ、そうか。なるほど。 ごめん。
0723デフォルトの名無しさん
2007/04/27(金) 22:07:21そりゃ置く場所他にないだけであって。
0724デフォルトの名無しさん
2007/04/27(金) 22:11:25それでも const int っていう表現は規格としては許すべきじゃなかったと思うぞ。
この表現があるせいで、 int * const のつもりで int const * って書くヤツが後を絶たん。
0725デフォルトの名無しさん
2007/04/27(金) 22:12:080726デフォルトの名無しさん
2007/04/27(金) 22:14:03ごめん、意味がわからん。
0727デフォルトの名無しさん
2007/04/27(金) 22:17:560728デフォルトの名無しさん
2007/04/27(金) 22:18:57ごめん、(質問の)意味がわからん。
0729デフォルトの名無しさん
2007/04/27(金) 22:19:33staticは記憶クラス
constは型修飾子
0730デフォルトの名無しさん
2007/04/27(金) 22:21:50そうなのか。
しかし、int const * はちょいキモいな。
0731デフォルトの名無しさん
2007/04/27(金) 22:23:13でも結局、順不同なのは同じ
0732デフォルトの名無しさん
2007/04/27(金) 22:31:15ごめん、意味がわからん。
0733デフォルトの名無しさん
2007/04/27(金) 22:33:18static int const b;
const static int c;
const int static d;
int static const e;
int const static f;
全部同じ。
0734デフォルトの名無しさん
2007/04/27(金) 22:35:49いや、それでなにが訊きたいの?
0736デフォルトの名無しさん
2007/04/27(金) 22:41:350737デフォルトの名無しさん
2007/04/27(金) 22:47:060738デフォルトの名無しさん
2007/04/28(土) 03:28:400739デフォルトの名無しさん
2007/04/28(土) 14:19:030740デフォルトの名無しさん
2007/04/28(土) 15:54:04constやstaticってどんな表現になるんですか?
int const *
int * const
int const * const
についてお願いします
0741デフォルトの名無しさん
2007/04/28(土) 15:57:19\const{int} *
\const{int *}
\const{\const{int} *}
こんな感じ?
0742デフォルトの名無しさん
2007/04/28(土) 16:05:400743デフォルトの名無しさん
2007/04/28(土) 16:32:18const int みたいに右でも使えるよ。そもそも修飾子だから結合ってのもおかしい。
0744デフォルトの名無しさん
2007/04/28(土) 16:33:05○右にもかかる
0745デフォルトの名無しさん
2007/04/28(土) 16:42:59class Base {
//--
public:
static void* operator new(size_t size);
static void operator delete(void *pblock);
//--
};
Baseを直接newしても継承したクラスをnewしても差し替えたいnewが呼ばれず
deleteの方だけが呼び出されています。(Baseを元にした割と小さめなオブジェクトが大量に作られるのでslabアロケータのようなサイズ別の割り当て処理を使いたいのです)
debug等の条件下では行番号やらファイル名を渡すnewオペレータが呼ばれるからだとは思ったのですが
releaseモードでのビルドでも指し変わらずに困っています。
何を設定することでBaseクラスのnewオペレータを差し替える事ができるのでしょうか?
0746デフォルトの名無しさん
2007/04/28(土) 17:06:20差し変わらないということを示す最小限のプログラムを作ってみてくれ。
自分で定義した operator new の中で cout に何か出してみて、
それが実際には表示されない、というようなやつでいいよ。
0747gost
2007/04/28(土) 17:22:310748デフォルトの名無しさん
2007/04/28(土) 17:31:590749デフォルトの名無しさん
2007/04/28(土) 17:32:084の倍数を列挙すんの?
ある数が4の倍数かどうかを判定するの?
0750デフォルトの名無しさん
2007/04/28(土) 17:33:18#include <limits.h>
int main() {
for (int i=0, j = INT_MAX>>2; i < j; ++i)
printf("%d ", i<<2);
return 0;
}
0751gost
2007/04/28(土) 17:36:340752デフォルトの名無しさん
2007/04/28(土) 17:37:43言わないか
0753デフォルトの名無しさん
2007/04/28(土) 17:41:430754デフォルトの名無しさん
2007/04/28(土) 17:44:530755デフォルトの名無しさん
2007/04/28(土) 17:51:43素因数分解をしたいんですが、その前に
1とその数字自身でしか割り切れない自然数が素数
とのことですが、このとき 1はなぜ素数ではないのでしょうか
1も、1とその数字自身(1)で割り切れるので素数だと思うのですが・・・
あと、なぜマイナスは対象外なのでしょうか自然数だけでなく整数まで対象を広げたら
面白いと思うのですが、なぜやらないのでしょうか
0756gost
2007/04/28(土) 17:52:460757デフォルトの名無しさん
2007/04/28(土) 19:43:32素因数分解の結果が一意に定まるようにするため。
1を素数と認める、マイナスにまで広げる、はいずれも素因数分解の一意性を破壊する。
0758デフォルトの名無しさん
2007/04/28(土) 19:43:55素数とは1とその数自身以外に正の約数をもたない1より大きい自然数のことだ
数学を勉強しなおせ
0759デフォルトの名無しさん
2007/04/28(土) 19:55:49世の法則なので
面 白 け れ ば い い と 言 う も の で は な い
つーか文句はその昔素数を考えた数学者に言え
0760745
2007/04/28(土) 19:56:150761デフォルトの名無しさん
2007/04/28(土) 20:30:36ま、そんなもんだろ。 >>746 は他にも変なことが起こったときには有効な
アプローチだから、今度からは質問する前に自分でそこまでやってからな。
0762デフォルトの名無しさん
2007/04/28(土) 20:33:57unsigned char num = 20;
os << a;
std::string str = os.str();
これだとstrはスペース1文字になってしまうのですが、
"20"という文字列が入るようにするにはnumをキャストするしかないでしょうか?
0763デフォルトの名無しさん
2007/04/28(土) 20:36:23あるいは num の型を変える。それがダメならキャストが最善手だと思う。
0764デフォルトの名無しさん
2007/04/28(土) 20:42:20もちつけ >762 で num はまったく関係ないぞw
0765762
2007/04/28(土) 20:48:32std::ostringstream os;
unsigned char num = 20;
os << num;
std::string str = os.str();
やっぱキャストですかね。
実際は
os << data[1]
<< "//"
<< data[2]
<< '-'
ってのが延々と続く感じなんでキャストするととても見づらいんで、sprintf使おうかなあ…
0766デフォルトの名無しさん
2007/04/28(土) 20:49:330767766
2007/04/28(土) 20:50:050768766
2007/04/28(土) 20:56:31ちょっとうんこして来る
0769デフォルトの名無しさん
2007/04/28(土) 21:04:39>>757は大学レベルの数学を知ってる大人
>>758-759は数学を暗記科目だと思ってる大人
だな。
0770デフォルトの名無しさん
2007/04/28(土) 21:25:140772デフォルトの名無しさん
2007/04/28(土) 21:44:180773デフォルトの名無しさん
2007/04/28(土) 21:44:500774770
2007/04/28(土) 22:37:35定義されてしまえばそれまでの経緯なんて何の意味もねえ
数学は暗記科目なんかじゃなくて芸術なんだよ
センスのないやつは触れるな
0775770
2007/04/28(土) 22:39:570776デフォルトの名無しさん
2007/04/28(土) 22:41:020777デフォルトの名無しさん
2007/04/28(土) 23:02:07多分winアップデートでフォント最新にしたからか
0778デフォルトの名無しさん
2007/04/28(土) 23:24:45歴史的な経緯?
0779デフォルトの名無しさん
2007/04/28(土) 23:54:280780デフォルトの名無しさん
2007/04/29(日) 02:27:42IDはひどい板にしかないんだよ
ここもひどいだろって? いやいや
ここはとても平和な板だよ
0781デフォルトの名無しさん
2007/04/29(日) 02:56:46酷くないかと問われてみれば酷い面もあるし、
酷いかと問われてみれば酷くない面もあるし。
0782デフォルトの名無しさん
2007/04/29(日) 14:25:380783デフォルトの名無しさん
2007/04/29(日) 15:52:48使用目的は、 「株式の時系列データを取得し、株式の解析に用いる」 です。
例えば、プログラムを実行すると、
http://table.yahoo.co.jp/t?s=5010.t&g=d
上記ページの、
2/16〜4/27までの始値、高値、安値、終値を取得する。
そして、それらを数値として変換し、解析に用いたいのです。
研究室の条件により、C、C++、Javaのみでプログラムを作成しなければなりません。
可能でしたら、参考になるWEBサイトを教えていただければ幸いです。
よろしくお願いいたします。
0784デフォルトの名無しさん
2007/04/29(日) 16:03:29ネットワークプログラミング相談室 Port19
http://pc11.2ch.net/test/read.cgi/tech/1171029896/
0785デフォルトの名無しさん
2007/04/29(日) 16:28:25誘導ありがとうございました。
そちらのスレで聞いてみます。
0786デフォルトの名無しさん
2007/04/29(日) 17:50:40明示的にバッファ使用してますね。苦痛です。
fopen したら勝手にバッファ取られるんだから、finのバッファからfoutのバッファに直接コピーすべきだと思います。
0787デフォルトの名無しさん
2007/04/29(日) 19:02:53> fopen したら勝手にバッファ取られる
そんな保証はどこにもない。
0788デフォルトの名無しさん
2007/04/29(日) 19:11:56良く判りませんがシステムコールのread, writeつかえばよいのでは?
0789デフォルトの名無しさん
2007/04/29(日) 19:34:48保証とか関係ないと思われ。
互換性無くて良い上に、ファイル記述子使って良いんなら、sendfile とかがあるけど。
0790デフォルトの名無しさん
2007/04/29(日) 19:41:04ほぼ確定でしょ?
0791デフォルトの名無しさん
2007/04/30(月) 01:51:28ソケットである必要があったはず。
0792デフォルトの名無しさん
2007/04/30(月) 10:53:210793デフォルトの名無しさん
2007/04/30(月) 11:00:44PC98側 sprintf()
WinXP側 sscanf()
案2) それぞれの浮動小数点フォーマットを調べ、互換するようにビットセットしていく
0794デフォルトの名無しさん
2007/04/30(月) 12:13:27扱ってたと思うから、16bitってわけないとおもうけどなー
0795デフォルトの名無しさん
2007/04/30(月) 14:57:30DOS版じゃないROM/DISK-BASICの浮動小数点はIEEE754ではなかった記憶があるなぁ。
16bitのMS-Cに変換用の関数があった気がするが、古すぎて資料が出てこない。
0796デフォルトの名無しさん
2007/04/30(月) 15:26:30あった、これだ。MS C/C++ v1.5まではサポートしているらしい。
_fmsbintoieee
_dmsbintoieee
0797デフォルトの名無しさん
2007/04/30(月) 19:48:55ウィンドウプログラムの練習でC++でファイル内容を16進数表示させて表示するソフトを
作っています。一応完成したのですが300Kbyteみたいな大きいファイルを
処理させようとすると、処理が終わるまで1分以上かかります。
フリーソフトで同様のソフトをみても巨大なファイルでも一瞬で表示しています。
30行くらいのコードなので貼ったら教えてくれますか?
0798デフォルトの名無しさん
2007/04/30(月) 19:49:420799デフォルトの名無しさん
2007/04/30(月) 20:00:05ウィンドウに表示してない部分までファイルから読み込んだりしてないよね?
バイナリエディタの基本は表示してない部分はメモリに読み込まないこと。
たぶん、そうするだけで実用的には問題ない程度の速度になると思うよ。
0800797
2007/04/30(月) 20:14:09wsprintfA(lpszTemp, "%.8X\0", nOffset);
strcpy(lpszLine, lpszTemp); //オフセット
strcat(lpszLine, " \0"); //二文字のスペース
for ( UINT i = 1 ; i <= 16 ; i++ ) { //十六進数表示
wsprintfA(lpszTemp, "%.2X", *lpFileData2);
strcat(lpszTemp, " \0");
strcat(lpszLine, lpszTemp);
lpFileData2++;
}
strcat(lpszLine, " |\0"); //3文字のスペースと|
lpFileData2 -= 16;
for ( UINT i = 1 ; i <= 16 ; i++ ) { //アスキーコードならデータを表示
if ( ( 0x1c <= *lpFileData2 && 0x7e >= *lpFileData2 )
|| ( 0xa1 <= *lpFileData2 && 0xdf >= *lpFileData2 ))
strncat(lpszLine, (CHAR *)lpFileData2, 1);
else strncat(lpszLine, ".", 1);
lpFileData2++;
}
strcat(lpszLine, "\r\n\0"); //改行
strcat(lpszDumpData, lpszLine);
nOffset += 0x00000010;
---------------------------------ここまで をループ
結果は以下のような感じで表示されます。
00000000 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | ABCDEFGHIJKLMNOP
よろしくお願いします
0801797
2007/04/30(月) 20:17:05PeekMessageのPM_REMOVEを使って何もメッセージが発行されていないときに
すこしずつ表示しています。だから大丈夫です。
0802デフォルトの名無しさん
2007/04/30(月) 20:21:02sprintfとその返値を使うなどして、O(N)に引き戻してやれ。
0803デフォルトの名無しさん
2007/04/30(月) 20:24:41速度とは関係ないけど、文字列リテラルの最後の \0 は不要だろう。何のつもりだ?
0805デフォルトの名無しさん
2007/04/30(月) 20:47:24コンパイラが補ってくれることを知らないのかね?
0806797
2007/04/30(月) 21:14:060807デフォルトの名無しさん
2007/04/30(月) 23:37:00俺ならファイルマッピングを使う。
だが、お前には無理だ。
0808デフォルトの名無しさん
2007/05/01(火) 02:20:03sprintfの方がずっと簡単で見やすいし
どうしても速度を求めるならばstrlenやmemcpyを使うべきだし。
0809デフォルトの名無しさん
2007/05/01(火) 03:31:190810デフォルトの名無しさん
2007/05/01(火) 03:34:26お前はまず、なぜ strcat を使ってるコードがダメなのか理解してから出直してこい。
0811デフォルトの名無しさん
2007/05/01(火) 03:36:350812デフォルトの名無しさん
2007/05/01(火) 04:14:540813デフォルトの名無しさん
2007/05/01(火) 04:19:30string は自分の長さ覚えてるから、 reserve() しとけばだいぶマシ。
0814デフォルトの名無しさん
2007/05/01(火) 04:27:48�dくすこ
むぅ、size()を呼び出すオーバーヘッドを含めてもそこそこの性能なのか・・・
手軽に作るならこれで十分なのかもしれんね
0815デフォルトの名無しさん
2007/05/01(火) 04:40:21追加する分の長さをstrlen相当する必要があるけど
元文字列の長さは保持してるからね。
strcatは両方の長さを毎回strlenしてるのに相当する。
(本当に速度を求めるなら、長さは別途保持してmemcpy)
ただ、std::stringは参照カウンタで保持している場合が多いんで
書き換え(追加含む)時にはそのへんの処理が余分にかかるかな(reserveしてても)。
もちろん、バッファが小さかったとき
(sprintfの場合だと、"%.200s"等で最大長を指定して入りきらなかったとき)
の心配をしなくていいから、書く側にとってはすごく気楽だね。
0816デフォルトの名無しさん
2007/05/01(火) 05:44:08>wsprintfA(lpszTemp, "%.2X", *lpFileData2);
>strcat(lpszTemp, " \0");
これがすげえキモい
0817デフォルトの名無しさん
2007/05/01(火) 09:22:44参照カウンタの実装なんて当の昔に廃れただろ。
0818デフォルトの名無しさん
2007/05/01(火) 11:13:21普通は"0123456789ABCDEF"というコンストな文字列を使って4ビットずつ処理するだろ。
0819デフォルトの名無しさん
2007/05/01(火) 11:29:03それは極端に速度が要求されてるとき。もしくは sprintf() が動かない環境での回避策。
sprintf() のほうが圧倒的にコード量が少ないんだから、それで済むのにわざわざ
自分でループまわすコード書くのは愚かだ、とも言える。
いろんな方法があるだろうが、それらから適切なものを選ぶ理由を見つけるべき。
技術者なら軽々しく「普通」とか言わないように気をつけたほうがいい。
0820gost
2007/05/01(火) 11:33:15>> 4の倍数で無ければ、"n is not ROUND(4)"のプログラム教えて
0821デフォルトの名無しさん
2007/05/01(火) 11:34:46printf("n is %sROUND(4)", n % 4 ? "not " : "");
0822818
2007/05/01(火) 12:10:220823デフォルトの名無しさん
2007/05/01(火) 12:13:14fopenで開くファイルの指定に変数を使う方法は無いのでしょうか?
#include<stdio.h>
void main(){
int n,t[5]={0};
FILE *fp;
for(n=0;n<5;n++){
fp=fopen("t[n].txt","a+");
fclose(fp);
}
return;
}
上記のようなプログラムでt[0].txtからt[4].txtまで
fopenとfcloseの間の処理を行いたいのですが、t[n].txtを開いてしまいます。
変数の追加や変更があっても構いませんので、良い方法があれば教えて貰えないでしょうか。
0824デフォルトの名無しさん
2007/05/01(火) 12:14:020825デフォルトの名無しさん
2007/05/01(火) 12:20:21パラグラフ境界に置くコンパイラばかりじゃないので一概には言えません。
底が浅いのがバレバレですよ。
0826デフォルトの名無しさん
2007/05/01(火) 12:27:02もういい。しゃべるな。自分が新しく知ったことは何でも役に立つとは限らないと覚えておけ。
0827デフォルトの名無しさん
2007/05/01(火) 16:28:19もう少し詳しく教えてあげなよw
sprintf(変数,"t[%d].txt",n);
fp=fopen(変数,"a+");
って感じで
0828デフォルトの名無しさん
2007/05/01(火) 16:30:450829797
2007/05/01(火) 19:10:580830デフォルトの名無しさん
2007/05/01(火) 19:32:36そのレスが全てを物語ってる
0831797
2007/05/01(火) 19:48:20皆さんの意見が理解できるようなレベルになれるようがんばります!!。
意見くださった皆様本当にありがとうございました。
0832デフォルトの名無しさん
2007/05/01(火) 19:59:15線形リストのプログラムを作成しているのですが、うまくp2の->nextのポインタがNULLになってくれません。
自分ではまったく原因がわからないため、どなたかどこが間違っているかを指摘してもらえるとありがたいです。
プログラム自体に無駄が多いことはわかっているのですが、このような指定なので・・・。
どなたかお願いします。
0833デフォルトの名無しさん
2007/05/01(火) 20:04:570834デフォルトの名無しさん
2007/05/01(火) 20:11:49_node じゃなくて node_ にすべきだが
コーディング規約がそうなってるなら仕方がない。
0835832
2007/05/01(火) 20:19:51それでした・・・。
mallocしただけで、やった気になっていました(汗
>834
この課題ではそのようになっているので、しょうがないのですが、今後自分でやる際は注意させてもらいます。
0836デフォルトの名無しさん
2007/05/03(木) 01:29:58C/C++でそういうことができる、mallocなどの標準ライブラリのような位置づけの関数はないんでしょうか。
0837デフォルトの名無しさん
2007/05/03(木) 01:31:030838デフォルトの名無しさん
2007/05/03(木) 01:39:04まぁ、でも alloca は準標準と言っても過言じゃない。
0839デフォルトの名無しさん
2007/05/03(木) 01:42:480840デフォルトの名無しさん
2007/05/03(木) 02:19:140841デフォルトの名無しさん
2007/05/03(木) 07:46:56C99なら可変長配列を使える。
void func(int foo) {char buf[foo];}
なんてことができる。
0842デフォルトの名無しさん
2007/05/03(木) 09:03:02Aというフォルダがあって、そのフォルダにアクセスしてきたプログラム名を摂取、
とかやりたいのだが・・・。
C++の内容とかけ離れててスマン。
0843デフォルトの名無しさん
2007/05/03(木) 09:09:50Win32API質問箱 Build52
http://pc11.2ch.net/test/read.cgi/tech/1176828891/l50
0844デフォルトの名無しさん
2007/05/03(木) 09:12:07そのOSのスレに言ったほうが早い。
通常のファイルIOでは他からのアクセスまではわからない。
0845デフォルトの名無しさん
2007/05/03(木) 09:20:10Windows の場合、ファイルシステムフィルタードライバを書けばおk
sysinternals のヤツもファイルシステムフィルタードライバで拾ってる。
0846デフォルトの名無しさん
2007/05/03(木) 15:38:16それから作られるクラスCProductとそのインターフェースIProductがある
ここでCProductをCFactoryの中からでしか作れないようにしたい
(CFactory外部でnewしようとするとコンパイラエラーが発生する)
んですがどうすればいいんでしょう?
0847デフォルトの名無しさん
2007/05/03(木) 15:44:320848デフォルトの名無しさん
2007/05/03(木) 15:52:51// あと規格厳守の世界の住人から突っ込まれるかもしれないけど、耳をふさぐんだぞ!
int x ;
int * p = &x ;
unsigned long val = reinterpret_cast<unsigned long>(p) ;
// 戻すとき
int *p = reinterpret_cast<int *>(val) ;
必要なときは頻繁にあるから困る。
0849デフォルトの名無しさん
2007/05/03(木) 16:00:59CProductのコンストラクタをprivateにして、CFactoryをfriendにする。
0850デフォルトの名無しさん
2007/05/03(木) 16:04:17そんな注釈せんでも、uintptr_t 使おうぜ。
0851デフォルトの名無しさん
2007/05/03(木) 16:33:52おお、なるほど…
friendってこういうときに使うんですね
でもこれやるにはFactoryが完全に生成に特化したクラスじゃないと厳しそうですね
やっぱりfriend指定って怖いです
0852デフォルトの名無しさん
2007/05/03(木) 16:54:12友達作るぐらいで怖がってちゃいかんよ。
0853デフォルトの名無しさん
2007/05/03(木) 17:00:590854デフォルトの名無しさん
2007/05/03(木) 17:08:550855デフォルトの名無しさん
2007/05/03(木) 17:34:23STLがあるからイテレータパターンで設計する必要はなさそうですが……
0856デフォルトの名無しさん
2007/05/03(木) 17:39:34ポインタもそのまま使えるし。
個人的にはインタプリタパターンは要らないと思う。
文法1つにつき1クラスとか無駄すぎる。
パーサクラス1つ作っただけでいいよ。
0857デフォルトの名無しさん
2007/05/03(木) 18:04:450858デフォルトの名無しさん
2007/05/03(木) 18:06:44短絡評価とかショートサーキットとか呼ばれる
0859デフォルトの名無しさん
2007/05/03(木) 18:08:160860855
2007/05/03(木) 19:50:23なるほど。
インタプリタパターンですか。
今のところ使ったことはないんですが、
独自のプロパティファイル等を使う時は
意識しないといけませんね。
参考にさせていただきます。
0861デフォルトの名無しさん
2007/05/03(木) 19:51:20Visual Studio 2005では
関数の宣言にtraditionalの書き方はダメで
ANSIの書き方でなくてはダメになったのですか?
○void func(int arg){}
×void func(arg)int arg;{}
Visual C++ .net 2003では大丈夫だったのですが。
0862デフォルトの名無しさん
2007/05/03(木) 19:59:590863デフォルトの名無しさん
2007/05/03(木) 20:00:02拡張子 .c でもダメ?
0864デフォルトの名無しさん
2007/05/03(木) 20:00:14*.c の拡張子のソースをコンパイルすると大丈夫のようだけど
0865デフォルトの名無しさん
2007/05/03(木) 20:04:09C++ コードとしてコンパイル (/TP)
がデフォになってるからその影響かも。
0866861
2007/05/03(木) 22:28:10サンクス。
書き方の問題では無かったみたいです。
"errcode"という仮引数がまずかった模様。
これをANSIの書き方にしたら通ったもので。
ありがとうございました。
0867デフォルトの名無しさん
2007/05/04(金) 23:19:27public:
int *x;
A(){x = new int;}
~A(){delete x;x = NULL;}
};
class B{
public:
int *x;
B(){x = new int;}
~B(){delete x;x = NULL;}
};
class Hoge : public A, B{
int *x;
public:
Hoge(){x = new int;}
~Hoge(){delete x;x = NULL;}
};
int main(){
vector<A *> o;
Hoge *a0 = new Hoge;
o.push_back(a0);
Hoge *a1 = new Hoge;
o.push_back(a1);
vector<A *>::iterator p;
for (p = o.begin(); p < o.end(); p++) {if ((*p) != NULL) {delete (*p);(*p) = NULL;}}
return 0;
}
詰めて書いたら読みにくくなってしまった・・・。
このソースなんですが、deleteでの解放時、Aのデストラクタは呼ばれるのですが、
BとHogeのデストラクタが呼ばれません。
この場合どのようにすればいいのでしょうか?御願いします。
0868デフォルトの名無しさん
2007/05/04(金) 23:34:17デストラクタを virtual に。
0869デフォルトの名無しさん
2007/05/05(土) 00:19:51oの型をstd::vector<boost::shared_ptr<A> >にする。
それは半分冗談だが、delete 0は問題ないから、if ((*p) != NULL)の条件判断は不要。
0871デフォルトの名無しさん
2007/05/05(土) 10:38:48入力文字t → アスキーコード って感じです。
0872デフォルトの名無しさん
2007/05/05(土) 10:45:07ただ単に数値として扱えばよい。
0873デフォルトの名無しさん
2007/05/05(土) 10:48:40回答ありがとうございます。
charで型宣言して計算なども普通に行ってよいのでしょうか?
あとscanfで%cを使っても良いのですか?
0874871
2007/05/05(土) 10:57:14お騒がせしました><
0875デフォルトの名無しさん
2007/05/05(土) 11:19:55聞く前にとりあえずやってみろ。
0876デフォルトの名無しさん
2007/05/05(土) 11:27:33scanf()で%cを使うと、バッファ入力になっていると改行文字\nがバッファに
残ってしまい、繰り返し%cで入力する時動作がおかしくなる。
どうおかしくなるかは自分で体験してみる事をお勧めする。
解決策はgets()もしくはfgets()を使う。
0877デフォルトの名無しさん
2007/05/05(土) 11:37:090878デフォルトの名無しさん
2007/05/05(土) 11:40:00うっせーなお前にそんな事を言う権限はどこにもない。
0879デフォルトの名無しさん
2007/05/05(土) 11:45:410880デフォルトの名無しさん
2007/05/05(土) 11:47:16ネットワーク、スレッド、正規表現などを備えているものはありますでしょうか?
0881デフォルトの名無しさん
2007/05/05(土) 11:50:37ネットワークはないけど
0882デフォルトの名無しさん
2007/05/05(土) 12:08:100883デフォルトの名無しさん
2007/05/05(土) 12:10:370884デフォルトの名無しさん
2007/05/05(土) 12:28:040885デフォルトの名無しさん
2007/05/05(土) 12:28:27gets 使ってるプログラムがあったら、
そこから簡単にシェルコード実行してやんよ
0886デフォルトの名無しさん
2007/05/05(土) 13:02:38そういう話とgets()を使うなという話は無関係。
悪さをする方が悪い。
0887デフォルトの名無しさん
2007/05/05(土) 13:07:21でも今はそういう時はスクリプトか
0888デフォルトの名無しさん
2007/05/05(土) 13:08:04どっちが悪いという話じゃないだろw
どっちも悪い。
0889デフォルトの名無しさん
2007/05/05(土) 13:09:16gets()を使うのが悪いのは使うのが禁じられている時に限る。
今はどこにも禁じてないだろ?よく考えてみろ。
0890デフォルトの名無しさん
2007/05/05(土) 13:20:13コンパイラに使うなと言われるぞw
0891デフォルトの名無しさん
2007/05/05(土) 13:31:31処理系依存の話だな。使うなと言わないコンパイラもある。
まあこのスレは環境依存OKなのでいいんだが、君の言っている事が
全てのコンパイラで当てはまらないのは確かだ。
0892デフォルトの名無しさん
2007/05/05(土) 13:34:170893デフォルトの名無しさん
2007/05/05(土) 13:36:19話を逸らしましたね。それとコンパイラに使うなと言われるか言われないか
という事とどういう関係があるんでしょうね?
0894デフォルトの名無しさん
2007/05/05(土) 13:37:010895デフォルトの名無しさん
2007/05/05(土) 13:37:280896デフォルトの名無しさん
2007/05/05(土) 13:37:580897デフォルトの名無しさん
2007/05/05(土) 13:38:440898デフォルトの名無しさん
2007/05/05(土) 13:39:10よほどひどくていいプログラムは別だがな。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/fgetc.3.html
0899デフォルトの名無しさん
2007/05/05(土) 13:44:13あれ?俺のコンパイラのヘルプではgets()を使うなとは書いてないよ?
どうしましょう?w
0900デフォルトの名無しさん
2007/05/05(土) 13:45:400901デフォルトの名無しさん
2007/05/05(土) 13:46:53文法違反じゃないよね。
0902デフォルトの名無しさん
2007/05/05(土) 13:47:290903デフォルトの名無しさん
2007/05/05(土) 13:48:36誰かに「使うな!」とか言われる筋合いはないと思う。時と場合による。
0904デフォルトの名無しさん
2007/05/05(土) 13:49:56最早犯罪としか言いようがないけどな。
0905デフォルトの名無しさん
2007/05/05(土) 13:51:500906デフォルトの名無しさん
2007/05/05(土) 13:52:33Reading a line that overflows the array pointed to by s results in undefined behavior. The use of fgets() is recommended.
ってかいてあったぞ
0907デフォルトの名無しさん
2007/05/05(土) 13:53:490908デフォルトの名無しさん
2007/05/05(土) 13:54:24じゃあ危険性を教えて勧めるのはいいわけですね。
0909デフォルトの名無しさん
2007/05/05(土) 13:54:48いいよ。
0910デフォルトの名無しさん
2007/05/05(土) 13:56:570911デフォルトの名無しさん
2007/05/05(土) 13:58:53ないよ。
0912デフォルトの名無しさん
2007/05/05(土) 14:00:140913デフォルトの名無しさん
2007/05/05(土) 14:00:38この文のどこを訳したら「fgets()の使用は禁止」と訳せるんですか?
せいぜい「未定義の動作の原因になります」程度にしかならないんですけど。
0914デフォルトの名無しさん
2007/05/05(土) 14:01:10Since the user cannot specify the length of the buffer passed to gets(),
use of this function is discouraged.
ってあるのよね
0915デフォルトの名無しさん
2007/05/05(土) 14:01:530916デフォルトの名無しさん
2007/05/05(土) 14:06:380917デフォルトの名無しさん
2007/05/05(土) 14:07:34そういうときはfgets使え って書いてある。
0918デフォルトの名無しさん
2007/05/05(土) 14:09:57宿題みたいなある程度公の場に出るようなプログラムだとgets()は
まずいって事でいいんじゃないか?
0919デフォルトの名無しさん
2007/05/05(土) 14:11:26宿題なら処理の流れが分かってるかどうか分かりやすくするため
敢えて gets を使う事は悪くないとは思う。
仕事で使う奴はヌッ殺す。
0920デフォルトの名無しさん
2007/05/05(土) 14:14:37gets(buf); /* 10文字以上(改行文字も含めて)入力する奴は氏ね!!!! */
でいいじゃん
0921デフォルトの名無しさん
2007/05/05(土) 14:15:100922デフォルトの名無しさん
2007/05/05(土) 14:15:120923デフォルトの名無しさん
2007/05/05(土) 14:15:410924デフォルトの名無しさん
2007/05/05(土) 14:15:02まずgetsでサンプルをしめし、次に
getsの危険性を示して、締めに他API(fgetsなど)への置き換えを
練習問題として提示する
0925デフォルトの名無しさん
2007/05/05(土) 14:16:29http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
0926デフォルトの名無しさん
2007/05/05(土) 14:21:15fopen/mallocの返値をチェックしない
argcを調べずargvを使う
段数を制限することなく再帰する
0927デフォルトの名無しさん
2007/05/05(土) 14:22:45それは関係ない。似たような事だとはわかるが
0928デフォルトの名無しさん
2007/05/05(土) 14:23:030929デフォルトの名無しさん
2007/05/05(土) 14:25:09そういや、Visual Studio 2005 Express Editionって製品版とどこか違いってあるの?
今のところ、Visual Studio 2005 Express Editionで事足りてるから使ってるんだが。
0930デフォルトの名無しさん
2007/05/05(土) 14:25:520931デフォルトの名無しさん
2007/05/05(土) 14:28:250932929
2007/05/05(土) 14:30:22これも、MSが配ってた奴なんだが、色んなエディションがあって良く分からんな。
0933デフォルトの名無しさん
2007/05/05(土) 14:31:000934デフォルトの名無しさん
2007/05/05(土) 14:31:130935デフォルトの名無しさん
2007/05/05(土) 14:31:320936デフォルトの名無しさん
2007/05/05(土) 14:32:15ないと思うが、ちゃんと調べるには全ファイルが一致するかチェックするしかないな。
0937デフォルトの名無しさん
2007/05/05(土) 14:34:07何らかの冊子が付いてくる程度じゃないかな。
0938デフォルトの名無しさん
2007/05/05(土) 14:34:470939デフォルトの名無しさん
2007/05/05(土) 14:35:12βとかって表記してないから分からんけど、発売前だったからβだと思う。
0940デフォルトの名無しさん
2007/05/05(土) 16:14:23今日からC言語の勉強始めたのですが、
なぜか下のプログラムを実行しても0.0000とした表示されません。
0.1と表示させるためにはどのようにすればよいのでしょうか?
#include<stdio.h>
void main()
{
double a = 1/10;
printf("%f",a);
}
0941デフォルトの名無しさん
2007/05/05(土) 16:17:350942デフォルトの名無しさん
2007/05/05(土) 16:21:52ありがとうございました!!
0943デフォルトの名無しさん
2007/05/05(土) 19:04:31int hoge;があるとして、hoge = HOGE();
でhogeにFALSEが帰ってきた時のメッセージを出力する処理をしたいのですが・・・
0944デフォルトの名無しさん
2007/05/05(土) 19:08:15無理です。諦めましょう。
0945デフォルトの名無しさん
2007/05/05(土) 19:34:150946デフォルトの名無しさん
2007/05/05(土) 19:37:480947デフォルトの名無しさん
2007/05/05(土) 19:40:580948デフォルトの名無しさん
2007/05/05(土) 19:44:400949デフォルトの名無しさん
2007/05/05(土) 19:45:380950デフォルトの名無しさん
2007/05/05(土) 19:48:43いくら typedef int BOOL; だからって。
あと、その後に if(!hoge) { ... } と書いたらいけない理由があるのかな?
多すぎて・・・ということか?
0951デフォルトの名無しさん
2007/05/05(土) 20:24:37そいつを間接的使う関数作ったときに
return var ? true : false;
みたいなことやってるんだけど、これってマズイ?
0952デフォルトの名無しさん
2007/05/05(土) 20:30:45!! とか書く人もいるけど、最適化されるのかね? これ。
0953デフォルトの名無しさん
2007/05/05(土) 21:19:52return var != 0;
でいいじゃん
0954デフォルトの名無しさん
2007/05/05(土) 21:24:030 と比較するよりは ? : 使った方が読みやすいと思う。
0955デフォルトの名無しさん
2007/05/05(土) 21:25:46return (var != FALSE);
で解決ですね
0956デフォルトの名無しさん
2007/05/05(土) 21:27:520957デフォルトの名無しさん
2007/05/05(土) 22:01:420958デフォルトの名無しさん
2007/05/05(土) 22:08:290 と比較すると真偽を返すように読めないとでも言うのかね?
0959デフォルトの名無しさん
2007/05/05(土) 22:10:35if (n != 0) // 0 と比較するよりは
if (n ? true : false) // ? : 使った方が読みやすい
と思う。
0960デフォルトの名無しさん
2007/05/05(土) 22:25:510961デフォルトの名無しさん
2007/05/05(土) 22:26:39その状況で使えるかどうか判らないけど、
列挙型は、演算子多重定義できるよ。
0962デフォルトの名無しさん
2007/05/05(土) 22:30:07馬鹿にしてるとかそういう問題じゃないと思うが。
0963デフォルトの名無しさん
2007/05/05(土) 22:45:44読みやすい?
3項演算子より n != 0 の方がよっぽど読みやすいんだが
0964デフォルトの名無しさん
2007/05/05(土) 22:50:37if 文に入れる分には if(n) が最良だろう。
0965デフォルトの名無しさん
2007/05/05(土) 22:51:52他人の書いたソース中にそんなのが出てきたら一瞬戸惑うかもしれん。
「え、なんか特別な意図でもあるの?」って。
俺は素直に普通の比較式書いてコメント残すよ。
0966デフォルトの名無しさん
2007/05/05(土) 22:52:35n != 0 だとそれが式から見て取れない。
0967デフォルトの名無しさん
2007/05/05(土) 22:53:57は?
nとして数値か真偽値かって
n != 0 の結果が真偽値だろうがよ・・・
0968デフォルトの名無しさん
2007/05/05(土) 22:55:56真か偽かを表しているということだぜ?
というか、流れ分かってるのか?
>>951 から始まってるんだが。
0969デフォルトの名無しさん
2007/05/05(土) 22:58:15それ以外に何が要るのん?
そもそも元の話は n がintなのになんで n が数値か真偽値かなんて話になってんだ?
0970デフォルトの名無しさん
2007/05/05(土) 22:59:310971デフォルトの名無しさん
2007/05/05(土) 23:08:18結局それなら「○か否か」で終了じゃん
0973デフォルトの名無しさん
2007/05/05(土) 23:15:26数値的に見れば 0 か否かだが、
意味的には真か偽を返す関数だろ?
n != 0 だとその意図がここだけからでは見てとれない。
0974デフォルトの名無しさん
2007/05/06(日) 00:54:040975デフォルトの名無しさん
2007/05/06(日) 01:08:430976デフォルトの名無しさん
2007/05/06(日) 01:13:140977デフォルトの名無しさん
2007/05/06(日) 01:29:550978デフォルトの名無しさん
2007/05/06(日) 01:40:36return !!n;とかやればいいのかな?
0979デフォルトの名無しさん
2007/05/06(日) 01:40:42別にダメってことはないだろ。n が 1 じゃない時に false になるってだけで。
0980デフォルトの名無しさん
2007/05/06(日) 01:52:07true キーワードを数値の 1 の代わりとして使うのはナシだろ。
0981デフォルトの名無しさん
2007/05/06(日) 02:02:59intからboolは情報が落ちるからか手元のコンパイラは警告レベル上げると警告してくれてる。
C++でも if ( ... ) の成立条件はあくまでも0以外のときなんだっけ?
0以外かtrueとはなってないよな?
0982デフォルトの名無しさん
2007/05/06(日) 02:12:54じゃないと互換性が。
0983デフォルトの名無しさん
2007/05/06(日) 06:17:45bool isspace(char c) {
// _ismbcspaceはcが空白文字のときに0を返す
return _ismbcspace(c) == 0;
}
になってた
これならおk?
0984デフォルトの名無しさん
2007/05/06(日) 06:19:090985デフォルトの名無しさん
2007/05/06(日) 08:03:050986デフォルトの名無しさん
2007/05/06(日) 08:08:00boost::enable_if<> を使えばできるけど、以下 >>985
0987デフォルトの名無しさん
2007/05/06(日) 08:16:42何を心配しているのかわからん。
0988デフォルトの名無しさん
2007/05/06(日) 08:44:53んなもん関数作ったヤツに言えよ
ifは条件式全体で真偽を表すもんだが
おまえほんとに解ってるか?w
0989デフォルトの名無しさん
2007/05/06(日) 09:00:41宣言と定義で別々のファイルに書くようにして
定義側のでで明示的でインスタンス化するときに、doubleとfloatの分だけ書けば
例えばint型等で使おうとしたときにリンカがゴルァしてくれるから
そういうのでよければ
0990デフォルトの名無しさん
2007/05/06(日) 10:50:09全部そんな事してたら template の旨味が少ない。
コンストラクタだけそうしたらいいと思うよ。
0991デフォルトの名無しさん
2007/05/06(日) 11:01:350992デフォルトの名無しさん
2007/05/06(日) 11:25:240993デフォルトの名無しさん
2007/05/06(日) 11:50:390994デフォルトの名無しさん
2007/05/06(日) 12:02:300995デフォルトの名無しさん
2007/05/06(日) 14:22:31因みにポインタとかサッパリです
#include <stdio.h>
int main (void) {
char tall[10],weight[10];
float bmi = *tall / *weight;
printf ("身長を入力して下さい。\n");
gets (tall);
printf ("体重を入力して下さい。\n");
gets (weight);
printf ("%.2f\n",bmi);
return 0;
}
0996デフォルトの名無しさん
2007/05/06(日) 14:26:49BMIの求め方も変だし
0997デフォルトの名無しさん
2007/05/06(日) 14:31:34この時点で論外
もっと根本の勉強をちゃんとしてからで直して来い
0998デフォルトの名無しさん
2007/05/06(日) 14:32:34#include <stdio.h>
int main (void) {
float height, weight, bmi;
printf("身長を入力して下さい。\n");
scanf("%f", &height);
printf("体重を入力して下さい。\n");
scanf("%f", &weight);
bmi = weight / height / height;
printf ("%.2f\n", bmi);
return 0;
}
0999デフォルトの名無しさん
2007/05/06(日) 14:32:46ポインタ以前に計算は入力がすんでからな
エラー処理はおいといて、getsで文字列取り込んだらatof()で数字にして計算だ。
bmi = atof(tall) / atof(weight);
とかやればいい。
あと、atof()はstdlib.h なのでこれもインクルード
1000デフォルトの名無しさん
2007/05/06(日) 14:42:0110011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。