■過去ログ置き場に戻る■
1-
前250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室 Part4
751
名前:
デフォルトの名無しさん
:02/02/04 18:27
>>747
プログラム終了と同時にメモリは解放されます。
752
名前:
デフォルトの名無しさん
:02/02/07 00:28
boostはここでいいんでしょうか?
boost::threadはPOSIX環境ではPthreadのラッパーとして
機能するみたいですけどLinuxとかSolarisの上ならこれで
SMPで動いてしまうんでしょうか?
これが使えそうならPthreadインターフェイスは捨てたいのですが・・・
# Boostって日本語の解説は少ないですね
753
名前:
デフォルトの名無しさん
:02/02/07 01:02
>>752
libs/src/thread.cpp 見ると pthread_create() してるから、使ってる POSIX Thread
ライブラリが SMP 対応なら、問題なく SMP で動くと思われ。
754
名前:
デフォルトの名無しさん
:02/02/07 01:52
ショボイ質問。
deleteって配列消すとき、[ ]付けても付けなくてもどっちでもいいんだっけ?
それは何次でもかわらん?
755
名前:
デフォルトの名無しさん
:02/02/07 01:54
>>754
よくない。
756
名前:
またりろ
:02/02/07 01:59
wsprintf(str, "%d", strlen(ccc));
MessageBox(hWnd, str, "", MB_OK);//////42
wsprintf(str, "%d", strlen(str));
MessageBox(hWnd, str, "", MB_OK);//////48
if(strcmp(ccc,str))MessageBox(hWnd, "同じ", "", MB_OK);
同じっていうメッセージボックスは表示されるから
cccとstrは等しい。でも、strlenの結果が違う。
どうしてなんだろう?
757
名前:
754
:02/02/07 02:00
>>755
素早いレス、どうも。
ついでに
(*a)[5][5] 消す場合、
delete[] a;
で良い?
758
名前:
またりろ
:02/02/07 02:01
あ、分かった。スマソ。
759
名前:
またりろ
:02/02/07 02:06
やっぱり分からん。
wsprintf(buf, "%d", strlen(ccc));
MessageBox(hWnd, buf, "", MB_OK);////// buf=42
wsprintf(buf, "%d", strlen(ptr));
MessageBox(hWnd, buf, "", MB_OK);////// buf=48
if(strcmp(ccc,ptr))MessageBox(hWnd, "同じ", "", MB_OK);
同じっていうメッセージボックスは表示されるから
cccとptrは等しい。でも、strlenの結果が違う。
どうしてなんだろう?
760
名前:
デフォルトの名無しさん
:02/02/07 02:08
>759
strcmp()は比較した文字列が等しいとき0を返す。
だから表示されたということはif()で0以外が評価されてる。
761
名前:
デフォルトの名無しさん
:02/02/07 02:12
(*a)[5][5] 消す場合、
delete[] a;
aは配列へのポインタだろ? 配列じゃなくて…
762
名前:
またりろ
:02/02/07 02:12
うはっ。ありがとう。そうそう、異なってれば0以外でしたね。
763
名前:
ドンキホーテかな、おれって?
:02/02/07 21:57
試食版で、ms-DOSベースのアンチウイルスソフトって作れますか?
JAVAじゃないと無理ですか?
小一時間の説教覚悟してますんで、出来るか出来ないかをまず回答ください。
764
名前:
デフォルトの名無しさん
:02/02/07 22:19
こんばんは。初めまして。
C++Builderのexeをスタートアップに登録して
起動時にある処理を行いたいのですがその時フォームを非表示
にして処理を行いたいのです。
で,下記の様に記述するとフォームを非表示にできる事は
解ったのですが最初の処理をどこに記述したら良いかよく
解らないのです。
VBの場合だとSub Main()ルーチンに記述するのですが・・・
Formのshowイベントとかはまずいし・・・・・・
参考になる物があったら教えて下さい(T__T)
Application->ShowMainForm = false;
765
名前:
デフォルトの名無しさん
:02/02/07 23:12
>764
だからそれぞれのプラットフォームのスレ逝けっつーの
766
名前:
デフォルトの名無しさん
:02/02/07 23:16
>>765
これだな。
新C++Builder相談室
http://pc.2ch.net/test/read.cgi/tech/997074601/
767
名前:
デフォルトの名無しさん
:02/02/08 08:26
C++では、「Cでchar*型をつかっていたような場所では
string型にすべておきかえられる。また、そのほうが効率がいい」
って、どっかの本にかいてあったんだけど、
すべておきかえられるもの?
char*型がいらないってことではないよね?
768
名前:
デフォルトの名無しさん
:02/02/08 08:52
>>767
corbaのstringってcharにマッピングされてなかったっけ?
というかもし今でもそうなら仕様を変えた方がいいような、、、
769
名前:
デフォルトの名無しさん
:02/02/08 20:57
すべてなわけはないけど、文字列を扱ってる箇所なら置き換えて良いのでわ。
効率に関してはノーコメント。
770
名前:
デフォルトの名無しさん
:02/02/08 21:20
>>769
そして可変長バッファは vector で置き換え。
効率は、それまで const char * で渡してきた部分を const string& にすれば、
いずれにせよポインタひとつ分で受け渡せるから問題ない。strdup() の代わり
にコピーコンストラクタってのも悪いトレードオフじゃないし。
気をつけないといけないのは + 演算子なんかを多用して、ソースコードには
直接見えない一時オブジェクトをたくさん作ってしまうことかな。C++ だと、何
気ない 1 ステートメントが、大量のオブジェクト生成/破棄を行うことがある
ので。
771
名前:
デフォルトの名無しさん
:02/02/09 04:52
ねぇ、こういう使いかたってできないの?
class Command{
};
class CommandA:public Command{};
class CommandB:public Command{};
struct TestData{
TCHAR *com;
Command *c;
};
TestData test[]={
{"func1",new CommandA}
};
関数ポインタを使う代わりにコマンドオブジェクトをテーブルにもたせろ
って言われたんだけど、こういうことじゃないのかなぁ?
こんぱいるとおらない。
772
名前:
デフォルトの名無しさん
:02/02/09 05:05
>>771
俺はそのソースそのままコピペで通るんだけど。
773
名前:
771
:02/02/09 05:19
>>772
おおぉ、
new CommandA()
にしたら、とおった。
そのままじゃむりっぽい。
ちなみに、うちのコンパイラはVC++6です。
ご協力サンクス
774
名前:
デフォルトの名無しさん
:02/02/09 14:59
クラスの中でメンバ関数
void abc::hoge(void) {}
を定義して、クラスの外で
void hoge(void) {}
を定義した場合、
クラスの中でhoge()を読んだ場合、メンバ関数が優先して呼ばれるのでしょうか?
そうならば、クラス内でグローバルな関数を呼びたい場合はどうするのでしょうか?
775
名前:
デフォルトの名無しさん
:02/02/09 15:05
::hoge()
776
名前:
デフォルトの名無しさん
:02/02/09 15:08
>>775
できました。ありがとうございます。
777
名前:
デフォルトの名無しさん
:02/02/09 15:52
さまざまなファイルに頻繁にアクセスするプログラムを作っているんですが、
ファイルアクセスに関するエラー処理ってほんとにいるんですかねぇ?
openに失敗した場合の処理はともかくとして、
一旦openに成功した後ではファイルに書き込んでるときのエラー処理とかって
現実におき得ないような気がするんですが・・・
一行書き込む毎に、いちいちエラー処理って入れなきゃならないものなんでしょうか?
778
名前:
デフォルトの名無しさん
:02/02/09 15:55
メディアが満杯とか
779
名前:
デフォルトの名無しさん
:02/02/09 15:56
じゃあ かかなきゃえーやんかー
780
名前:
デフォルトの名無しさん
:02/02/09 15:57
とりあえず空き不足
781
名前:
デフォルトの名無しさん
:02/02/09 15:57
可能性はある。
ディスクフルとか、
ネットワークファイルシステムでサーバだのルータが落ちたとか、
実はpipeで相手のプロセスが終了してEPIPEとか。
782
名前:
デフォルトの名無しさん
:02/02/09 15:57
鬱氏
783
名前:
777
:02/02/09 16:03
ふむ。ディスクフル、ネットワークドライブ・・・
ありそうですねぇ。
でもそしたら、たとえば、
ofsFile << "hogehoge" << endl;
if(!ofsFile.fail())
{
return false;
}
ofsFile << "FunyaFunya" << endl;
if(!ofsFile.fail())
{
return false;
}
てな感じで毎行毎行入れてかなきゃならないでしょうか?
とても現実的な話ではないような気がするんですが。
784
名前:
デフォルトの名無しさん
:02/02/09 16:04
>>783
思いっきりシステム依存。他行け
785
名前:
デフォルトの名無しさん
:02/02/09 16:05
いちいち調べたくないときはラッパー作って例外投げればいいんじゃない?
786
名前:
777
:02/02/09 16:13
>>785
こんなかんじ?
CMyFile::Write(std::ofstream& ofsFile, string strLine)
{
ofsFile << "hogehoge" << endl;
if(!ofsFile.fail())
{
throw "File Write Error";
}
}
でもひょっとしてこれの同じものを、ofstreamそのものの例外でもってたりします?
787
名前:
デフォルトの名無しさん
:02/02/09 16:21
>>777
C++ なんだから、例外で拾うようにすれば、と答えとく。
788
名前:
デフォルトの名無しさん
:02/02/09 16:22
>>786
ios_base あたりに、書き込み失敗したら例外投げるようにフラグを立てるメソッドが
あったと思うが
789
名前:
デフォルトの名無しさん
:02/02/09 16:28
>> 783
> とても現実的な話ではないような気がするんですが。
あたりまえなんじゃないの?
フロッピーに書き込みにいって途中で抜いてみるとか、
手元のアプリでためしてみれば?
790
名前:
777
:02/02/09 18:12
>>788
できましたですぅ。ありがとうございますです。
以下サンプル(Zはネットワークドライブ):
openとoutの間でネットワークケーブルを引っこ抜くと、
bbb.txtは何事もなかったかのように終了し、
aaa.txtは例外を発生します。(failbitも立てるとopen時に例外となります。)
try {
std::ofstream ofsbFile("z:\\bbb.txt");
Sleep(10000);
ofsbFile << "bbb" << std::endl;
std::ofstream ofsFile("z:\\aaa.txt");
// ofsFile.exceptions(ios_base::badbit | ios_base::failbit);
ofsFile.exceptions(ios_base::badbit);
Sleep(10000);
ofsFile << "aaa" << std::endl;
}
catch(ios_base::failure& exc)
{
cerr << exc.what() << endl;
}
791
名前:
デフォルトの名無しさん
:02/02/09 22:20
ベクトルクラスを作りたいのですが
クラスに複数のfloatがあるとします
class Vector4
{
public:
....
public:
float x, y, z, w;
};
この時にoperator[]を次のように記述する事はメモリレイアウト上
問題はないのでしょうか?処理系依存でしょうか?
float& Vector::operator [](int i)
{
float *f = &x;
return f[i];
}
792
名前:
デフォルトの名無しさん
:02/02/09 22:21
上記Vector4::operator []・・・の間違いです
793
名前:
デフォルトの名無しさん
:02/02/09 22:37
i=0以外は、未定義のはず。なぜ、
switch(i){
case 0:return x;
case 1:return y;
case 2:return z;
case 3:return w;
}
throw RangeException;
と素直にかかないのでしょうか?
794
名前:
デフォルトの名無しさん
:02/02/09 22:52
>>793
やっぱりそうなんですか?
最終的にこれをメンバにした4x4の行列クラスを作りたいのですが
逆行列を求める時などにi, jでアクセスできるとforが使えるから
書きやすいと思うのです
これをやるには一時的に配列に入れるしかないかな?
795
名前:
デフォルトの名無しさん
:02/02/09 23:19
>これをやるには一時的に配列に入れるしかないかな?
つか、793で書いたのは、まさしくfloat& operator [](int i)の
コードなんだが‥‥
796
名前:
デフォルトの名無しさん
:02/02/09 23:27
>>795
あそうか
すいませんアホデシタ・・・
自分で割り振ってやれば良いんですね
これで逝ってみます有難うございました
797
名前:
デフォルトの名無しさん
:02/02/09 23:30
>794
union {
struct { float x, y, z, w; };;
float f[4];
};
とでもしとくとか。
798
名前:
デフォルトの名無しさん
:02/02/09 23:48
>797
それってstructのパディングの関係で上手く逝かない事無い?
799
名前:
798
:02/02/09 23:51
悪い,float だったらならないか・・・本当?
実はその辺の知識漏れ怪しいわ.スマソ
800
名前:
デフォルトの名無しさん
:02/02/09 23:58
たとえfloatが32ビットでアラインメントが64ビットだとしても、float2個で、64ビット境界またがないから、
アラインメントの問題は無いでしょ。
パディングは通常、アラインメントをまたがないと、発生しないのよ。
801
名前:
デフォルトの名無しさん
:02/02/09 23:59
>>791
class Vector4
{
private:
float f[4];
public:
float& x() {return f[0];}
float x() const {return f[0];}
float& y() {return f[1];}
float y() const {return f[1];}
...
};
としそうなもんだな。()が邪魔っけだが。
802
名前:
デフォルトの名無しさん
:02/02/10 00:06
float &x = f[0], &y = f[1], &z = f[2], &w = f[3];
で逝けるかもよ。
803
名前:
791
:02/02/10 00:38
みなさん色々有難うございます
>>801
も考えたんですが仰るように()がちと邪魔なのと
i, jアクセスはあまり頻繁には使わないのとで
>>793
の方法で逝っていますがどれが一番一般的でしょうか?
別にどれがというのは無いかな?
804
名前:
デフォルトの名無しさん
:02/02/10 00:57
俺は
>>797
の方法取ってる。
805
名前:
デフォルトの名無しさん
:02/02/10 01:01
>>804
だが、そもそも union のメモリ配置自体も実装依存じゃない? まぁ、大抵の環境で
は問題は発生しないだろうから、そこまで規格にこだわらなくても良いけど。
いちおう assert(&x == &f[0] && &w == &f[3]); ぐらい入れておくのが吉か。
806
名前:
デフォルトの名無しさん
:02/02/10 01:01
>>797
でええんちゃう?
安全性をとるなら
>>793
だと思うけど。
807
名前:
デフォルトの名無しさん
:02/02/10 21:25
>>791
こんなのはどう
class Vector4
{
float f[4];
public:
float &x,&y,&z,&w;
Vector4() : x(f[0]), y(f[1]), z(f[2]), w(f[3]) {}
float& operator[](int i){return f[i];}
const operator[](int i)const{return f[i];}
};
808
名前:
807
:02/02/10 21:28
ちょい間違い
const float& operator[](int i)const{return f[i];}
809
名前:
デフォルトの名無しさん
:02/02/10 21:29
>>807
それだと Vector4 のサイズが大きくなるから、ちょっと嫌かと。
810
名前:
デフォルトの名無しさん
:02/02/10 22:35
皆さん set/multiset ってどーゆー時に使います?
シーケンスコンテナとか map/multimap, hash とかは
使い道はだいたい思い浮かぶんですけど,set/multiset
の使い道ってイマイチ思い浮かばないんですが…
811
名前:
デフォルトの名無しさん
:02/02/10 22:45
思い浮かばないなら使うなって。
使いたいと思ったやつが使うんだろ。
812
名前:
デフォルトの名無しさん
:02/02/10 23:15
>>810
逐次入力されていく値をソートしたいとき。
813
名前:
810
:02/02/10 23:26
>812
なるほど,そーゆー時は確かにsetを使う価値はありますね.ふむふむ
>811
まぁそー言わんといて下さいよ.
見聞を少しでも広めようというだけなので…
814
名前:
デフォルトの名無しさん
:02/02/11 02:37
ofstreamデフォルトの<<演算子を行う前に独自の処理を入れたいと思い、
ofstreamを継承したクラスを作ってます。
<<operator引数の全パターンを網羅させるのは面倒なので、
以下のように安直な解決策を計ってみました。
よくわからないのがソース中の@、A、Bです。
class CMyFile : public ofstream
{
public:
// @ 全引数のパターンを一気に受けたい。
ostream& operator<<(void* input);
};
ostream& CMyFile::operator <<(void *input)
{
// 独自の処理
cout << input << std::endl;
// 親の処理
// A 親の<<を呼び出したい。
parent? << input; // ???
// B 何を返すの?
return ???; // ???
}
815
名前:
デフォルトの名無しさん
:02/02/11 02:57
>814
return ofstream::operator<<(input);
ぢゃマズいかのぅ?
816
名前:
815
:02/02/11 02:58
あぁ,input って void* なのか.
うーん,そりは・・・任せたぞ!他の人!!
817
名前:
デフォルトの名無しさん
:02/02/11 03:22
C++で
int ** foo= new int[10][10];
みたいなことってできないんですか?
818
名前:
デフォルトの名無しさん
:02/02/11 03:27
>>817
出来ね。
foo[1][1]はどこをさすんだ?
new int[10][10]とnew int[9][9]で別のアドレスをさす必要があるのにint**からじゃわからんだろ。
819
名前:
デフォルトの名無しさん
:02/02/11 03:33
>>814
template 関数の出番じゃない? 詳細はともかく、こんな感じで。
template <typename T> ostream& (ostream& os, T& input)
820
名前:
デフォルトの名無しさん
:02/02/11 03:34
二次元配列を動的に確保するにはどうすれば良いのでしょう
821
名前:
デフォルトの名無しさん
:02/02/11 03:50
>>818
なにいってんのかわかんねーぞ
822
名前:
突然すみません・・・
:02/02/11 04:13
error LNK2001: unresolved external symbol "void __cdecl fileout(char *)" (?fileout@@YAXPAD@Z)
ってエラーどうやったらいいですか???
ちなみに初心者なんで、やさしくお願いします。
823
名前:
初学者
:02/02/11 04:53
質問です。
C++クラスメンバ関数ないで宣言したstaticな変数ってCのそれを同じと考えて良いですか?
つまり
MYSTRUCT *foo::boo()
{
static MYSTRUCT mystruct;
処理
return &mystruct;
}
として呼び出し側からmystructを使うのは可能ですか?
でもこんなやり方するのかな?
こういう場合は皆さんどうします?構造体をそのまま返すと構造体が大きい場合負荷がかかりますよねぇ。
かといってポインタを返すと実体の生存時間が気になりますよね。
staticメンバにしてみてもべつのに上書きされる可能性があるし。
824
名前:
デフォルトの名無しさん
:02/02/11 05:07
>>822
__cdecl の fileout(char *)の実体がないらしい探して
>>823
よくわからんけど、俺ならメンバ変数にしてそれのポインタを返すな。
属性も指定できるし。
825
名前:
デフォルトの名無しさん
:02/02/11 06:03
>823
sigletonの安直な実装としては便利。
826
名前:
デフォルトの名無しさん
:02/02/11 08:32
>>823
可能。ただ、その手で作ったオブジェクトのデストラクトの順番に
気ぃつけるよーに。ただデータ入れただけの構造体なら大丈夫だと思うけど。
> かといってポインタを返すと実体の生存時間が気になりますよね。
std::auto_ptr で返してしまうとか。
827
名前:
初学者
:02/02/11 10:05
>>824-826
ありがとうございます。よくわかりました。ではでは。
828
名前:
デフォルトの名無しさん
:02/02/11 13:22
newやdeleteのオーバーロードって
よくやりますか?
829
名前:
814
:02/02/11 19:59
>>815
>>819
ども。
お二人の意見を参考につくってみたんですが、リンクエラーが・・・
<テンプレートを使ったメソッド>
template <typename T> ofstream& CMyFile::operator<<(T input)
{
return ofstream::operator <<(T input);
}
<使用例>
CMyFile cMyFile("XXXX.txt");
cMyFile.readOpen();
int a=1;
cMyFile << a ;
<リンクエラー>
TestProj.obj : error LNK2001:
外部シンボル ""public: class std::basic_ofstream<char,struct std::char_traits<char> > &
__thiscall CMyFile::operator<<(int)"
(??6CMyFile@@QAEAAV?$basic_ofstream@DU?$char_traits@D@std@@@std@@H@Z)" は未解決です
オペレータでのテンプレートの使い方がよくわからんです。
830
名前:
815
:02/02/11 21:23
>814
=829
うーむ g++ 3.0.3 では
template <typename T>
ofstream& CMyFile::operator<<(T input)
{
ofstream::operator<<(input);
return *this;
}
とすれば逝ける模様.
なんでそのまま return 出来ないんぢゃろう・・・
誰か教えてプリーズ
831
名前:
デフォルトの名無しさん
:02/02/12 00:05
誰か教えてケロ。
template<class T>class A
{
void func(void);
};
void A::func(void){}
見たいに外で関数を定義したいのですがどうしたら良いのでしょうか。
832
名前:
デフォルトの名無しさん
:02/02/12 00:08
template<class T>void A::func(void){}
833
名前:
デフォルトの名無しさん
:02/02/12 00:15
ん?
template<class T>void A<T>::func(void){}
じゃなかったっけ?
違ったらスマソ。
834
名前:
デフォルトの名無しさん
:02/02/12 00:18
>>833
そうだった。スマソ。
835
名前:
831
:02/02/12 00:25
>>832-834
おお!ありがとうございます。
今まで、その方法が分からなかったもので。
助かりました。
836
名前:
デフォルトの名無しさん
:02/02/12 17:20
main(){
int * num = new int[1000];
delete num;
}
VC6のコンパイラは配列をdeleteするとき、
delete [] numとしなくてもいいのか?
実行してみても、
Detected memory leaks!
が表示されないだけれども…
837
名前:
デフォルトの名無しさん
:02/02/12 17:28
VC6のコンパイラで、全てのリークが、検出されるというわけではない。
#つか、detected leakなんて報告するのは、ライブラリでわ‥‥
838
名前:
デフォルトの名無しさん
:02/02/12 17:30
>>836
intやcharなどの組み込み型なら問題ない模様。
クラスや構造体はデストラクタが呼ばれないのでだめ。
839
名前:
デフォルトの名無しさん
:02/02/12 18:01
>>837
>>838
レスありがとうございます。
www.codeguru.com/richedit/SyntaxColorizer.html
実は、codeguruのCSyntaxColorizerクラスを実行したら、
~CSyntaxColorizer()で落ちるから、
何だろうと思ったら、配列のdeleteに一つも[]がついてないのよ。
それはunsigned shortの配列だったけど、
deleteに[]つけたら解決しました。
"Comments:"で誰も言及してないから、
マジ焦ったよ。
840
名前:
デフォルトの名無しさん
:02/02/12 20:13
>>836
VC6 だと delete, delete[] は同じ動作をする。(だからといって、これに依存した
コード書いちゃダメだよ)
841
名前:
814
:02/02/13 00:32
>>830
メンバー関数をtemplateで作るときは、宣言部に直接本体を埋め込まないと
うまくいかないみたいですね。
CMyFile : ofstream public
{
template <typename T> bool write(T input)
{
cout << input;
return true;
}
};
それから、よく考えたらoperator<<をオーバーライドしてしまってるので、
望みの動作させるためには、friend関数の力を借りねばならないみたいです・・・・・・・・
842
名前:
デフォルトの名無しさん
:02/02/13 01:49
void func(void){cout<<"Hello"<<endl;}
template<class T1,class T2>
T1(*FUNC)(T2)=&(void func(void));
これなんでエラーになるんでしょう?
どこか間違えていますか??
843
名前:
デフォルトの名無しさん
:02/02/13 01:54
テンプレートは、関数かクラスに対してしか使えないきがするけど‥‥
844
名前:
デフォルトの名無しさん
:02/02/13 01:55
>>842
&(void func(void)) じゃなくて &func だろ。
845
名前:
デフォルトの名無しさん
:02/02/13 02:00
>>844
いいえ。これはエラーにはなっていません。
846
名前:
デフォルトの名無しさん
:02/02/13 02:00
>>843
確かに。しかし VC6 だと、こんなコードもコンパイル通るな(実行すると落ちるけど)。
もしかしたら、昔は OK だったのかも。
void func(int) {}
template<class T1,class T2> T1 (*f)(T2) = &func;
int
main(void)
{
(*f)(1);
return 0;
}
847
名前:
デフォルトの名無しさん
:02/02/13 10:05
>>840
> VC6 だと delete, delete[] は同じ動作をする
マジですか? VC5 だと delete では配列の解放をしてくれなかったと思ったけど。
848
名前:
デフォルトの名無しさん
:02/02/13 10:21
class Ca
{
public:
~Ca(){cout << "deleted." << endl;}
};
int main(int argc, char* argv[])
{
Ca* pca = new Ca[16];
delete pca;
return 0;
}
deleteとdelete[]でちゃんと動作違うけど。@VC6SP5
849
名前:
デフォルトの名無しさん
:02/02/13 14:05
>>847
ごめん、勘違いだわ。
850
名前:
デフォルトの名無しさん
:02/02/13 14:20
#include <iostream>
using namespase std
class<a,b>
int main(void)
double abu;
omaemona-
851
名前:
超初心者
:02/02/13 16:58
FreeBSDでC++
勉強して1時間目です。
今、hello.ccというファイルに、
#include <iostream>
int main()
{
std::cout << "Hello, world!\n";
}
と書き、
$ gcc hello.cc
としたら、
$ gcc hello.cc
/tmp/ccGQTMfz.o: In function `main':
/tmp/ccGQTMfz.o(.text+0xf): undefined reference to `cout'
/tmp/ccGQTMfz.o(.text+0x14): undefined reference to `ostream::operator<<(char const *)'
となりました。
なぜうまくいかないのか説明してください。
852
名前:
デフォルトの名無しさん
:02/02/13 17:16
> なぜうまくいかないのか説明してください。
って,きっとネタなんだろうな.まぁマジレスしとくと,
使うコマンドは gcc じゃなくって g++ にしろ
ほんでよ,
http://www.freeml.com/message/cppll@freeml.com/0001221
でなんか面白い事やってる
853
名前:
852
:02/02/13 17:18
最初の三行は
>851
へのレスね.
まぁ見りゃ分かると思うけど.
854
名前:
超初心者
:02/02/13 17:38
>>852
gccとg++
ってどうちがうの?
855
名前:
超初心者
:02/02/13 17:48
FreeBSD で XEmacs から C++ をコンパイル,実行する方法
を教えて.
[ESC]X+compile
ってやってからどーすんの?
856
名前:
デフォルトの名無しさん
:02/02/13 17:52
それぐらい自分でしらべろよ。
なんでもかんでも
おしえて君だと、あとでこまるぞ。
857
名前:
超初心者
:02/02/13 17:54
最初が一番わからんのよ。
有る程度自分の足で立てるまで教えてよ。
858
名前:
デフォルトの名無しさん
:02/02/13 18:36
>>857
なんでキミのために無料奉仕しなきゃならんのだ?
859
名前:
デフォルトの名無しさん
:02/02/13 18:47
>854
とか
>857
とか、どう見ても自分の足で立つ意志のある奴の吐くセリフじゃないな(w
Emacs使ってるなら、
M-x info
で
>854
も
>855
も解決する。infoの使い方がわからなかったらinfo読め。以上。
860
名前:
デフォルトの名無しさん
:02/02/13 19:52
delete delete[]ですが、組み込み型ならOKなのはVC6だけ
でしょうか?他の環境ではNGですか?
861
名前:
デフォルトの名無しさん
:02/02/13 19:54
?
862
名前:
860
:02/02/13 19:59
>>838
へのレスでした。
わかりにくくてスマソ
863
名前:
デフォルトの名無しさん
:02/02/13 20:04
>>860
VC6でもたまたまOKなだけだと思った方がいい。
現実にはほとんどの処理系でもOKだけど、悪癖は早いうちに矯正することを
お勧めする。
864
名前:
860
:02/02/13 20:12
>>863
ありがとう!
ちょうどそのネタで上司とちょっと揉めてました(汗)。
上司が [] つけない人なんです。
865
名前:
デフォルトの名無しさん
:02/02/13 20:14
>>863
スタイルの問題をいうなら、そもそも delete[] を陽に呼び出すようなプログラムを
書くな、という気がするが。std::vector や boost::scoped_array を使うことを考えた
方が良い。
866
名前:
852
:02/02/13 20:37
>854
,855
しょーがねーな.まぁ最初は確かにどこから手付けていいか分からんからな.
gcc は C コンパイラ, g++ は C++ コンパイラだと思っとけ.
Emacs の M-X compile は実質上 make を起動するだけだから,make について
お勉強するべし.make についてのサイトは探せば色々見付かるから自分で探
すべし.
867
名前:
デフォルトの名無しさん
:02/02/13 22:10
virtualキーワードについて質問です。
class A
{
virtual class B
{
};
};
このvirtual付けたBってどういう扱いになるんでしょうか?
付けたときと付けない時の違いが分からないもので。
868
名前:
デフォルトの名無しさん
:02/02/13 22:19
>>867
virtual class B なんて定義は C++ の規格にはないぞ。
virtual を使えるのは
1. メンバ関数
2. 継承
いずれかのみだ。
869
名前:
デフォルトの名無しさん
:02/02/13 22:43
>>868
それが何故か出来るんですよ。
(一応、バージョンは古いけどBCB、VC、GCCでは確認済み)
C++ の規格に無いなら気にしなくていいなっと。
どうもありがと。
870
名前:
デフォルトの名無しさん
:02/02/13 22:50
エディットボックス上にデスクトップのファイルをドラッグ&ドロップして
エディットボックスにそのドラッグ&ドロップしたファイルのパスを表示してやりたいのですが
どうやったらいいでしょうか?
871
名前:
デフォルトの名無しさん
:02/02/13 22:52
>>869
最近の gcc だと怒られる。
% g++ test.cpp
test.cpp:4: `virtual' can only be specified for functions
test.cpp:4: virtual outside class declaration
872
名前:
デフォルトの名無しさん
:02/02/13 23:07
dragqueryfileかなんかで
ファイル名とかとれるでしょ?
873
名前:
デフォルトの名無しさん
:02/02/13 23:27
>870
プラットフォーム依存の質問はそれぞれのスレへ逝け.
ここはスレ違いだ.
874
名前:
791
:02/02/14 01:10
>>866
アフォですか?
gccはフロントエンドだから.ccなファイルならC++コードのコンパイルが通る
>>851
のエラーメッセージを良く見ろリンカのエラーだろが
正解は
$gcc hello.cc -lstdc++
だ
875
名前:
!866
:02/02/14 01:29
>>874
だから「思っとけ」なんだろ。
なんで、わざわざ煽るかなぁ。(カルシウムが足りてない?)
876
名前:
デフォルトの名無しさん
:02/02/14 02:12
>>874
名前を消し忘れたな。
791とのギャップにワラタ
877
名前:
デフォルトの名無しさん
:02/02/14 02:27
漏れもワラタ
>>791
>>874
を晒しage
878
名前:
デフォルトの名無しさん
:02/02/14 19:20
private継承をコンポジション
どうやってつかいわけてる?
879
名前:
デフォルトの名無しさん
:02/02/14 19:20
を→と
880
名前:
デフォルトの名無しさん
:02/02/14 22:48
void func(void){}
template<typename T>T* t=func;
((void(*)(void))t)();
これは何で落ちるんでしょう?テンプレートはこのような使い方を
してはいけないのでしょうか?
881
名前:
デフォルトの名無しさん
:02/02/14 23:30
template は関数かクラスだけ。
# …って、「落ちる」??
882
名前:
デフォルトの名無しさん
:02/02/15 01:00
>>878
private 継承なんて使ったことないなあ。つか、なるべく継承より
コンポジションを使うようにしてるよ。継承のレベルが深くなると
後の保守が大変なんで。
883
名前:
デフォルトの名無しさん
:02/02/15 07:25
>>880
そんな使い方出来ることすら知らなんだ。
operatorを定義しているのか?
多分それできるのってVCだけでしょ?
884
名前:
デフォルトの名無しさん
:02/02/15 11:09
>>880
ネタだとは思うが、もしそれが可能だとするなら t をキャストしているのは
無意味。むしろ t<void(*)(void)>() にすべきかと。
885
名前:
デフォルトの名無しさん
:02/02/15 11:18
template<typename T>T* t;
int main()
{t=func; }
ってやると、
'void(*)(int)'から' *'に変換できないとかすごいことを云われるYO!
これこそホントのvoidポインタなのかな(ワラ
886
名前:
デフォルトの名無しさん
:02/02/15 18:14
どんな単位でクラスをsoやdllに分けるのがいいのか
そういったことを解説してる本やサイトを知ってる人がいたら教えて下さい。
887
名前:
デフォルトの名無しさん
:02/02/15 22:49
class{
}
クラスはヘッダファイルに書くものですか?
888
名前:
デフォルトの名無しさん
:02/02/15 23:59
>>887
別に *.cpp の方に書いても良い。
俺は外部に公開したくないクラスについては *.cpp に書いてる。
// 外部に公開するのでヘッダに書く
class Foo {
struct Impl;
const std::auto_ptr<Impl> pImpl;
public:
...
};
// 実装は外部に公開しないので *.cpp に書く
struct Foo::Impl {
// いろいろ
};
889
名前:
デフォルトの名無しさん
:02/02/16 00:28
>>888
勉強になりました。
thanx!!
890
名前:
デフォルトの名無しさん
:02/02/16 01:06
template<typename T>class TCA{};
template<typename U>class TCB{
public:
friend template<typename A>class TCA<A>;
};
何故エラーに・・・?普通のfrindなら通るのですが・・・。
891
名前:
デフォルトの名無しさん
:02/02/16 01:15
A-T&T ベル研究所 所長:デニス・M・リッチィ博士
892
名前:
デフォルトの名無しさん
:02/02/16 01:46
>>890
Aのタイプは誰が決めるの?
893
名前:
デフォルトの名無しさん
:02/02/16 01:49
//皆で分担してソースを書くと
const int MIN = 0;
const int MAX = 9;
#include <iostream>
struct A {
int hoge(int i) {//A君が値の範囲チェック
if (i > MIN && i < MAX) return i * 3; return i;
}
};
struct B {
int hoge(int i) {//B君も値の範囲チェック
struct A a; if (i > MIN && i < MAX) return a.hoge(i); return i;
}
};
void main()
{
B b;
int i, num = 8;
if (num > MIN && num < MAX)//メイン君も値の範囲チェック
i = b.hoge(num);
else
i = num;
std::cout << i << std::endl;
}
//のような事が頻出するのですが、そもそも誰が値の範囲チェック
//をするべきとか、決まりはあるのでしょうか?
894
名前:
デフォルトの名無しさん
:02/02/16 01:57
そんなだからC++って遅いんだ!あ〜納得!
895
名前:
デフォルトの名無しさん
:02/02/16 02:09
>>893
そりゃ、仕様で決めるだろ。
assert() はあらゆる場所にばら撒いておくが、正常パスの値チェックは仕様で決めた
関数でしかやらない。
896
名前:
デフォルトの名無しさん
:02/02/16 02:23
>>892
・・・成る程。そりゃそうですよね。型が決定しなけりゃエラーになりますよね。
897
名前:
デフォルトの名無しさん
:02/02/16 02:54
>893
うちならA・Bの側では一切値のチェックなんてしないよ!
食わせる前にチェックしろと言う仕様。
こう決まってるほうが都合がよくない?
898
名前:
デフォルトの名無しさん
:02/02/16 03:40
え?
>>893
の場合ではmain内でチェックする方がいいの?
899
名前:
初心者
:02/02/16 03:47
template<class Type>...
この<>のにはclassとtypenameどちらを使うのが主流なんですか?
本にはclassとあって、さっき見たサイトだとtypenameと書いてありました。
900
名前:
デフォルトの名無しさん
:02/02/16 03:54
ANSI/ISO では汎用関数には typename を、汎用クラスには class を
使うように推奨していますが、古い処理系には typename という予約語
がなく、すべて class で代用していたのです。
ですから古い処理系で書かれたプログラムをコンパイルする互換性と、
これから新しくC++を学んでいく人は、必要に応じて書き分ければ
いいでしょう。
901
名前:
初心者
:02/02/16 04:01
ありがとうございました。
902
名前:
デフォルトの名無しさん
:02/02/16 05:33
int (*p)[10];
とあるとき、
p = new int[5][10];
は分かる。これは組み込み型にかぎれば、
p = (int (*)[10])malloc(5*sizeof(int [10]));
と同じことだよね。
しかし、
p = new int[][10];
の意味が分からない。コンパイルは通るんだが、これは何をやってるの?
サイズを指定しなくていいの?
903
名前:
デフォルトの名無しさん
:02/02/16 06:42
>>902
うちの gcc(2.95.3) じゃ parse error になったよ。
通るの?
904
名前:
デフォルトの名無しさん
:02/02/16 07:32
>>903
ども。
VCなら通った。
どうもVCでは、new int[0][10]と解釈されるみたい。
なーんだ。
905
名前:
デフォルトの名無しさん
:02/02/17 13:20
次の様なことがしたいのですが、
class A
{
void FuncX(void){}
void FuncY(void){}
void FuncZ(void){}
public:
void Call(int sel)
{
void (*func[])(void)={FuncX,FuncY,FuncZ};
func[sel]();
}
};
メンバー関数からポインタ取って呼び出すことは出来ないのでしょうか。
906
名前:
デフォルトの名無しさん
:02/02/17 13:29
C++相談室 540より。
class Hoge {
double (*Hoge::myfunc)(double);
public:
double func1(double a);
void setfunc(void) { myfunc = func1; }
double callfunc(double a ) { return( (this->*(myfunc))(a) ); }
...
};
907
名前:
名無しさん
:02/02/17 14:24
STLPortをインストールしてみたのですが、
e:\program files\microsoft visual studio\vc98\include\stlport-4.5.3\stlport\exception(60) : fatal error C1083: インクルード ファイルがオープンできません。'../include/exception': No such file or directory
のように出てビルドできません。
なんかvc98\includeにファイルを読みに逝ってるみたいなんですが・・・
解決方法を知っている方、いませんでしょうか?
908
名前:
デフォルトの名無しさん
:02/02/17 14:25
>> 906
コンパイル出来ないものを書くな。
class Hoge {
double (Hoge::*myfunc)(double);
public:
double func1(double a);
void setfunc(void) { myfunc = &Hoge::func1; }
double callfunc(double a) { return( (this->*myfunc)(a) ); }
};
あと、最近のC++だと&Hoge::func1のように
明確に指定しないといけないみたい。
909
名前:
デフォルトの名無しさん
:02/02/17 14:28
http://pc.2ch.net/test/read.cgi/tech/1006834463/n885-
910
名前:
デフォルトの名無しさん
:02/02/17 14:31
>>907
stl/_site_config.h を INCLUDE で検索
911
名前:
905
:02/02/17 14:40
>>906
,
>>908
いままでその方法が分からず、staticにしてやっていました。
どうもありがとうございます。
912
名前:
デフォルトの名無しさん
:02/02/17 15:26
.hで定義したクラスメソッドを.cppでinlineで実装する事って意味ある?
913
名前:
デフォルトの名無しさん
:02/02/17 15:28
inlineについて小一時間勉強セヨ
914
名前:
デフォルトの名無しさん
:02/02/17 16:07
>>912
ヘッダで定義したものを *.cpp でも定義したら、そりゃ二重定義で怒られるだろ。
915
名前:
名無しさん
:02/02/17 16:07
>>909
>>910
stl_msvc.hを編集したらパスが変更できたみたいなんですが、
e:\program files\microsoft visual studio\vc98\include\stlport-4.5.3\stlport\stdarg.h(23) : warning C4182: #include のネスト レベルは 546 です; 無限再帰の可能性があります。
e:\program files\microsoft visual studio\vc98\include\stlport-4.5.3\stlport\stdarg.h(23) : fatal error C1076: コンパイラの制限 : ヒープの領域を使い果たしました; 上限を設定するために /Zm オプションを使用してください。
上のようなエラーが出てしまいます・・・
916
名前:
デフォルトの名無しさん
:02/02/17 16:12
>>915
単にパスの設定をミスって再帰的に同じファイルを #include してるだけだと思うが。
悩みたくなければ ..\vc98\stlport の下に STLport をインストールしとけ。include の
下に入れると、いろいろめんどうだ。
917
名前:
名無しさん
:02/02/17 16:38
# include _STLP_NATIVE_C_HEADER(stdarg.h)
最初からネストするようになってるみたいですが・・・
918
名前:
デフォルトの名無しさん
:02/02/17 16:42
>>917
違うだろ。
STLport の stdarg.h を #include すると、標準ヘッダの stdarg.h が #include
されるのが正解。そこで設定をミスって STLport の stdarg.h を再度 #include
してるから無限ループにはまってる。
919
名前:
名無しさん
:02/02/17 17:25
うーん、exceptionの方にも同じようなのがあるんですが、
こっちはincludeには入っていないみたいなんですが・・・
920
名前:
デフォルトの名無しさん
:02/02/17 17:37
>912
「定義」という用語の使い方が間違っているとして、
privateなメソッドならあっても変ではない。
921
名前:
デフォルトの名無しさん
:02/02/17 20:13
new
deleteを使う基準がわかりません。
クラスの中の変数としてそのクラスのヘッダファイルでポインタを宣言した
らデコンストラクタでFreeしてやればいいのでしょうか?
クラスの各関数の中でnewした場合はその関数を出るときにdeleteする必要があるのでしょうか?
それともないのでしょうか?
922
名前:
デフォルトの名無しさん
:02/02/17 20:27
>>921
とりあえず一から勉強し直した方がいいように思う。…が、まぁいいや。
new で作ったオブジェクトは、どこかで delete しないと消えてくれない。
だから、new したまんま放っておくとメモリリークしたりリソースリークしたりて
よろしくない。ので、使い終わったらどこかで責任持って必ずdeleteせよ。
逆に、「deleteしないと消えない」ことを利用した使い方もある。
関数の中で string xxx; とかやって作ったオブジェクトは、関数から抜けるときに
必ず消えてしまう。これを外までもたせようとしたら、
string* pXxx = new string;
とかやって new で作って返すことになる。この場合関数の中でdeleteしちゃったら
何の意味もないので、別のどこかの関数で delete することになるだろう。
#1 あと、newで作ったのではないオブジェクトは delete するな。
#2 ていうか、new/delete の意味が理解できたら、 auto_ptr を積極的に使え。
以上、健闘を祈る。
923
名前:
デフォルトの名無しさん
:02/02/17 21:00
その後
#3 でauto_ptrをコンテナに入れようとしてはまる
に一票
924
名前:
デフォルトの名無しさん
:02/02/17 22:24
#4 そして boost::shared_ptr にたどり着く
925
名前:
デフォルトの名無しさん
:02/02/17 22:33
>>923
>>924
彼らはEffective STLを読んだばかりで嬉しいのです
そうそして漏れも(w
926
名前:
超初心者
:02/02/18 00:52
>>855
です。
>Emacs の M-X compile は実質上 make を起動するだけだから,make について
>お勉強するべし.make についてのサイトは探せば色々見付かるから自分で探
>すべし.
ちょっとしらべたけど、わからんかった。
Makefileっていうのは、c++ファイルと同じディレクトリ
に作成したらいいんかいな?
で、そのMakefileはc++ファイル作るたびに、
別途用意しなあかんの?
結構めんどくさい気がするんだけど。
汎用性のあるMakefileってないの??
927
名前:
デフォルトの名無しさん
:02/02/18 00:58
autoconf,automake
928
名前:
デフォルトの名無しさん
:02/02/18 01:11
>926
M-x compile ってやったらミニバッファに make -k とか出るよな?
それを全部消して gcc hello.cc とでも入力してからENTER。
一行ですまないようだったら、スクリプトファイルにでも書いておいて
そのファイル名を入れればいい。
makeのありがたみがわからないうちはそれで十分。
929
名前:
デフォルトの名無しさん
:02/02/18 01:14
>926
とりあえず調べたサイトを列挙せよ
930
名前:
デフォルトの名無しさん
:02/02/18 01:15
http://pc.2ch.net/test/read.cgi/tech/1009071535/
931
名前:
デフォルトの名無しさん
:02/02/18 01:22
% cat Makefile
#
% make hoge
cc tmp.c -o tmp
%
充分有り難い。
932
名前:
デフォルトの名無しさん
:02/02/18 01:23
違った宇津
% make hoge
cc hoge.c -o hoge
%
933
名前:
デフォルトの名無しさん
:02/02/18 03:04
テキストエディタ作りたいんすけど、文章を選択した範囲に
全角文字、半角文字(できれば英数と仮名を区別)が何文字あるかを
調べるにはどうしたらいいですか???
とりあえず過去ログで「半角」で全検索、もちろんサーチで検索も
してみました。よくわからない・・・です(^-^;
文字コードはSJISかな? 何か便利な関数がありそうな予感してるんですが。
934
名前:
デフォルトの名無しさん
:02/02/18 03:10
>結構めんどくさい気がするんだけど。
>汎用性のあるMakefileってないの??
ソースと実行ファイルが一対一なら書かなくてもいいの。
デフォルトでルール持ってるから。
これは商用UNIX/Linux/BSD/Windows共通。
どれでも「make 実行ファイル名」だけ。
Visual-Cなら「nmake filename.exe」。
ファイル名拡張子を見て、CかC++かフォートランかパスカルを
起動してくれる。gcc->.cc, Visual-C->.cpp
935
名前:
デフォルトの名無しさん
:02/02/18 03:16
>>926
Makefileはそもそも、どういう目的で作られたのかを考えな!
ちなみにC++のファイルと同じじゃなくちゃいけないって事は無い!
936
名前:
デフォルトの名無しさん
:02/02/18 03:42
Make は make install でセットアップまでしてくれますな。
(書いてあれば)
汎用性でいえば最強の部類に入ると思われ。
937
名前:
デフォルトの名無しさん
:02/02/18 07:41
マウスの位置やボタン状態、キーの状態(できれば押した瞬間でなく取得する度に
今押されているかどうかを知りたい)を取得したいのですが、APIからのメッセージ
は一度に一つしか送られてこないので使い勝手が悪いです。なにか良い関数は
あるでしょうか?
938
名前:
937
:02/02/18 07:45
すいません、キー状態ってのはどのキーが押されているかではなく、
どれか一つでもキーが押されているかどうか知らせてくれる、ってことです。
マウスとキーを同時に扱えない(メッセージが1つ&瞬間なので)ので困ってます。
939
名前:
デフォルトの名無しさん
:02/02/18 07:49
Windowsならdirectinput使うのはどうでしょう
940
名前:
デフォルトの名無しさん
:02/02/18 07:52
>>933
nAlpha = nDigit = nSbc = nDbc = 0;
for( p=start; p<end; p=next(p) )
{
if( isalpha(*p) ) nAlpha++;
else if( isdigit(*p) )nDigit++;
else if( isSingleByteChar(*p) ) nSbc++;
else nDbc++;
}
こんな感じで数えりゃいいんでないの?
↑には流れしか書いてないから実装は自分で好きなようにどーぞ。
941
名前:
937
:02/02/18 08:14
>>939
ありがとうございます。ちょっとやってみます。
942
名前:
デフォルトの名無しさん
:02/02/18 17:45
>>940
さんくす! そんな関数あったんやね。
isSingleByteCharはC++にあるん? 半角カナも取得したいっすな。
さすがにもうちょい自分で調べまっす。
943
名前:
940
:02/02/18 18:33
>>940
そんな関数は無いから自分で作れゆーとるんじゃゴルァ (゚д゚ )
iskanji とか ismbcslead とか何かそんなのはあるかもしれんが。
ガンバッテーネ。
944
名前:
940
:02/02/18 18:34
ちなみにリンク先は
>>942
の間違いだ。
945
名前:
デフォルトの名無しさん
:02/02/18 23:17
突然すいません。
次のコードがエラーになるのですが、
なぜなのですか?コンパイラはgccです。
両方抽象クラスだから、実装はなくてもいいと思って
いるんですよね。
class A {
public:
virtual bool funcA() = 0;
};
class B
{
public:
virtual A funcB() = 0;
};
946
名前:
デフォルトの名無しさん
:02/02/18 23:19
抽象クラスは戻り値の型に使えないのですか?
947
名前:
デフォルトの名無しさん
:02/02/18 23:22
純粋仮想関数じゃエラーでるんじゃないの?
948
名前:
デフォルトの名無しさん
:02/02/18 23:23
>>946
使えるわけがなかろう。落ち着いて考えろ。
949
名前:
デフォルトの名無しさん
:02/02/18 23:26
class CA{
class inA{
};
};
これがOKなら、このメンバクラス(メンバ?)
のオーバロードをしたいのですが、出来るでしょうか?
class CA{
template<class C1>class inA{cout<<"A"<<endl;};
template<class C2,class C3>class inA{cout<<"B"<<endl;};
public:
CA{inA<int,int> ina;};
};
は、通るのですが、
CA(){inA<int> ina;};
とすると、エラーになってしまいます。これは出来ないということなのでしょうか?
950
名前:
デフォルトの名無しさん
:02/02/18 23:29
>>948
そういわれればそうだな。
ありがとうございます。あー、どうしましょう。
951
名前:
デフォルトの名無しさん
:02/02/18 23:30
char* name;
というのがあって、これがNULLならcin(標準入力)から、
NULLでないならこの名前のファイルを開いてifstreamから
入力したいんですが、どう書くのがC++的に一番いいでしょう?
istream* ifs;
if(name)
ifs=new ifstream(name);
else
ifs=&cin;
int i;
(*ifs)>>i;
とかだとどうもポインタが出てきて嫌なんですが…。
かといって参照だとスコープとかの関係で無理っぽいし…。
というわけでかっこいい書き方をおしえてください。
952
名前:
デフォルトの名無しさん
:02/02/18 23:54
>>948
え?なんで?
953
名前:
デフォルトの名無しさん
:02/02/19 00:03
>>952
ポインタじゃないからって事じゃない?
954
名前:
デフォルトの名無しさん
:02/02/19 00:51
このスレ見てると
C++が使える人がそんなに多くないのと、
C++にあこがれる人がまだ沢山いるのとの
二つがよく分かって少し安心しました。
955
名前:
デフォルトの名無しさん
:02/02/19 01:19
>951
それでいいんじゃん,別に.見て何やってんのかスグ分かるし.
まぁあとは3項演算子使いたければ使えってぐらいで.
ただ ifs っつーと ifstream を連想するのは漏れだけ?
istream だったら・・・ is ・・・ かなぁ?
956
名前:
名無しさん
:02/02/19 01:34
http://ex.2ch.net/test/read.cgi/entrance/1013876601/l50
>683
IDカコイイ
957
名前:
デフォルトの名無しさん
:02/02/19 07:02
>>953
ポインタ返しにすればいいわけね。
ほんと、俺はバカだな。ありがとう。
958
名前:
デフォルトの名無しさん
:02/02/19 10:03
>>951
ifstream(name)の生存期間が不明だからあまり具体的にはアドバイス
出来ないけど、ひとつの関数で作業をやりすぎてないか?
実際のコードではint iじゃなくて、もっといろいろ入力するんだろ?
1.入力すべきストリームを決定
2.ストリームからデータを入力
という二つの作業があるんだから、別の関数に分けた方が
いいと思うぞ。そうやって構造をスッキリさせれば、ポインタを
なくす方法も見えてくるはずだ。
959
名前:
デフォルトの名無しさん
:02/02/19 23:31
static関数のなかでクラスの変数にアクセスするにはどうしたら良いのでしょうか?
クラスにflag変数をもっておいて
そのflagの値によってstatic関数の中で処理を変化させたいのです。
クラス内でstatic BOOL flagを宣言するとコンパイラは通るのですが、
実行ができません。
960
名前:
デフォルトの名無しさん
:02/02/19 23:47
>959
誰もが平均0.6回は通る道だな。
クラスの外側(ソースファイルのどれか)で static BOOL xxx::flag; と定義すれ。
961
名前:
デフォルトの名無しさん
:02/02/20 00:04
>960
でもそれだったらリンカエラー出るからそーゆー話じゃないんじゃない?
>959
は
> static (でprivate or protected) な関数の処理をメンバ変数の値によって
> 挙動を変えたい
という意味不明の事を言ってるように見えるのはヲレの日本語能力が足りない
からかな?
それだったら
> そんな関数staticにすんな
が答えなんだけど...
962
名前:
959
:02/02/20 01:00
>960
,961
レスありがとうございます。
すみません。言葉足らずだったようなのでもう一度。
ええとボタンがクリックされたら
GetListCtrl().SortItems(CompareFunc,pNMListView->iSubItem);
この行から
static int CALLBACK CompareFunc(LPARAM lParam1,LPARAM lParam2,LPARAM lParamSor
int CALLBACK MemListView::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
このように宣言された関数を呼んで
sortを行いたいのですが、
これがCompareFuncの中でflagがTRUEならば昇順に
flagがfalseならば降順にと切り分けたいのです。
このようなときflagは
どこに(クラス内かクラス外か)
どのように(staticかそうでないのか)持たすのが一番良いでしょうか?
963
名前:
デフォルトの名無しさん
:02/02/20 01:02
当て嵌るかどうかは不明だが、このような要求のあるケースとして、
thisをもらえない関数であるウインドウプロシジャー/
コールバック関数からメンバー関数を使いたいということある。
マックならウインドウのプロパティにクラスへのポインタを
セットする。ウインドウのプロパティからそのウインドウを
作成したインスタンスを参照する。
WindowsならばGetWindowLongのユーザーデータを使用したい
ところだなと、マニュアルを見ながら思った。
964
名前:
デフォルトの名無しさん
:02/02/20 01:49
>962
SortItemsの第2引数で工夫してflagの値も引き渡すようにするのが筋ではないかと。
たとえば、サブアイテムの個数がWORDの範囲を超えないのなら
MAKELONG(pNMListView->iSubItem, flag) としてみるとか。
965
名前:
デフォルトの名無しさん
:02/02/20 02:00
>>959
そのstatic関数に、該当するインスタンスのポインタを渡してやればいいんじゃないの?
全体がどーゆーデザインになってるのか見当がつかんが。
966
名前:
デフォルトの名無しさん
:02/02/20 02:04
CListViewで項目の間のバーをドラッグしたときにウインドウに
送られるメッセージは何でしょうか?
Spy++を使ってみましたが量が多すぎてよくわかりませんでした。
967
名前:
デフォルトの名無しさん
:02/02/20 02:08
Visual C++ でSTLを使うようになってから
Debugビルドでは平気なのにReleaseビルド
すると計算結果がおかしくりました。私が
悪いのでしょうか?
printf("\n")って入れたらちゃんと動いた
りもします????
968
名前:
デフォルトの名無しさん
:02/02/20 02:48
>>967
たぶんヒープを壊してる。次のコードを WinMain の直後に追加して、デバッグビルド
でヒープのチェックを有効にしてみ。
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF);
あと STLport を使ってるなら #define _STLP_DEBUG とかも定義しておくと便利だ。
969
名前:
デフォルトの名無しさん
:02/02/20 10:05
今度からC++をメインで使うプロジェクトに参加することになりました。
よろしく
970
名前:
デフォルトの名無しさん
:02/02/20 11:01
>966
VCスレ逝け
971
名前:
デフォルトの名無しさん
:02/02/20 11:43
もしかして
VC++ == C++
と思ってる奴って多くない?
972
名前:
デフォルトの名無しさん
:02/02/20 15:12
>971
operator == の定義によると思われ。
973
名前:
デフォルトの名無しさん
:02/02/20 15:51
g++まんせー
974
名前:
デフォルトの名無しさん
:02/02/20 18:57
boost や loki に tuple ってありますよね,アレって普通の構造体
を使うのに比べて何かメリットはあるのでしょうか?
struct.first_item
ってやるのと
get<0>(tuple)
っていう書式違い以上の違いが厨房な僕には分からないんで,
どなたか教えて下さい.
# まぁ構造体定義せずに済むという利点があるというのは分かりますが.
「利点が分からねーなら使うなゴルァ」と言われそうですが,利点がある
なら知りたいのです.どうぞよろしく.
975
名前:
デフォルトの名無しさん
:02/02/20 21:29
Auto<TCA<int>> temp;
何故にエラーになる・・・???
976
名前:
デフォルトの名無しさん
:02/02/20 21:31
>> の間に空白入れてっか?
977
名前:
デフォルトの名無しさん
:02/02/20 21:38
> >
↑
ここにスペースがないと >>演算子とカンチガイしてしまう
978
名前:
デフォルトの名無しさん
:02/02/20 21:42
>>976
,977
をを、そうだったのですか。
動きました♪有難うございます♪
979
名前:
デフォルトの名無しさん
:02/02/20 22:26
C言語の基礎を工業高校時代に習ったのですがC++とはC言語の基礎が役にたちますか?
それとも普通のC言語とはまったくの別物ですか?
いまから趣味でプログラムやるならCとC++のどっちのほうがいいですか?
980
名前:
デフォルトの名無しさん
:02/02/20 22:29
>>979
Cと一緒に勉強するのがいいよ。
このスレではこう答えるけど、
他じゃCやっとけっていいたいところだったり。
981
名前:
デフォルトの名無しさん
:02/02/20 22:44
class CB{
public:
template<typename T>void func(T a);
};
template<typename T>inline void CB::func(T a){};
これがエラーになるのは何故なのでしょうか?
982
名前:
デフォルトの名無しさん
:02/02/20 23:34
>981
CB<T>::func
にしる!!
983
名前:
デフォルトの名無しさん
:02/02/20 23:37
何故だかスレッド立てすぎですって怒られた…。
誰か新スレ立てない?
984
名前:
982
:02/02/20 23:40
スマソ思いっ切りウソ付いた
985
名前:
デフォルトの名無しさん
:02/02/21 00:07
新スレ立てた
http://pc.2ch.net/test/read.cgi/tech/1014217496/l50
986
名前:
デフォルトの名無しさん
:02/02/21 00:22
>>981
g++ 3.0.2 だと通るけど。たんに使ってるコンパイラが
メンバテンプレートに対応していないだけなんじゃない?
987
名前:
デフォルトの名無しさん
:02/02/21 01:07
VSは通らないのですか・・・
残念。
■過去ログ置き場に戻る■
1-
前250
最新50
DAT2HTML
0.33f Converted.