C++相談室 part41
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/07/01(金) 13:09:21ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いします。
IDE(VC++など)などの使い方の質問もその開発環境のスレに
お願いします。
前スレ part40
http://pc8.2ch.net/test/read.cgi/tech/1113408957/
過去スレ、関連スレ、関連リンクなどは >>2-20 あたり
0002デフォルトの名無しさん
2005/07/01(金) 13:11:030003デフォルトの名無しさん
2005/07/01(金) 13:11:442 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
0004デフォルトの名無しさん
2005/07/01(金) 13:12:2717 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
0005デフォルトの名無しさん
2005/07/01(金) 13:13:1832 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/
36 http://pc5.2ch.net/test/read.cgi/tech/1096304546/
37 http://pc5.2ch.net/test/read.cgi/tech/1098543578/
38 http://pc5.2ch.net/test/read.cgi/tech/1101473340/
0006デフォルトの名無しさん
2005/07/01(金) 13:14:16[C++ FAQ]
http://www.parashift.com/c++-faq-lite/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[禿 Stroustrup]
http://www.research.att.com/~bs/
[C++ International Standard]
http://www.kuzbass.ru/docs/isocpp/
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21
[C/C++ Users Journal]
http://www.cuj.com/
[cppll (ML)]
http://www.trickpalace.net/cppll/ (日本語)
0007デフォルトの名無しさん
2005/07/01(金) 13:41:51amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
http://www.amazon.com/exec/obidos/ASIN/0201760428/
0008デフォルトの名無しさん
2005/07/01(金) 14:02:54Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
http://www.amazon.com/exec/obidos/ASIN/0321227255/
0009デフォルトの名無しさん
2005/07/01(金) 14:05:50[Boost]
Boost http://www.boost.org/
(日本語) http://www.kmonos.net/alang/boost/
(日本語) http://shinh.skr.jp/boost/
[STL]
STLport http://www.stlport.org/
SGI-STL http://www.sgi.com/tech/stl/
STLFilt http://www.bdsoft.com/tools/stlfilt.html
(日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
(日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
http://www.moderncppdesign.com/
LokiPort-MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
0010デフォルトの名無しさん
2005/07/01(金) 14:10:19[他]
ACE http://www.cs.wustl.edu/~schmidt/
Blitz++ http://www.oonumerics.org/blitz/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
[他ライブラリリンク集]
http://www.trumphurst.com/cpplibs/cpplibs.phtml
(日本語) http://www.kmonos.net/alang/cpp/lib.html
0011デフォルトの名無しさん
2005/07/01(金) 14:13:31【C++】template 統合スレ -- Part6
http://pc5.2ch.net/test/read.cgi/tech/1101384692/
C/C++の宿題を片付けます 46代目
http://pc8.2ch.net/test/read.cgi/tech/1119514274/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc8.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
ATL/WTL Part3
http://pc5.2ch.net/test/read.cgi/tech/1095442366/
0012デフォルトの名無しさん
2005/07/01(金) 14:16:520013デフォルトの名無しさん
2005/07/01(金) 14:35:27俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0014デフォルトの名無しさん
2005/07/01(金) 14:39:230015デフォルトの名無しさん
2005/07/01(金) 14:42:01とかいうエラーが出るんだけどこれってどうすればいいの?
0016デフォルトの名無しさん
2005/07/01(金) 14:54:28後氏ね。
0017デフォルトの名無しさん
2005/07/01(金) 14:57:05まぁヒントぐらいにはなったな。
うむごくろう。
00181
2005/07/01(金) 15:00:10http://pc8.2ch.net/test/read.cgi/tech/1113408957/21
>21 名前:デフォルトの名無しさん[sage] 投稿日:2005/04/14(木) 03:47:02
>>>1
>実は part41 にしないといけなかったのかもしれない。
>ttp://pc8.2ch.net/test/read.cgi/tech/1106527792/41-42
ごめん、見落としてたor2
0019デフォルトの名無しさん
2005/07/01(金) 15:11:36乙
0020デフォルトの名無しさん
2005/07/01(金) 15:17:010021デフォルトの名無しさん
2005/07/01(金) 15:27:21std::copy(penis.begin(), penis.end(), std:back_inserter(vulva));
複数の男のチンポを受け入れる女のマンコ(;´Д`)ハァハァ
0022デフォルトの名無しさん
2005/07/01(金) 16:19:22VisualC++7.1ではそのまま通りました。
0023前スレ>>992
2005/07/01(金) 16:51:31template <typename lhs, typename rhs>
struct is_equal {
enum { type = false };
};
template <typename T>
struct is_equal<T, T> {
enum { type = true };
};
レスしてくださった人ありがとうございました。
0024デフォルトの名無しさん
2005/07/01(金) 16:58:09enumにしなくてもstatic const boolでいいだろうに。
0025前スレ951
2005/07/01(金) 21:43:47次スレは「C++相談室 part43」です。
~~
0026デフォルトの名無しさん
2005/07/01(金) 22:26:550027デフォルトの名無しさん
2005/07/01(金) 22:47:06find() がそれに相当するんじゃまいか?
002826
2005/07/01(金) 22:59:23いや、そうじゃなくて要素がないときに例外を投げるようなものがないということ。
それにatやout_of_rangeという名前がmapとは多少肌が合わなくても他のコンテナに合わせるということはないのかと思った。
0029デフォルトの名無しさん
2005/07/01(金) 23:53:23文字型を整数型に変換するにはどうしたらいいでしょうか?
atoiは文字列じゃないと使えないようなのですが。
0030デフォルトの名無しさん
2005/07/01(金) 23:58:04map に at ?
要素が無ければ out_of_range ?
多少とかじゃなくて、激しくキモイよ。
0031デフォルトの名無しさん
2005/07/01(金) 23:58:05char c = '9';
とかなら
int n = c - '0';
がらくだな。
0032デフォルトの名無しさん
2005/07/01(金) 23:58:44operator[]があるぐらいならat()があってもイイんじゃないの
ってことジャマイカ
0034デフォルトの名無しさん
2005/07/02(土) 00:11:020035デフォルトの名無しさん
2005/07/02(土) 00:12:42意味がわかりませんが
c = getchar();
c = getchar();
と書いても何も問題はありませんよ?
0037デフォルトの名無しさん
2005/07/02(土) 09:50:14教科書より文字コード表見た方がいいと思うぞ
0038デフォルトの名無しさん
2005/07/02(土) 12:01:56C++標準関数ではないし、一文字だけ入力したいということがない。
>>35のように連続して使うなら、それは文字列として扱った方がいい悪寒:
std::string str;
std::cin >> str;
おっと、こうするとstrに4TBとか入れられてプログラムが落ちるから
C++は危険なんだっけ!
0039デフォルトの名無しさん
2005/07/02(土) 12:06:17getcharは<cstdio>のC++標準の関数だけど。
0040デフォルトの名無しさん
2005/07/02(土) 12:30:05> おっと、こうするとstrに4TBとか入れられてプログラムが落ちるから
どんなに大きな入力がきても、
str.max_size() まで読み出すか、
最悪 bad_alloc が飛んでくるだけだよ。
それで困るんなら setw(100) とか挟んどけ。
0041デフォルトの名無しさん
2005/07/02(土) 12:48:52C標準ライブラリは、参照によって提供されているだけで、
C++標準ライブラリの一部ではないんじゃなかったっけ違ったっけ。
嘘言ってそう、あとで調べ直す(ρ_;)
>>40
スマンちょっとすねてみただけだ・・・
0042デフォルトの名無しさん
2005/07/02(土) 17:53:54getchar()やgetc()みたいなものを使って
一文字入力する場合stdioとiostreamでは話にならないレベルの速度差が
あったけどな。
stdioのが10倍程度速かった。ただしマルチスレッドでない場合だが。
0043デフォルトの名無しさん
2005/07/02(土) 23:10:310044デフォルトの名無しさん
2005/07/02(土) 23:13:210045デフォルトの名無しさん
2005/07/02(土) 23:14:55#include <vector>
std::vector<bool> sieve_of_eratosthenes(int upper) {
std::vector<bool> integers(upper + 1, true);
integers[0] = integers[1] = false;
for (int i = 2; i <= upper / 2; ++i) {
int notprime = i;
while ((notprime += i) <= upper) integers[notprime] = false;
}
return integers;
}
bool is_prime(int n){return sieve_of_eratosthenes(n)[n];}
0046デフォルトの名無しさん
2005/07/03(日) 03:10:10いまあるデータの一群を対象に特定の操作(ファイルへの書き込みや読み出しなど)したいとします。
そこでそのデータの集まりをCDataというクラスにします。
今後のメンテナンスを考えるとデータメンバを追加するときに集成するのはこのクラスだけにしたいです。
さらにread/writeというメソッドを追加しファイルへの読み書きができるようにします。
しかし、このCDataのあるインスタンスだけが、read/writeを使えるようにしたいです。
(つまりコードのいたるところで好き勝手にwriteされると言うことを防ぎたい。)
さらにそのread/writeができるインスタンスはデータを読み込んだら他のCDataクラスのインスタンスに
メンバをバイナリコピーしたいとします。つまり、
CDataRW foo1; //こいつはread/writeできる。
CData foo2;
foo1.read();
foo2 = foo1;
foo2.read(); //←ダメ。コンパイルエラーが望ましい
foo1 = foo2;
としたい分けです。よいクラス設計やデザインパターンなどありますでしょうか?
0047デフォルトの名無しさん
2005/07/03(日) 03:17:14(2) Rだけ出来るクラス
(3)どっちも出来ないクラス
の3つが作りたいって事か?
0048デフォルトの名無しさん
2005/07/03(日) 06:05:45つーか、>>47ならCData→CDataR→CDataRWでそれぞれread()とwrite()か。
0049デフォルトの名無しさん
2005/07/03(日) 06:42:48そうですよね。結局そういう方法で作りこんでます。
何を嫌がっていたかと言うと、CDataで変数を追加するとCDataRWのread/writeにも同様に修正が必要なことです。
でもそれしかないかなぁ。
最初考えたのがCDataにread/writeを実装して、CDataRWはpublicに派生、CDataNoRWクラスはprotected派生
とやってみたんだけど、それだと
CDataRW foo1;
CDataNoRW foo2;
foo2 = foo1;がダメだったです。コピーコンストラクタを書くと、結局CDataが持っている全メンバの知識が必要になるし。
0050デフォルトの名無しさん
2005/07/03(日) 07:03:18protected:
void read_impl() {}
};
CDataRW: public CData {
public:
void read() { CData::read_impl(); }
};
みたいなのは駄目?
あと、コピーコンストラクタは
全メンバを知らなくても
内部でthis->CData::operator =(*other)みたいにすることも出来るけど。
0051デフォルトの名無しさん
2005/07/03(日) 07:04:59最低でもなにもしないwrite()とread()があるとして
template<typename T>
class CDataOpen {
T & impl;
bool writable;
public:
CDataOpen(const T& d,bool b=false) : impl(d) ,writable(b){}
size_t operator()(){return b ? impl.write() : impl.read();}
};
func(){
CDataOpen<CDataRW> Write(fool,true);
CDataOpen<CDataR> Read(fool);
CDataOpen<CDataRW> Read2(fool2);
while(...){
...処理内で使いまわす
Read2();
Read();
Write();
}
}
0052デフォルトの名無しさん
2005/07/03(日) 07:47:58>this->CData::operator =(*other)
こういうコピーもありましたか。
const CDataRW & CDataRW ::operator=(const CData & o)
{
this->CData::operator=(o)
return *this;
}
って感じでしょうか?
ちなみにprotectedで派生させたCDataNoRWがあるとした場合、
CDataRW drw;
CDataNoRW dnrw;
drw = dnrw; //コピー
dnrw = drw; //逆のコピー
だとすると
const CDataRW & CDataRW ::operator=(const CDataNoRW & o)
const CDataNoRW & CDataNoRW ::operator=(const CDataRW & o)
が居るのでしょうか?
const CDataRW & CDataRW ::operator=(const CDataNoRW & o)
{
this->CData::operator=(o)
return *this;
}
としてみたところ、
error C2243: '型キャスト' : 'const CDataNoRW *__w64 ' から 'const CData &' の変換は存在しますが、アクセスできません。
となってしまいました。CDataNoRWをいったんCDataにしたいですね。。ポインタだったらdynamic_castが通用するのかも知れないな。。
と言うわけで、このパラダイムをC++の世界ではどう扱うのかに興味が移ってきました。
(製造は簡単な>>48さんの方式を取りたいと思います。)
0053デフォルトの名無しさん
2005/07/03(日) 08:37:59つまり引数側(代入式の右辺側)が派生クラスということでしょ?
だったらそれこそ何もしなければ代入できると思うけど。
もちろん、データメンバを追加していた場合には
スライシングの問題が起きるけどね。
(逆に、Base::operator =() を利用する時は、追加したメンバを初期化する必要がある)
0054デフォルトの名無しさん
2005/07/03(日) 08:43:01いや、こうだろ。
CData
↓ ↓
CDataR CDataW
↓ ↓
CDataRW
005552
2005/07/03(日) 09:41:480057デフォルトの名無しさん
2005/07/03(日) 15:32:12諸事情でC++使えるようになりたいんです。
毎日勉強したら何日くらいでマスター出来ますか?
個人差あるのはわかってますけど、だいたいの目安を教えてください。
0058デフォルトの名無しさん
2005/07/03(日) 15:39:010059デフォルトの名無しさん
2005/07/03(日) 15:39:10そんな無意味な質問をすることから推測するに、一年くらいやれば
糞設計のメモリリークしまくりオブジェクト指向とは無縁の糞コードを量産できるようになります。
0060デフォルトの名無しさん
2005/07/03(日) 15:59:41ビルドしたところ、以下のメッセージが出てしまいました。
error LNK2001: 外部シンボル ""char * __cdecl fgets(char *,int,struct _iobuf *)" (?fgets@@$$J0YAPADPADHPAU_iobuf@@@Z)" は未解決です。
該当するソースはこのようになっています。
FILE *fstream;// ファイルディスクリプタ
char tLine[256];// 一行読み込み用
if( fgets( tLine, 128, fstream ) == NULL ){
if( ferror( fstream ) ){// 一行読み出しエラー
break;
}
break;// EOFに達した
}
その他,atoi、strstrなど、Cランタイムライブラリ関数(?)関連のものは
みな外部シンボルが未解決と出るんですが…何か参照設定が足りないのでしょうか?
ご教授いただければ思います。
0061デフォルトの名無しさん
2005/07/03(日) 16:11:12http://pc8.2ch.net/test/read.cgi/tech/1118781438/
ちょっと前までスレのテンプレに書くコンパイラ専用スレ集として
「コンパイラスレ」があったとおもうんだが、なんで無くなったんだ?
0062デフォルトの名無しさん
2005/07/03(日) 16:20:13スレチガ失礼しました。誘導ありがとうございます。
0063デフォルトの名無しさん
2005/07/03(日) 17:01:100064デフォルトの名無しさん
2005/07/03(日) 17:07:32int main(int argc, char* argv[])とすればargvに入る。
詳細はググれ。
0065デフォルトの名無しさん
2005/07/03(日) 18:53:23>char tLine[256];// 一行読み込み用
>if( fgets( tLine, 128, fstream ) == NULL ){
これはひどいな。
0066デフォルトの名無しさん
2005/07/03(日) 19:45:21なら書くな
0067デフォルトの名無しさん
2005/07/03(日) 23:56:01#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
for (int i (0); i < argc; ++ i)
cout << argv [i] << endl;
return 0;
}
0068デフォルトの名無しさん
2005/07/04(月) 01:31:24struct structA{ ... }strA
class classB{ ... }
classB *objectC = (strA*)
0069デフォルトの名無しさん
2005/07/04(月) 01:50:030070デフォルトの名無しさん
2005/07/04(月) 03:03:10目を覆いたくなるコードだな…
バッファが256なのに128読み込み
それにfstreamはstd::fstreamと混同しそうで怖いな
漏れはCはサッパリだが、Cだとbreakつかいまくりなの?
>>68
structAでoperator classB()とかをオーバーロードしてあるのかな
0071デフォルトの名無しさん
2005/07/04(月) 03:42:58breakつかってもif文から脱出できるわけではないから、あれは
外側にループがあるんだろう
>>68
「適当」じゃなくて「ちゃんと」書けよ
classB *objectC = &strA;
の間違いか?
0072デフォルトの名無しさん
2005/07/04(月) 11:44:38「コンパイルエラー」
0073デフォルトの名無しさん
2005/07/04(月) 14:14:02それはVC++の質問じゃなくて
標準C++固有の質問なんでしょうか。
0074デフォルトの名無しさん
2005/07/04(月) 16:23:09むしろC++ですらなく、Cの質問の悪寒。
void f(ifstream& fin) {
string line;
while (getline(fin, line)) {
// ...
}
};
0075デフォルトの名無しさん
2005/07/04(月) 16:56:20同じclass Interfaceを基底クラスに持つ、class Fooとclass Baaがあり、
クライアント側はInterface型のリストとしてFooとBaaを所持すると言う、ありがちな関係があります。
さて、FooとBaaのデータを、ファイルに保存する必要があります。
人に読んでもらう事が前提のフォーマットです。
ここではたと迷ってしまいました。
Baa BaaDataA BaaDataB ...
Foo FooDataA FooDataB ...
Baa BaaDataA BaaDataA ...
といった感じの、先頭にタイプIDみたいのがあるフォーマットならば
いかにもオブジェクト指向っぽく扱えて楽なので、これで行こうと思っていました。
ところが世間のファイルフォーマットを観ると
Foo
FooDataA FooDataB ...
Baa
BaaDataA BaaDataB ...
BaaDataA BaaDataB ...
こんな風に、FooならFooでまとめて記述しているフォーマットが多く
確かに見た目はこちらの方がスマートですし、データ量も少なく、ベストな気がします。
ところが後者を実装するとなると、Interface型のリストしか無い以上
小細工が必要になり、あまり嬉しくありません。
どちらが良いか、なんでもいいのでアドバイス頂けると幸いです。
0076デフォルトの名無しさん
2005/07/04(月) 17:11:26["Foo"]と["Baa"]について順次書き出す
読むときはまとまっていた方が嬉しいが、Interafceの生成順は保持しなくてもいいの?
007775
2005/07/04(月) 17:22:05さすがに1行では無理なのですが(例が悪くて申し訳ないス)、
なるほどmapを使ってstringの代わりにオブジェクト自体を持たせれば…
おかげでスマートな実装が見えてきました
> 読むときはまとまっていた方が嬉しいが
にも後押しされました。ありがとうございました。
0078デフォルトの名無しさん
2005/07/04(月) 18:26:50stringの代わりにオブジェクト自体、はあんまりかも。ポリモフィズムの意味が薄れるから。
class Interfaceに純粋仮想関数 serialize() を用意し、
その返値を pair<string, string>とかにして、各派生クラスで:
pair<string, string> serialize() {
string str = ...;
return make_pair("Foo", str); // strは"FooDataA FooDataB ..."
};
template <typename T, typename S>
void serialize(T first, T last, S& container) {
while (first != last) {
pair<string, string> data = (*first++)->serialize();
container[data.first].push_back(data.second);
}
};
vector<Interface*> interfaces;
map<string, vector<string> > serial_map;
serialize(interfaces.begin(), interfaces.end(), serial_map);
もっといい書き方がありそう
0079デフォルトの名無しさん
2005/07/04(月) 19:46:16うっかり、multimapにpair<string, Interface*>を持たせてソートし
Interfaceに持たせたsaveData()=0を一気に使わせるようなのを考えてました。
お手本ありがとうございます。書き方も含め勉強になります。
0080デフォルトの名無しさん
2005/07/04(月) 20:53:48の例では断然上を取るがな、俺は。
下の良さってのは、領域が節約できることだけだ。
上の例はgrepやawkのようなツールでも扱いやすいし、
セーブやロードも単純化できる。
008176,78
2005/07/05(火) 13:41:51もしwindowsでいえばコマンドプロンプトのアイコンを見たことがあるユーザを対象にするなら
Foo FooDataA FooDataB...
形式を選んだ方がいいかもしれない。
出力をソートすればidごとにまとまるし、grepで必要なidのだけ見れる。
ログを「加工」する部分は外部ツールですべきだとも思う。
でも、各種ツールを使うスキルを要求するのは難しいし(というより不可能)
ログがそのまま人間にとって読みやすくないと見てすらもらえない(ρ_;)
だから、
Foo:
\tFoo1:
\t\tFooData1A FooData1B
\t\tFooData1C FooData1D
\tFoo2:
\t\tFooData2A FooData2B
Baa:
\tBaa1:
とか、見やすく、プログラムからも扱えるような形式のがいいかなと。
xmlではき出せばいいのかな。そこまでするものなのかな。
0082デフォルトの名無しさん
2005/07/06(水) 15:37:58// 省略
}
class C2 {
template <class T>
void F(T t = C1());
}
template <class T>
void C2::F(T t) {
// 省略
}
というコードで、
C2 c2;
c2.F(C1());
だと問題なくコンパイルされるんですが、
C2 c2;
c2.F();
だと「could not deduce template argument for 'C1'」というエラーが出ました。
デフォルト引数でテンプレートを推論する事はできないのでしょうか?
0083デフォルトの名無しさん
2005/07/06(水) 15:54:33コンパイラの立場で質問。
c2.F();と書いた場合に、
引き数のない関数の呼び出しとディフォルト引き数つきの関数の呼び出しの区別はどうすればいい?
0085デフォルトの名無しさん
2005/07/06(水) 20:32:29区別のしようがないからエラーにしていいんじゃなかったっけ?
0086デフォルトの名無しさん
2005/07/06(水) 22:26:410087デフォルトの名無しさん
2005/07/07(木) 01:01:0714.8.2.4 -17-
"A template type-parameter cannot be deduced from the type of a function default argument."
ttp://www.kuzbass.ru/docs/isocpp/template.html#temp.deduct.type
0088デフォルトの名無しさん
2005/07/07(木) 01:03:31これならさすがに通るな。
俺もメンバテンプレートをいまいち理解できてねーな。
008982
2005/07/07(木) 10:02:13オーバーロードを解決するのに関数の実体化が必要だけど、デフォルト引数の評価はこの時点ではできないため、
テンプレート引数が不明で関数の実体化ができない、みたいな感じなんでしょうか。
>>87
デフォルト引数では無理ですか。
皆様ありがとうございました。
0090デフォルトの名無しさん
2005/07/07(木) 10:49:52まぁ、デフォルト引き数は何かと問題になるから引き数の違いでコンストラクタを複数作るほうが無難だね。
しかも、>82の例だとそれがデフォルトコンストラクタになるのだから尚更。
#逆に、デフォルトコンストラクタを作りたくないとなると話は別だが。
0091デフォルトの名無しさん
2005/07/08(金) 13:48:03今リストの勉強してるので気になります。
0092デフォルトの名無しさん
2005/07/08(金) 15:01:28public:
CPOINT(int x, int y) : x_(x), y_(y) {}
int x_, y_;
};
struct SPOINT {
int x_, y_;
};
void F1(CPOINT cp) {
...
}
void F2(SPOINT sp) {
...
}
CPOINT cp(0, 0); // OK
SPOINT sp = {0, 0}; // OK
F1(CPOINT(0,0)); // OK
F2(SPOINT(0,0)); // エラー
F2(SPOINT({0,0})); // エラー
F2(SPOINT() = {0,0}); // エラー
F2(SPOINT{0,0}); // エラー
F2({0,0}); // エラー
コンストラクタが定義されていないと、
初期化した一時オブジェクトを作ることができないのでしょうか?
SPOINT sp = {0, 0};
これがOKなだけに、なんか納得できない・・・。
0093デフォルトの名無しさん
2005/07/08(金) 16:53:39当たり前じゃん・・・・
それから、
SPOINT sp = {0, 0};
これはC++とは関係なく、Cでも出来る、構造体の初期化にすぎない。
0094デフォルトの名無しさん
2005/07/08(金) 17:09:420095デフォルトの名無しさん
2005/07/08(金) 18:04:360096デフォルトの名無しさん
2005/07/09(土) 00:28:38class CPOINT
{
int x_, y_;
};
F1(CPOINT(0,0));
↑これも通らないと納得いかないのか?
初心者の「納得行かない」はただ単に理解してないだけだよな
0097デフォルトの名無しさん
2005/07/09(土) 00:35:41意味がわからない。
「安定的」でないほうが自然な関数を例に挙げてもらえるとわかるかも。
0098デフォルトの名無しさん
2005/07/09(土) 02:11:34二次元配列(4x4)に、変数を含む値を代入しようとしています。
{X,0,0,0},{0,X,0,0},{0,0,X,0},{0,0,0,X}
のような形です。ここで、Xは宣言の段階では決定していないので、
Xが決定した後に値を代入したい と思っています。
宣言時以外の時に、まとめて代入はできないのでしょうか?
初心者丸出しですが、どなたか教えてください・・・・
0099デフォルトの名無しさん
2005/07/09(土) 02:16:08二次元配列を二つ用意し、一つは
1,0,0,0,
0,1,0,0,
0,0,1,0,
0,0,0,1,
で初期化しておく。
その後Xが確定したときにもう一つの方に
for (int i = 0; ...) {for (int j = 0; ...) {theArray[i][j] = X * fixedArray[i][j];}}
とでもしてコピーすればいい。
#つーか、std::copy()か。
0100デフォルトの名無しさん
2005/07/09(土) 02:21:11for (int i = 0; i < 4; ++i)
a[i][i] = X;
でいいだろ
0101デフォルトの名無しさん
2005/07/09(土) 03:18:33{} は初期化の構文なので定義のときしか使えない。
C99でC言語に導入されたコンパウンドリテラルなら {} を使った値を「代入」で使える。
でもこれは標準C++には無い機能だ。
おとなしく要素ごとに代入するコードを書いてしまうのがいいよ。
0102デフォルトの名無しさん
2005/07/09(土) 10:21:28010398
2005/07/09(土) 14:25:20>>99
なるほど、そういわれてみればそれもアリですね
>>100
いや、全部埋めるわけではないので・・・
>>101
なるほど、やはり初期化の構文なのですね
>>102
大丈夫です。それは知ってます。
というか、今はその方法で乗り切ってます。
for文の中でXを決定し、それに沿った形で行列を定義する
プログラムなのですが、1回1回forの中で変数を作るのも
ちょっと気持ちが悪かったので、forの外で作った変数を
繰り返し利用できないかな と思った次第です。
0104デフォルトの名無しさん
2005/07/09(土) 14:59:11ソートとか
0105デフォルトの名無しさん
2005/07/09(土) 16:34:04パフォーマンス上の問題でも無い限り、メンテナンス上の問題を優先する意味で
変数はなるべく狭いスコープで定義(および初期化)することをお勧めする。
010692
2005/07/09(土) 16:52:36Cには一時オブジェクトがなかったから、
{}による初期化は宣言時の初期化用にしか作られていないということですかね。
>>96
それは
CPOINT cp(0,0);
も
F1(CPOINT(0,0));
も通らないという意味で、92で納得いかないと思ったこととは違います。
メンバ変数を順に初期化するコンストラクタをコンパイラが書いてくれたら便利だとは思いますけど。
レスありがとうございました。
0107デフォルトの名無しさん
2005/07/09(土) 17:34:47勉強しろ
0108デフォルトの名無しさん
2005/07/09(土) 17:40:51は?「クラスと構造体の違い」って、デフォルトのアクセス指定だけだろ?何を勉強しろって?
0109デフォルトの名無しさん
2005/07/09(土) 17:45:31俺は構造体にもよくコンストラクタをつける。
0110デフォルトの名無しさん
2005/07/09(土) 18:08:300111デフォルトの名無しさん
2005/07/09(土) 19:22:050112デフォルトの名無しさん
2005/07/09(土) 19:57:40>何を勉強しろって?
オブジェクト指向。自分一人でC++だけ触ってりゃいい人は楽でいいですね。
0113デフォルトの名無しさん
2005/07/09(土) 20:12:14class{をstruct{private:に書き換えたところで何も変わらんだろ。
0114デフォルトの名無しさん
2005/07/09(土) 20:19:21違う概念なんだから実装が違ってあたりまえだと思うのは普通じゃないのか。
0115デフォルトの名無しさん
2005/07/09(土) 20:28:34煽られたからってテキトーなこと言ってんじゃねーよ。
>92の質問は些細な言語仕様についてのもので、オブジェクト指向の概念とは関係ないだろ。
0116デフォルトの名無しさん
2005/07/09(土) 20:46:42それは曲解だ。
異なる設計上の概念が同じ言語要素に対応することが「あっても良い」と
言っている。
0117デフォルトの名無しさん
2005/07/09(土) 21:12:46ワロタ
0118デフォルトの名無しさん
2005/07/09(土) 21:32:59やっぱ規格で決まってんのかなあ
0119デフォルトの名無しさん
2005/07/10(日) 00:49:43オブジェクト指向の為に導入されたクラスの記述方法に
オブジェクト指向の概念は必要ないと?素晴らしい支離滅裂ぶりですね。
0120デフォルトの名無しさん
2005/07/10(日) 00:51:48オブジェクト指向におけるクラスにコンストラクタという概念があったからですよ。
逆もなきゃおかしいなんて無茶な事言わないで下さい。あくまで構造体が拡張されたんです。
0121デフォルトの名無しさん
2005/07/10(日) 02:07:260122デフォルトの名無しさん
2005/07/10(日) 06:11:14あんた>107で>112の人だよな?
煽られたからってテ(以下略)
たとえばC99のコンパウンドリテラルが使えれば>>92の問題は解決するわけだが、
C++にそれが存在しない理由は、オブジェクト指向の為ではない。
同様に、たとえば>>106の言う「メンバ変数を順に初期化するコンストラクタ」を
C++コンパイラが自動生成してくれない理由も、オブジェクト指向の為ではない。
つまり>92がオブジェクト指向を学んでも
「なぜC++ではこのような記述ができないのだろう」
という疑問の答えがそこに見出せるとは思わない。
あとな、C++スレで「クラス」といえば class で宣言されるアレで、
「構造体」といえば struct で宣言されるアレだと思うに決まってるだろ。
それとは別に自分で定義した意味があるんなら、
区別できるような呼び方にして、その意味をちゃんと説明しないとうまく伝わらないよ。
0123デフォルトの名無しさん
2005/07/10(日) 10:05:35みんなどれのことを言ってるの? 俺混乱してきた('A`)
A. structキーワードを使ったときとclassキーワードを使ったときの違い
B. 「構造体」という概念と「クラス」と言う概念の違い
C. その他
0124デフォルトの名無しさん
2005/07/10(日) 12:14:26int* p;の時の*(p+1)とp[1]が違うか同じかっていう議論に置き換えてみたらどうよ
0125デフォルトの名無しさん
2005/07/10(日) 12:17:30ということでよろしいでしょうか?
0126デフォルトの名無しさん
2005/07/10(日) 12:34:54みんなどれのことを言ってるの? 俺混乱してきた('A`)
A. 着け方の違い
B. はずし方の違い
C. その他
0127デフォルトの名無しさん
2005/07/10(日) 12:36:130128デフォルトの名無しさん
2005/07/10(日) 12:39:120129デフォルトの名無しさん
2005/07/10(日) 14:06:010130デフォルトの名無しさん
2005/07/10(日) 15:11:34なんだかキモイ
0131デフォルトの名無しさん
2005/07/10(日) 18:42:170132デフォルトの名無しさん
2005/07/10(日) 19:12:59template<> Complex absolute<Complex>(Complex c) {return Complex(c.getAbs(), 0));}
の template<> Complex absolute<Complex> とは何なんでしょうか?
普通テンプレートの宣言は template<typename T> T absolute(T t){ ......... return t }
だと思うのですが。よろしくお願いします。
0133デフォルトの名無しさん
2005/07/10(日) 19:17:18クラス自体がテンプレート宣言を持たないメンバテンプレート。
0134デフォルトの名無しさん
2005/07/10(日) 19:33:50特殊化
0135デフォルトの名無しさん
2005/07/10(日) 19:33:540136132
2005/07/10(日) 20:04:08汎用的なテンプレートを特定の型用に定義しなおす場合に使うということですね。
参考になりました。thx
0137デフォルトの名無しさん
2005/07/11(月) 17:42:09#include<iostream>
#include<typeinfo>
int main()
{
typedef char (&ref_array)[100];
typedef const char (&cref_array1)[100];
typedef const ref_array cref_array2;
typedef ref_array const cref_array3;
std::cout << typeid(ref_array).name() << std::endl; //char [100]
std::cout << typeid(cref_array1).name() << std::endl; //char const [100]
std::cout << typeid(cref_array2).name() << std::endl; //char [100]
std::cout << typeid(cref_array3).name() << std::endl; //char [100]
char a[100];
ref_array ref = a; ref[0]='A'; std::cout << ref[0] << std::endl; //A
//cref_array1 cref1 = a;cref1[0]='A'; std::cout << cref1[0] << std::endl;//compile-error
//cref_array1 cref1 = a;(const_cast<ref_array>(cref1))[0]='A'; std::cout << cref1[0] << std::endl;//damage-error(dangerous)
cref_array1 cref1 = a;(const_cast<char*>(&cref1[0]))[0]='A'; std::cout << cref1[0] << std::endl;//A
cref_array2 cref2 = a;cref2[0]='A'; std::cout << cref2[0] << std::endl;//A
cref_array3 cref3 = a;cref3[0]='A'; std::cout << cref3[0] << std::endl;//A
}
0138デフォルトの名無しさん
2005/07/11(月) 17:47:52そもそもtypeidで参照型は取得できないんじゃないの?
0139デフォルトの名無しさん
2005/07/11(月) 17:57:05どうやるんでしょうか。
class outside {
int x;
class inside {
void func() { x = 0; }; // x is not a member of outside::inside
};
};
xをoutside::xにしたり、friend class outside;つけたりしましたがダメっぽいですよ。
0140デフォルトの名無しさん
2005/07/11(月) 18:19:05int x;
class inside {
void func(outside *o) { o->x = 0; };
};
};
とか
class outside {
int x;
class inside {
outside * const o_;
inside(outside *o) : o_(o) {}
void func() { o_->x = 0; };
};
};
とかってこと?
0141デフォルトの名無しさん
2005/07/11(月) 18:24:330142デフォルトの名無しさん
2005/07/11(月) 18:29:06それはつまり、表記上ネストして書けるだけで、
実際には別のクラスと考えた方がいいのかな。
Nested Class Member Access
http://gcc.gnu.org/ml/gcc/2004-09/msg00158.html
c++0xだと、内側クラスに全アクセス権が付与されるみたいだけど。
0143デフォルトの名無しさん
2005/07/11(月) 18:32:04何か渡されないとアクセスしようがないではまいか。
0144デフォルトの名無しさん
2005/07/11(月) 22:12:22何故それでアクセスできると思ったの?
javaかなんかと混同してない?
0145デフォルトの名無しさん
2005/07/12(火) 00:00:35>xをoutside::xにしたり、friend class outside;つけたりしましたがダメっぽいですよ。
friend class inside; だが。
0146デフォルトの名無しさん
2005/07/12(火) 00:39:30なんで存在しないと思うの?
typedef char array[100];
typedef array const& cref_array;
この cref_array では>>137の言う「配列へのconst参照」とは違うのか?
0147デフォルトの名無しさん
2005/07/12(火) 06:06:370148137
2005/07/12(火) 07:13:45typedef char array[100];
typedef array const& cref_array4;
//cref_array4 cref4 = a;(const_cast<ref_array>(cref4))[0]='A'; std::cout << cref4[0] << std::endl;//crash
const_castでクラッシュしたからそう思った。(勘違いなのかバグなのか)
0149デフォルトの名無しさん
2005/07/12(火) 09:05:55#include <iostream>
int main()
{
typedef char array[100];
typedef char (&ref_array)[100];
typedef array const& cref_array4;
char a[100];
cref_array4 cref4 = a;(const_cast<ref_array>(cref4))[0]='A'; std::cout << cref4[0] << std::endl;//crash
return 0;
}
ふつうに 'A' が表示されて終了したよ。(cygwin g++ 3.4.4)
なんで const_cast してるのかもよくわからんな。
0150デフォルトの名無しさん
2005/07/12(火) 14:36:010151デフォルトの名無しさん
2005/07/12(火) 20:48:20VC7.1でやってみたがクラッシュしなかった
0152デフォルトの名無しさん
2005/07/12(火) 21:40:11VC7.1でやってみたがクラッシュした。
0153デフォルトの名無しさん
2005/07/12(火) 21:42:38やってないけどクラッシュした
0154デフォルトの名無しさん
2005/07/12(火) 22:04:370155デフォルトの名無しさん
2005/07/12(火) 22:22:13{
char a[100] = {0};
static_cast<char (&)[100]>(a)[0] = 'A';
}
これでも落ちた
0156デフォルトの名無しさん
2005/07/12(火) 22:25:06char (&foo(T& t)) [100]
{
return t;
}
int main()
{
char a[100] = {0};
//static_cast<char (&)[100]>(a)[0] = 'A';
foo(a)[0] = 'A';
}
これだと落ちない
0157デフォルトの名無しさん
2005/07/12(火) 22:37:44aを初期化しないでやると0xccccccccを読もうとして落ちる。
余計に参照剥がしをしているみたいだ。
0158デフォルトの名無しさん
2005/07/12(火) 23:02:000159デフォルトの名無しさん
2005/07/13(水) 00:09:150160デフォルトの名無しさん
2005/07/13(水) 00:23:56↑毒男に見えた・・
0161デフォルトの名無しさん
2005/07/13(水) 00:28:390162デフォルトの名無しさん
2005/07/15(金) 13:06:37std::string から const char* に変換するときに c_str() メソッド
を使う必要がありますが、なんとか省略する方法はないかと悩んでます。
別に省略しなくても処理の上で不都合はないんですが、
一々書くのめんどいよな、というのが理由です。
で、自分なりに方法を考えてみてるんですが、
1)std::string に operator const char*() を実装する
←ビルドする環境全てに手を加えないといけない。移植性が低下する。
2)std::stringを派生させて、そのなかで operator const char*() を実装する。
←無理。std::stringのデストラクタがvirtualで宣言されてないから
(Effective C++ 14項)
3)std::stringクラスの実装をコピペしてクラス名を変えて
その中で operator const char*()を実装する。文字列処理には
そのクラスを使う。
←gccのライブラリに付いてる<string>は、GPLで配布されてるから
ソース非公開のプログラムには使えない。ソース非公開な
プログラムで改変利用OKな実装があれば解決。
4)std::string代替クラスを自力で作って、operator const char*() を実装する。
文字列処理にはそのクラスを使う。
←自力で処理を実装しなくても std::string() に処理を委譲するとか
すれば、デバッグの必要も無い。
他に方法が無いなら 4) で行こうかなと思ってます。
スマートな解決法があれば教えてください。
0163デフォルトの名無しさん
2005/07/15(金) 13:33:33漏れなら単に .c_str() を一々付けて使うけど、それがどうしても嫌なら
class cstring : public std::string {
public:
あれこれコンストラクタを定義
operator const char*() { return c_str(); }
};
で済ませる。このケースで virtual dtor なんかいらない。
0164デフォルトの名無しさん
2005/07/15(金) 13:39:58おいらはstd::stringをprivate継承して
usingでメンバーファンクションをエクスポートかな
operator const char*()はc_strを使う
0165& ◆oEOWZNRqwk
2005/07/15(金) 15:35:59あ、それで良かったんですか。
派生するときには無条件にデストラクタをvirtualにしないと
いけないような気がしてました。今Effective C++読み直してみたら、
「子クラスのメンバが解放されないことがあるからデストラクタ
をvirtualにすること」って書いてたので、どうやらこのケースだと
問題なさそう。これで逝きます。Thx
>>164
using云々がちょっと分からない。privateにする必要も無い気が…
でも返事ありが�d
0166デフォルトの名無しさん
2005/07/15(金) 16:23:59using はただ private メンバを持ってきてるだけだと思うけど
0167デフォルトの名無しさん
2005/07/15(金) 16:26:10確かにprivateにする必要ないかもね。漏れもよく分からん。
0168デフォルトの名無しさん
2005/07/15(金) 17:21:55using の方が全ての転送関数を書くよりもほんの少し楽。
おれはコンポジション派だが。
0169デフォルトの名無しさん
2005/07/15(金) 17:26:55std::string で1バイトずつ2バイト文字かどうか判別しながら使ってるんだけど、
こんな場合例えば std::string::find() とかの2バイト文字対応版みたいなのはどう作るべきかな。
グローバルとか適当なネームスペース内にただの関数として作るとか、
継承して作るとか考えてみたけど、find(str, "hoge") は str.find("hoge") って書きたいし、
普段使うときは std::string で使いたいから、継承するのもコピーしたりのコストがかかるし。
何かしら我慢するしか無いんだろうか…。
0170デフォルトの名無しさん
2005/07/15(金) 17:37:20そういうのはchar_traitsを自分で書けばいい。そしてtypedefする。
class my_char_traits {};
typedef std::basic_string<char, my_char_traits> mbstring;
あるいはstd::char_traits<unsigned char>を特殊化してもいいかもしれない。
0171164
2005/07/15(金) 18:28:55>using の方が全ての転送関数を書くよりもほんの少し楽。
意図してたのはこれです
>>165
class my_string: private std::string {
typedef std::string Base_;
public:
my_string (const char *p): Base_ (p) {}
operator const char*() {return c_str ();}
using Base_::size;
};
こんな感じで必要なメンバ関数をエクスポートしていくと引数
返値の型をいちいち写す必要がないのでちょっと楽かと思います
ちなみにおいらもc_str派
0172デフォルトの名無しさん
2005/07/15(金) 18:34:070173デフォルトの名無しさん
2005/07/15(金) 18:34:27俺の場合、c_str()を呼ぶのは関数の引数に渡す場合が1番多いから、
5) 必要になるたびに関数をオーバーロードする。
自作の関数でなければ自分の名前空間に入れて、usingせずに使っている。
namespace hoge
{
inline BOOL TextOutW(HDC hdc, int nXStart, int nYStart, const std::wstring& str)
{
return ::TextOutW(hdc, nXStart, nYStart, str.c_str(), static_cast<int>(str.length()));
}
}
0174デフォルトの名無しさん
2005/07/15(金) 18:39:08Exceptional C++のitem39に全く同じ質問があるな
0175デフォルトの名無しさん
2005/07/15(金) 20:33:07.c_str()を書く手間を省きたいだけで、関数ごとにそれだけ書くのは耐え難いんじゃないか?
実際には、レガシーなポインタを受けるような関数を使うときは、
何らかの理由で自分でラッパを書くことが多いから、オーバーロードは手間でないのかもしれないが。
// 例えば>>173のコードだと、HDCをメンバ変数に保存するようなファンクタを書くなどで
// 結果的にオーバーロード自体を行う必要があり、ついでにラッパの引数はstringで受けるように
// 書けばよい、など。
0176デフォルトの名無しさん
2005/07/15(金) 22:55:01c_str()を書く手間など
0177デフォルトの名無しさん
2005/07/15(金) 23:17:43そうだな
0178デフォルトの名無しさん
2005/07/16(土) 00:34:34それを器具名でexitと入力されたらそこで終了というプログラムを作りたいのですが
どうやって終了させれば分かりません。
どなたか教えてもらえないでしょうか?
char data[4][20];
while(data[0] != "exit"){
printf("器具名を入力してください(exitで終了)->");
scanf("%s",data[0]);
printf("製造会社を入力してください->");
scanf("%s",data[1]);
printf("型番を入力してください)->");
scanf("%s",data[2]);
printf("製造番号を入力してください->");
scanf("%s",data[3]);
printf("\n");
}
0179デフォルトの名無しさん
2005/07/16(土) 00:36:340180178
2005/07/16(土) 00:37:33実験で使う器具名、その製造会社・型番・製造番号を入力し
それをループさせてexitと入力されたらそこで終了というプログラムを作りたいのですが
どうやって終了させればいいのか分かりません。
どなたか教えてもらえないでしょうか?
0181デフォルトの名無しさん
2005/07/16(土) 00:41:29スレタイを百回声に出して読め。
それでも分からなかったら回線切って首吊って氏ね。
0182デフォルトの名無しさん
2005/07/16(土) 00:47:30分からなかったから回線切ります。マジで。
なんかもうどうでもよくなってきたよ…。あーなんでこんなに働かなきゃいけないんだろ…。
0183デフォルトの名無しさん
2005/07/16(土) 00:48:55お前の人生テラヤバスw
0184デフォルトの名無しさん
2005/07/16(土) 00:54:42逝ってきますね
0185デフォルトの名無しさん
2005/07/16(土) 00:55:460186デフォルトの名無しさん
2005/07/16(土) 00:59:030187デフォルトの名無しさん
2005/07/16(土) 07:46:44何でだよ、178 のプログラムは ISO/IEC14882 で明白に認められているれっきとした C++ プログラムたりうるぞ
おまえこそ規格票を百回声に出して読め、それでわからなかったら回線切って首吊って氏ね
0188デフォルトの名無しさん
2005/07/16(土) 10:43:530189デフォルトの名無しさん
2005/07/16(土) 10:47:15> 何でだよ
printf/scanfはC++では用いられないことが多く、178は<cstdio>をインクルードしたようではない。
となるとCだと想像される。
0190デフォルトの名無しさん
2005/07/16(土) 10:57:080191デフォルトの名無しさん
2005/07/16(土) 10:57:48ソース
>178は<cstdio>をインクルードしたようではない。
ソース
>となるとCだと想像される。
あ、ソースか
0192デフォルトの名無しさん
2005/07/16(土) 11:00:39まぁ他にC言語のスレはたくさんあるんだから、あえてこのスレを選ぶなら
C++の質問のほうがふさわしい。
0193デフォルトの名無しさん
2005/07/16(土) 11:05:41ISO/IEC14882 が定義する範囲じゃないんですか
0194デフォルトの名無しさん
2005/07/16(土) 11:09:54俺自身もC++でstdioを使いまくることもあり、「向こう行け」とは言えないのも事実。
そして何より、最近はCとC++の区別をつけずに
いきなりC++から入る人も多いため、どこまでがCの範囲かわかっていない人も多い。
が、それでもやっぱり「C++スレ」向きじゃないと思う。
0195デフォルトの名無しさん
2005/07/16(土) 11:24:08【初心者歓迎】C/C++室 Ver.19【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1119793525/
0196デフォルトの名無しさん
2005/07/16(土) 11:26:52なにを持って「このスレでのC++」の意味合いとするの?
・住人の多数決の多いほう?
・このスレの >>1 の意見?
・part1の >>1 の意見?
君が常識的に考えてそう思うのならそれで良いのでは?
0197デフォルトの名無しさん
2005/07/16(土) 12:01:44でもあるんだからCスレでやるのが一番なんじゃないの?
C++ 固有が少しでも入ってたらここでやるってのでいいんじゃない?
0198デフォルトの名無しさん
2005/07/16(土) 12:52:56かといって178が擁護するほど意欲が湧く質問じゃなかったというだけの話
0199169
2005/07/16(土) 13:49:34�d。なるほど、そんな手もあるのか。
よく考えたら find(str, "hoge") がダメで「std::string」を使う上にコピーがダメとなれば、
参照を持つクラス作って hoge(str).find("hoge") くらいしか書きようが無いな。
とりあえず char_traits とか試してみる。
0200デフォルトの名無しさん
2005/07/16(土) 14:12:35>>194 の指摘はふまえた上での発言か
C++ と被る言語は C だけではない
どの言語とも被らないことの証明は悪魔の証明
ここよりも妥当なスレがあると主張する者に
そのスレの具体的なアドレスを示して誘導する挙証責任があり、
かつ誘導された者がこのスレでも話せることを別スレで話すかどうかは任意
0201デフォルトの名無しさん
2005/07/16(土) 16:05:500202デフォルトの名無しさん
2005/07/16(土) 16:43:22作者の風貌も最近似てきた
0203デフォルトの名無しさん
2005/07/16(土) 18:35:47所詮はできそこないの言語よ
0204デフォルトの名無しさん
2005/07/16(土) 20:21:29お前は所詮できそこないの人間だけどな。
0205デフォルトの名無しさん
2005/07/16(土) 21:32:52そっちが適当ならそっちへ行くべき。なんだっけか、
「特別法は一般法に優先する」みたいな。
0206デフォルトの名無しさん
2005/07/16(土) 21:45:07Cスレ要らないじゃん
0208デフォルトの名無しさん
2005/07/16(土) 22:29:210209デフォルトの名無しさん
2005/07/16(土) 23:33:100210デフォルトの名無しさん
2005/07/16(土) 23:35:02private:なところにstaticメンバを作るのってどういう意味があるんだ?
そのprivate:のstatic でかつ、constをつけた場合とそうでない場合の意味を教えてくれ。
0211デフォルトの名無しさん
2005/07/16(土) 23:57:26・他に見られたくない定数
0212デフォルトの名無しさん
2005/07/17(日) 00:13:30アクセス指定と、 static にするかしないかは関係ないだろ。
0213デフォルトの名無しさん
2005/07/17(日) 00:37:440214デフォルトの名無しさん
2005/07/17(日) 00:41:40private を使う場面と、 static を使う場面が重なれば private の static になる。それだけだろ。
組み合わせたから特別な意味になるわけじゃない。
さらに const も同様。 >210 は何かを誤解してるんじゃないかと思う。
0215デフォルトの名無しさん
2005/07/17(日) 04:21:50あーそっか!
シングルトンがあったな!そーいや、アレはprivateなstaticだっけな
>>213
そうそう
>>212,>>214
おめーら馬鹿だなぁ、>>211を見習えよ
0216デフォルトの名無しさん
2005/07/17(日) 04:46:58やはり>>210はstaticメンバが何なのかまるでわかってないに一票
0217デフォルトの名無しさん
2005/07/17(日) 04:56:33オブジェクトを生成しなくても利用できるメンバだろ?
static変数に限って言えば、存在範囲が限定されないオブジェクト。
0218デフォルトの名無しさん
2005/07/17(日) 04:59:24どんなときに使うのか、シングルトンみたいな具体例を示してくれってことだ。
オレにいくら、そもそもstaticとは何か、なんて言っても無駄だ。
0219デフォルトの名無しさん
2005/07/17(日) 05:01:37>>211の時点で。
スマートポインタとかそんなとこだろ。
0220デフォルトの名無しさん
2005/07/17(日) 07:16:31class MyString {
static char null;
const char *data;
public:
MyString(const char *s): data(&null) {
if (s && *s) {
data = new ...;
...
}
}
};
みたいなのとか、いくらでもありそうな気がするけど。
0221デフォルトの名無しさん
2005/07/17(日) 09:48:460222デフォルトの名無しさん
2005/07/17(日) 09:49:19ヒント:学歴
0223デフォルトの名無しさん
2005/07/17(日) 12:28:040224デフォルトの名無しさん
2005/07/17(日) 12:56:10>public:やprotected:にstaticメンバがあるのはわかる。
の一行が意味無いっつーか余計で全体の文がワケ分からなくなってる。
0225デフォルトの名無しさん
2005/07/17(日) 13:20:530226デフォルトの名無しさん
2005/07/17(日) 14:08:47クラスの属性です
0227デフォルトの名無しさん
2005/07/17(日) 14:28:230228デフォルトの名無しさん
2005/07/17(日) 14:30:00友情:
0229デフォルトの名無しさん
2005/07/17(日) 14:34:29憎悪:
0230デフォルトの名無しさん
2005/07/17(日) 20:44:05ファイルの一覧を取得したくて下記のfindfirstを使ったのですが引数の*filespecって絶対パスでなければ使用不可能なんでしょうか。
MSDNには「ターゲット ファイルの指定 (ワイルドカードも使えます)」なんて書いてあるんですが、
ためしに相対パスを使用したらEINVAL(Invalid argument)が返ってきちゃいました。
みなさんは相対パスで指定したいときってどうされていますか?
そもそも相対パスなんか使わずに、まず絶対パスを取得して、その後findfirstを使用するのが一般的なんでしょうか。
ご教授ください。
long _findfirst( char *filespec、struct _finddata_t *fileinfo );
0231デフォルトの名無しさん
2005/07/17(日) 20:57:17それはC++標準の関数ではないから、こっちの方が適切と思われる。
Win32API質問箱 Build33
http://pc8.2ch.net/test/read.cgi/tech/1120153520/
0232デフォルトの名無しさん
2005/07/17(日) 21:05:33あくまで C++ の範疇での回答だが・・・
その「相対パス」とやらを、画面に表示してみてはどうだろう
文字列を渡す関数でトラブったときの常套手段で、ものすごく初歩的なミスにがっかりできたりする
0233デフォルトの名無しさん
2005/07/17(日) 21:57:55ちなみに相対パスをコンソールに出力したところ
"..\\Work"
と想定どおりのパスが表示されました。
もちろんディレクトリ未存在ってことはないんですが。。。。
ちなみに絶対パスでは動作確認できました。
0234デフォルトの名無しさん
2005/07/17(日) 21:59:09これは想定どおりなのか…?
0235デフォルトの名無しさん
2005/07/17(日) 22:02:420236デフォルトの名無しさん
2005/07/17(日) 22:06:080237デフォルトの名無しさん
2005/07/17(日) 22:24:03Unicodeでの1文字の表現でどうすれば良いんでしょうか?
asciiだと以下のような感じの場合unicodeだとどうすればよいのか
char hoge = 'a';
WCHAR hoge = 「ここがわかりません」
0238デフォルトの名無しさん
2005/07/17(日) 22:27:34そういう場面でリテラルなんか使うかよ
0239デフォルトの名無しさん
2005/07/17(日) 22:29:27WCHAR hoge = L'a';
0240デフォルトの名無しさん
2005/07/17(日) 22:31:15wchar:うきゃー
俺詠み
0241デフォルトの名無しさん
2005/07/17(日) 22:31:24ああ、それで理解するのですか。
どもでし。
0242デフォルトの名無しさん
2005/07/17(日) 22:32:02かわいいな。
セルJr.のようだ
0243デフォルトの名無しさん
2005/07/17(日) 22:37:420244デフォルトの名無しさん
2005/07/17(日) 22:43:47少なくともC99とかだと\u表記が使えるみたいだな
ソースのエンコーディングを限定していいのなら、
L"あああ"
とか書ける。この辺はコンパイラ依存。
多国語対応が必要 & \u表記が使えないんなら、
wchar_t c = 0x2359;
とか
wchar_t s[] = { 0x1234, 0x2345, 0 };
とか書かざるを得ないだろ
0245デフォルトの名無しさん
2005/07/17(日) 22:55:39\uはC++にも存在する。
0246デフォルトの名無しさん
2005/07/18(月) 03:14:540247デフォルトの名無しさん
2005/07/18(月) 11:36:14unsigned short
fadd_bit(unsigned short x, const unsigned short b) {
if (x & b) {
x = fadd_bit(x, b<<1);
x &= ~b;
} else {
x |= b;
}
return x;
}
unsigned short
fadd(unsigned short x, unsigned short y)
{
while (y) {
unsigned short yy = y&~(y-1);
y ^= yy;
x = fadd_bit(x, yy);
}
return x;
}
0248デフォルトの名無しさん
2005/07/18(月) 13:12:05typedef unsigned short T;
T fadd(T a, T b)
{
while (b) {
T carry = a & b;
a = (a | b) ^ carry;
b = carry << 1;
}
return a;
}
0249デフォルトの名無しさん
2005/07/18(月) 13:14:58C++で名前空間と例外をうまく使わないと
糞プログラムだぞ。
0250デフォルトの名無しさん
2005/07/18(月) 13:20:11でもyとyyのところがよくわららナイッす。
while (y) {
unsigned short yy = y&~(y-1);
y ^= yy;
は
for (unsigned short bit = 1; bit!=0; bit <<= 1) {
yy = y & bit;
と等価と考えていいですか?
0251デフォルトの名無しさん
2005/07/18(月) 13:48:42全加算機実装するのに引き算を使ってるのはいかがなものか
0252246
2005/07/18(月) 14:08:12T fadd2(T a, T b)
{
while (b) {
T carry = a & b;
a = (a ^ b);
b = carry << 1;
}
return a;
}
これで目的のものができそうです。thx all
0253デフォルトの名無しさん
2005/07/18(月) 14:44:09符号付き整数型ならば、確か一番上のbitを上げ下げするだけで可能だと、習った気がします
今は単に
float f;
f *= -1.0f;
とかやってます
0254デフォルトの名無しさん
2005/07/18(月) 14:46:45コンパイラがその程度の最適化もできないとお思いか。
下手の最適化休むに似たりじゃ。いや最悪状況が悪くなる場合まである。
0255デフォルトの名無しさん
2005/07/18(月) 14:47:31f = -f; としてやれば、まともなコンパイラなら一番低コストな方法に
変換してくれる希ガス。
0256デフォルトの名無しさん
2005/07/18(月) 14:53:51整数だって同じだぞ。
最上位ビットの上げ下げで済むならコンパイラがそうするってことで
そういうコードを書けってことではない。
大体2の補数だとそれじゃダメだ。
0257デフォルトの名無しさん
2005/07/18(月) 14:57:220258デフォルトの名無しさん
2005/07/18(月) 15:01:43まぁ、そんなコードをコンパイラに頼らずに一々書くやつは抹殺したくなるが。
0259デフォルトの名無しさん
2005/07/18(月) 15:02:08C++ Gems? 3なんてあったっけ? とかいってみたり
0260253
2005/07/18(月) 15:13:14257さんが気になりますが、コンパイラに任せて255さんのやり方でいきます
0261デフォルトの名無しさん
2005/07/19(火) 05:26:540262デフォルトの名無しさん
2005/07/19(火) 08:54:270263デフォルトの名無しさん
2005/07/19(火) 13:11:34バージョン情報じゃないみたいだし、
検索してみたけど検索キーワードがヘタレなのかヒットしない (;´Д`)
いっそのこと、ファイル名のOEM外の文字を"_"とかに置き換えようかな・・・。
0264デフォルトの名無しさん
2005/07/19(火) 13:34:51そもそも環境依存の話ならスレ違いだが。
0265デフォルトの名無しさん
2005/07/19(火) 13:37:030266デフォルトの名無しさん
2005/07/19(火) 14:18:18VC++のスレだと思い込んでました(゚∀゚;) 逝ってきま
0267デフォルトの名無しさん
2005/07/19(火) 16:13:52DependencyWalkerでUnicodeAPI呼んでるか見たら?^^;;;
0268デフォルトの名無しさん
2005/07/19(火) 21:16:56そんな一般的なTree構造を実現しているtemplateのうち、
比較的標準のものがあったら、教えて頂けないでしょうか
0269デフォルトの名無しさん
2005/07/20(水) 09:29:100270デフォルトの名無しさん
2005/07/20(水) 12:27:16いくつか共通のメソッドが出てくると思うのですが(addChile的やシーク関連等)
その辺のtemplate(!=パターンの)があればなと
0271デフォルトの名無しさん
2005/07/20(水) 16:02:10*&charで宣言はいいんだが、呼び出し側の記述がワカラソ…
0272デフォルトの名無しさん
2005/07/20(水) 16:32:37template <int N>
char (&array)[N] とか。BCCだと通らんぞ。
0273デフォルトの名無しさん
2005/07/20(水) 16:41:290274271
2005/07/20(水) 17:01:000275デフォルトの名無しさん
2005/07/20(水) 17:03:37void f(char (&array)[20]);
で取れるが。呼び出すときは、
char x[20];
f(x);
0276デフォルトの名無しさん
2005/07/20(水) 17:07:15吹き込む2ch宗教だから。
*(onagai_mite + 3); でおk;
「c 参照渡し」とかでぐぐれ。
と、静観してたヤシが言ってみる。
0277デフォルトの名無しさん
2005/07/20(水) 17:21:13g++/bccでテスト。
#include <all> // :P
void f(int* const & array) {
for (int i = 0; i < 10; ++i) array[i] = i;
};
int main() {
int array[10];
f(array);
for (int i = 0; i < 10; ++i) cout << array[i] << endl;
}
0278デフォルトの名無しさん
2005/07/20(水) 18:09:19それが配列の参照か?
0279デフォルトの名無しさん
2005/07/20(水) 18:33:53違うかもしれんw
スマソ、配列を使うことがない(万が一使うとしてもnewしてポインタを受け取る)ので
ANSI/ISO IEC14882見ながら適当に書きました。
一応、reference to pointer版:
void f(int*& array) {}
int main() {
int* pointer_to_array_of_int = new int[10];
f(pointer_to_array_of_int);
};
0280デフォルトの名無しさん
2005/07/20(水) 18:40:14ただのintへのポインタの参照じゃん
int* p = nullpo;
f(p);
0281デフォルトの名無しさん
2005/07/20(水) 19:37:420282デフォルトの名無しさん
2005/07/20(水) 20:17:34string使え。string&で受け取れ。書き換えないならconstをつけろ。
>>280 配列への参照と、配列の先頭アドレスへのポインタへの参照は別物だぞ
0283デフォルトの名無しさん
2005/07/20(水) 20:42:40大事故になりかねない。
若い奴でも調子に乗ればとんでもない殺人を犯すことになる。
プロでも酒を飲めば3人の高校生の命を奪ってしまう最近の交通事故のように
なることもありうるのだ。
JR西日本のような列車事故は焦ったために起きたことだ。
焦りに焦ってバグで人を殺すようなプログラミングをすることは許されない。
私はC++を医療器や航空機に使うことは反対だ。
C++は使い方を誤ると誤って患者や旅客の命を奪いかねない言語だからだ。
だから人の命を奪う恐れが高いC++は普及させないほうがいいと思っている。
時間とかければいいとはいえ、顧客は容赦しない、
「他の言語でやすくできるならなぜC++では安くできないのか?」
と問いつめてくるのだ。そうなると大抵の企業はものを「お客様は絶対的な神様だ」と称して
ものを速く完成させようとすると。すると徹夜残業が増える。徹夜残業しても間に合わないので
C++にしかできないとんでもないスパゲティコードが生まれる。
そしてC++のコードが世に増えれば増えるほど無駄に徹夜する時間が増えてしまう。
C++のコードを貰い受け、引き継ぎ、苦労する後継者が増える。
そして焦りが人の命を奪う。
だから、私はC++だけで作られた自動操縦システムを開発することに反対する。
JR西日本のような列車事故を二度と起こさないためにも。
少なくともC++に厳重なルールとC++の規格が統一されるまでは
C++は普及させないほうがいいだろう。人々の命を救うためにも。
0284デフォルトの名無しさん
2005/07/20(水) 20:50:54cout << sizeof array/sizeof array[0] << endl;
for (int i = 0; i < 10; ++i) array[i] = i;
};
void array_caller()
{
int array[10];
cout << sizeof array/sizeof array[0] << endl;
array_callee(array);
for (int i = 0; i < 10; ++i) cout << array[i] << endl;
}
void vector_callee(vector<int>& array) {
cout << array.size() << endl;
for (int i = 0; i < array.size(); ++i) array[i] = i;
}
void vector_caller()
{
vector<int> array(10);
cout << array.size() << endl;
vector_callee(array);
for (int i = 0; i < array.size(); ++i) cout << array[i] << endl;
}
0285デフォルトの名無しさん
2005/07/20(水) 22:14:50void char_rep(char s[]) const; // Expression of C style character string
0286デフォルトの名無しさん
2005/07/20(水) 22:20:090287デフォルトの名無しさん
2005/07/20(水) 23:19:44そこはこうしようよ。
template<typename Iterator>
void array_callee(Iterator first, Iterator last)
{
cout << distance(first, last) << endl;
for (int i = 0; first != last; ++first, ++i)
*first = i;
}
template<std::size_t N> inline void array_callee(int (&array)[N])
{
array_callee(array, array + N);
}
inline void vector_callee(vector<int>& array)
{
array_callee(array.begin(), array.end());
}
0289デフォルトの名無しさん
2005/07/21(木) 12:33:43つまり配列の参照は使い道がないってことでOK?
0290デフォルトの名無しさん
2005/07/21(木) 12:42:08ハァ?
0291デフォルトの名無しさん
2005/07/21(木) 13:15:31>void f( int* i ); と void f( int i[] ); って同義でしょ?
は確かにそのとおりだけれど
>つまり配列の参照は使い道がない
はなぜ?
0292デフォルトの名無しさん
2005/07/21(木) 13:22:25横レスだけど、配列って元々値渡しじゃないうえ、outパラメータにも
ならないわけだから、積極的に参照を使う理由に乏しいような気がする。
0293デフォルトの名無しさん
2005/07/21(木) 13:30:05低脳は一人で十分
0294デフォルトの名無しさん
2005/07/21(木) 13:37:27使用例プリーズ
0295デフォルトの名無しさん
2005/07/21(木) 13:41:51void print_array(const T (&t)[N])
{
for (unsigned i = 0; i < N; ++i) {
std::cout << t[i] << std::endl;
}
}
せめてこのくらいは思いつかないの?バカ?
0296デフォルトの名無しさん
2005/07/21(木) 13:54:23そのケース、参照にしてると何が嬉しいのか教えてください。
0297デフォルトの名無しさん
2005/07/21(木) 13:58:060298デフォルトの名無しさん
2005/07/21(木) 13:58:34例えば、
template <class T>
void print_array(const T* t, unsigned N)
{ ... }
int n[10];
print_array(n, sizeof(n) / sizeof(n[0]));
ってやるより100倍楽だろうが
マジで脳みそ腐ってんのか?
0299デフォルトの名無しさん
2005/07/21(木) 14:02:070300デフォルトの名無しさん
2005/07/21(木) 14:03:15void print_array(const T t[N])
{
for (unsigned i = 0; i < N; ++i) {
std::cout << t[i] << std::endl;
}
}
>>298
なんでわざわざ参照にしたの?
0301デフォルトの名無しさん
2005/07/21(木) 14:05:59残念ながらそれは
コンパイルが通らなかった。(VC++7.1)
まあ確かに>>298は有効なコードだ。
わずかcountof(n)の数文字書かずに済むだけの
メリットだが。
0302デフォルトの名無しさん
2005/07/21(木) 14:09:43値を書き換える場合を考えたに決まってるだろボケ
つかなんなんだよその糞コード
呼び出すときに
print_array<int, 10>
とでもやれってか?
人間の手を煩わせないようにコンパイラに出来ることをやってもらおうと
してんのにそんなあほらしいこと出来るか
0303デフォルトの名無しさん
2005/07/21(木) 14:10:12配列の参照を使うメリットか・・・
実践的価値は高いが、なんだか納得いかんような。
0304デフォルトの名無しさん
2005/07/21(木) 14:11:18配列の値を書き換える???
例示してみてください。
0305デフォルトの名無しさん
2005/07/21(木) 14:15:17template <class T, unsigned N>
void nullpo(T (&t)[N])
{
for (unsigned i = 0; i < N; ++i) {
t[i] = 0;
}
}
こういうことだろ?
0306デフォルトの名無しさん
2005/07/21(木) 14:18:42志村!上上〜
0307289
2005/07/21(木) 14:22:410308デフォルトの名無しさん
2005/07/21(木) 14:24:44gccでも通んなかったし
0309デフォルトの名無しさん
2005/07/21(木) 14:27:00template <class T, unsigned N>
void print_array(const T *t);
0310デフォルトの名無しさん
2005/07/21(木) 14:28:180311デフォルトの名無しさん
2005/07/21(木) 14:34:140312309
2005/07/21(木) 14:42:18300のコードは関数呼び出しに伴うテンプレートパラメータ推論の際に
引数の配列に対して配列->ポインタの暗黙の変換を試みるために,
結果として呼び出しが無効になる,というべきなのか.
0313デフォルトの名無しさん
2005/07/21(木) 14:42:20耳を塞ぐことにしたみたいだしね。
0314デフォルトの名無しさん
2005/07/21(木) 14:48:18分かったからもう来ないでね(^^:
0315デフォルトの名無しさん
2005/07/21(木) 14:58:20template<typename T, std::size_t N> inline std::size_t numberof(T (&)[N]) {return N;}
0316デフォルトの名無しさん
2005/07/21(木) 15:03:06コンパイル時に定数になってる保証あるの?
0317デフォルトの名無しさん
2005/07/21(木) 15:06:19惜しいね、C++の限界か。
0318デフォルトの名無しさん
2005/07/21(木) 15:16:43ない。
0319デフォルトの名無しさん
2005/07/21(木) 15:29:00マシンが2台あります。(仮にA,Bとします)
マシンAのComnというフォルダが共有されており、Bからアクセス可能です。
この共有フォルダ内にあるアプリのexeファイルがあります。
Bからこのexeをキックし、Aのマシン上のプロセスとして動かしたいのですが、
プログラムでそのような制御は可能でしょうか?
調べたところ、起動したいアプリがサービスなら、OpenSCManager(),OpenService()
などを使えば起動できるようなのですが、サービスではないので…。
0320_/ ̄|○#
2005/07/21(木) 15:46:01消せないファイルがあるんですけどどうやったらいいんでしょうか?
教えてください_| ̄|○
0321デフォルトの名無しさん
2005/07/21(木) 15:47:25ShellExecute()でリモートパス渡してできればナイスだがやったことない
0322デフォルトの名無しさん
2005/07/21(木) 15:58:02ない。でも保証を求める必要もない、かもな。
よほどのヘボ処理系でもない限りは定数になるから。
0323デフォルトの名無しさん
2005/07/21(木) 16:02:43一度使ってみろよ。
int a[10];
int b[numberof(a)];
が通るか?
0324デフォルトの名無しさん
2005/07/21(木) 16:14:09std::vector<int> v = (int []){1, 2, 3, 4, 5};なんてことができるようにするのに使えるんじゃないかと思う。
0325デフォルトの名無しさん
2005/07/21(木) 16:19:05通る通る
0326デフォルトの名無しさん
2005/07/21(木) 16:30:42-srvany.exeを使ってサービスにする
-マシンAのTelnetサービスを有効にして、そこから起動する
-マシンA上で動作し、適切な通信を受ければexeを実行する
(トロイの木馬的)サーバプログラムを常駐させる
-適切なスレで質問する>Visual C++かWindowsプログラミングかそのあたり?
共有フォルダ上の実行ファイルが、リモートでそのまま実行できたら、
セキュリティホールになりそう。
>>array
特に配列でなければならない理由がないのならば、標準ライブラリのコンテナを使え。
0327デフォルトの名無しさん
2005/07/21(木) 16:35:04マジで?コンパイラ何?
つーかそれが定数になるのは
最適化を通すからだろ?
あり得ない話だ。
0328デフォルトの名無しさん
2005/07/21(木) 16:41:020329319
2005/07/21(木) 16:42:12ShellExecute()で、実行するファイル名を"\\xx.xx.xx.xx\\xxx.exe"としてみたんですが、
ローカルで実行されてしまいました。
どうやらこの質問はスレ違いみたいですね。
もうちょっと調査してみます。
0330デフォルトの名無しさん
2005/07/21(木) 17:10:04コンパイル時定数であることと,コンパイル時に定数(即値)に最適化されることを
ごっちゃに議論するのはまずくないですか?
0331デフォルトの名無しさん
2005/07/21(木) 17:29:35class CTask
{
・・・
void* operator new(size_t t);
・・・
};
とあるのですが、これをコンパイルすると
void*の行で " ) が必要 "とエラーになります。
その行をコメントアウトするとコンパイルできます。
(Borland C++ 5.5.1使ってます)
見たところおかしくないと思うんですが、なぜなんでしょうか。
教えてください。
0332デフォルトの名無しさん
2005/07/21(木) 17:37:43class CTask
{
void* operator new(size_t t);
};
これはコンパイルできた。VC++.NET2003
0333331
2005/07/21(木) 18:12:57class CTask
{
void* operator new(size_t t);
};
でコンパイルできない!
class CTask
{
void* operator +();
};
でできるのに!と思ったら、#include <iostream>
してませんでした。これやったらコンパイルできました。
そこでsize_tを定義してるのかな。
borlandだから起きた現象なのですか?
(わざわざインクルードしなきゃいけない事。)
0334デフォルトの名無しさん
2005/07/21(木) 18:17:470335デフォルトの名無しさん
2005/07/21(木) 18:19:210336335
2005/07/21(木) 18:20:510337質問です m(__)m
2005/07/21(木) 19:03:29int *m_pnData;
public:
Class_1 () : m_pnData(NULL) {}
~Class_1 () { Delete(); }
void NewData (int nNum) { m_pnData = new int[nNum]; }
void Delete () { delete [] m_pnData; }
};
class Class_2 {
Class_1 *m_pcObject;
int m_nNum;
public:
Class_2 () : m_pcObject(NULL) { m_nNum = 0; }
~Class_2 () {
for (int i = 0; i < m_nNum; i++)
m_pcObject[i].Delete();
delete [] m_pcObject;
}
void Create () {
m_nNum = 2;
m_pcObject = new Class_1[m_nNum];
m_pcObject[0].NewData(3);
m_pcObject[1].NewData(3);
}
};
0338質問です m(__)m
2005/07/21(木) 19:04:51↑のプログラムはClass_2のデストラクタで、Class_1のDelete()を呼んでるのですが
これで開放できてるんでしょうか?
どなたかお願いします m(__)m
0339デフォルトの名無しさん
2005/07/21(木) 19:10:51Class_1::Delete ()
にプローブでもいれて確かめては?
0340質問です m(__)m
2005/07/21(木) 19:24:50>>337のは実行したらエラーでます orz
もうちょっと考えてみます。
スレ汚し、どうもすみませんでした m(__)m
0341デフォルトの名無しさん
2005/07/21(木) 19:28:33m_pcObject[i].Delete();
これでClass_1::m_pnData[]が解放され、NULLポインタになり、
delete [] m_pcObject;
これでClass_1のデストラクタが呼ばれ、Class_1::Delete()が呼ばれ、NULLポインタの解放
(何も実行しない)が行われる。
Class_1のデストラクタで、生成したオブジェクトを解放しているなら
あえてDelete()メソッドを用意する意味はないと思われる。
同様のことがNewData()メソッドにもいえて、これはコンストラクタでやるべき処理では。
ソースは一部を抜粋してるだけだろうから、一概にいえないけど。
ところで、std::vectorは使いたくないの?
0342341
2005/07/21(木) 19:33:11if (m_pcObject) {
delete[] m_pcObject;
m_pcObject = NULL;
}
とするか、二重解放しないように
for (int i = 0; i < m_nNum; i++)
m_pcObject[i].Delete();
を消すかしないとダメか。
いずれにせよ、NewData()もDelete()メソッドも、コンストラクタ/デストラクタにすべきだと思うよ
0343質問です m(__)m
2005/07/21(木) 19:35:26おお、なるほど。
newでコンストラクタが呼ばれるように、
deleteでデストラクタも呼ばれるんですね。
初めて知りましたww
Class_2のデストラクタは、
m_pcObject を deleteするだけでよかったのかぁ。
std::vectorは、勉強不足でわかりません orz
丁寧なご説明、どうもありがとうございました。
0344デフォルトの名無しさん
2005/07/21(木) 19:47:55hoge = new class; delete hoge;
hage = new class[array]; delete[] hage;
と区別してるわけで
0345341
2005/07/21(木) 19:52:23class Class_1 {
vector<int> m_Data;
public:
Class_1(const int& n) : m_Data(n) {}
};
class Class_2 {
vector<Class_1> m_Object;
public:
Class_2(const int& n) {
m_Object.push_back(Class_1(3));
m_Object.push_back(Class_1(3));
}
};
こうか?
0346質問です m(__)m
2005/07/21(木) 19:59:12int array = 5;
pData = new int[array];
if (array == 1)
delete pData;
else it (array > 1)
delete [] pData;
>>344
どうもです。
普段はarrayを↑みたくフラグっぽく使ってるんですが、
もっとカッコよく開放できる方法って知ってます?
>>345
うう、わからないー。
どもすみません orz
てゆか、>>345はすげーかっこいいww
それで開放できてるんですか。
0347344
2005/07/21(木) 20:04:19new の時に [n] と書いたら、たまたま n が 1 だったとしても delete[] で通してる。
言葉的に 「オブジェクト配列を確保」(でも1個だった) と 「オブジェクトを確保」とを区別したい ってことかな。
0348デフォルトの名無しさん
2005/07/21(木) 20:06:09STLのお勉強をしなさいな。std::vector。
だいたいどのC++の本でも標準コンテナの使い方は載ってると思う。
0349質問です m(__)m
2005/07/21(木) 20:08:30一個だけの確保でも、
delete []
していいんですか?
アフォな質問ですみませんが。
>>348
はい、がむばります。
これが噂のコンテナってやつかww
0350デフォルトの名無しさん
2005/07/21(木) 20:09:54p = new T[..] で確保したなら、...のトコが1でもdelete [] p; で開放できる。
一々 if 分なんかで区別する必要はないです。
0351質問です m(__)m
2005/07/21(木) 20:25:07おお、次々と新事実がww
私の手元の本には、
[] を使うと配列で確保できる
開放する場合も [] を使う
としか書いてないです・・。
今ちょっとためしてみましたが、一個のヤツを [] で開放しても
エラーとかはでないようですね。
どうもありがとー。
0352デフォルトの名無しさん
2005/07/21(木) 20:30:56C言語的配列 ≠ C++語的配列
foo = new T;
hoge = new T[1];
は似ているようで違う。 (最適化で同じになるかもしれんが、本質的に違う機能だ)
○ new T; delete T;
× new T; delete[] T;
× new T[]; delete T;
○ new T[]; delete[] T;
0353341
2005/07/21(木) 20:43:31Class_2(const int& n) {
この引数のnは不要だった。次のコードにしようかどうか迷って消し忘れた:
Class_2(const int& n) : m_Object(n, Class_1(3)) {}
>>351
new T[0]とした場合、要素数0の配列が作られ、戻り値は非NULL値になることにも注意。
あと、実行時エラーがでるかどうかで正しいかどうか判断するのはやめれ(´д`)
最近、実行時引数argvから:
double d = atoi(argv[3]);
としているコードを見たが、これまでそのプログラムが正しく動いていたとはとても思えない。
0354デフォルトの名無しさん
2005/07/21(木) 20:43:55本当ですか?解放する方法は無いんですか?
0355デフォルトの名無しさん
2005/07/21(木) 20:54:58>double d = atoi(argv[3]);
何が問題?
勿論argcが4以上として。
0356デフォルトの名無しさん
2005/07/21(木) 21:02:09double 型の変数に整数を入れてはいけません教の人なんだと思う。
0357デフォルトの名無しさん
2005/07/21(木) 21:05:490358デフォルトの名無しさん
2005/07/21(木) 21:08:18> vectorでclear()しても確保されたメモリは解放されないというのは
>本当ですか?
実装依存だが、大抵は本当
>解放する方法は無いんですか?
swap
0359デフォルトの名無しさん
2005/07/21(木) 21:09:57vectorは、効率のために、保持しているオブジェクトの数以上のメモリを確保している(capacity)ので
実装によってはメモリを「完全に」解放しきらないかもしれない。
>>355
argv[3]は実数値を指定する(実際には0<=d<=1の値を受け取る)仕様で、
ここでatoiで常に0か1を返していても実行時エラーはでないが、正しく動作していないと思われる。
エラーがでるかどうかで正しいコードかどうか判断することは危険だという例示のつもりだったけれど
説明不足すぎてわかんないなスマソ
0360デフォルトの名無しさん
2005/07/21(木) 21:17:48だめだスレ追いきれねぇ。
なんで double d = atoi(argv[3]); が出てきたんだ?
0362デフォルトの名無しさん
2005/07/21(木) 21:22:10の例として >>353 の実体験で
実数値を指定するargv[3]に対し double d = atoi(argv[3]); としている奴が居た。
という >>353 以外絶対分からない例を挙げた。
この流れでOK?
0363341
2005/07/21(木) 21:27:19その通りであります。漏れにしか絶対分からない例を挙げてすいませんでした。
スレ汚しすいませんでした。
そろそろスレ常駐を終わり帰るます(´д`)
0364デフォルトの名無しさん
2005/07/21(木) 23:02:49ax2+bx+c=0 の解です。
0365デフォルトの名無しさん
2005/07/21(木) 23:04:250366デフォルトの名無しさん
2005/07/21(木) 23:14:180367デフォルトの名無しさん
2005/07/21(木) 23:34:20好きな方法を使いたまえ。
1. 解の公式
2. Newton法
3. Laguerre法
以上のどれかをPHPで実装すること。
俺はPHPは知らんがどの言語でもアルゴリズムあってのものなので。
以上。
0368デフォルトの名無しさん
2005/07/21(木) 23:34:400369デフォルトの名無しさん
2005/07/21(木) 23:40:570370デフォルトの名無しさん
2005/07/22(金) 01:05:40あーそれ、たぶんコンパイラの拡張だから。 gcc かなんか使ってるんじゃない?
--
#include <cstddef>
template<typename T, std::size_t N> inline std::size_t numberof(T (&)[N]) {return N;}
int a[10];
int b[numberof(a)];
--
・gcc -pedantic
:4: error: ISO C++ forbids variable-size array `b'
:4: error: variable-size type declared outside of any function
・msvc
(4) : error C2057: expected constant expression
(4) : error C2466: cannot allocate an array of constant size 0
0371デフォルトの名無しさん
2005/07/22(金) 01:17:04>>342 ヌルポインタに対する delete は「何もしない」で正解です。
0372370
2005/07/22(金) 01:23:400373デフォルトの名無しさん
2005/07/22(金) 09:17:35それって
int f(){
static const bool b = false;
if(b){
return;
}
else{
return 0;
}
};
が通ったりするの?
だとすると、便利とは思うけど
やりすぎな気が。
0374デフォルトの名無しさん
2005/07/22(金) 16:07:17どうやるんでしょうか?
operator=( hoge());
こうやるしかない?
0375デフォルトの名無しさん
2005/07/22(金) 16:36:40これって商用利用可能でしょうか?
マイクロソフトのサイトを見たのですが書いてないのです。
あと、「C++ならこれより他のツールがいいよ」とかありましたら教えてくれませんでしょうか。
スレ違いでしたらごめんなさい。
0376デフォルトの名無しさん
2005/07/22(金) 17:45:13new (this) hoge();
this->~hoge()を呼び出さずに動かした時にどうなるかは知らんが
0377デフォルトの名無しさん
2005/07/22(金) 23:35:57それ、 if(0) return; else return 0; でも通らないだろ。
コンパイル時定数とは関係無い。
0378デフォルトの名無しさん
2005/07/23(土) 15:14:52ループの中とかでもいいんですか?
for(){
int x;
…
}
int x;
for(){
…
}
どっちが良いんだろ(゚д゚)
0379デフォルトの名無しさん
2005/07/23(土) 15:17:19もしintがユーザー定義型でコンストラクタに時間がかかるのであれば
最適化という意味で後者の書き方をするときもある。
0380デフォルトの名無しさん
2005/07/23(土) 15:20:04なるほど。サンクス。
0381デフォルトの名無しさん
2005/07/23(土) 15:22:26極稀にforとかifとかの中でしか使わないような
変数も全部ひっくるめて関数の最初で宣言しろ
っていう変なオッサンがいるけど、相手にしないように
0382デフォルトの名無しさん
2005/07/23(土) 15:53:12ヒント:C
0383デフォルトの名無しさん
2005/07/23(土) 16:02:080384デフォルトの名無しさん
2005/07/23(土) 16:03:310385デフォルトの名無しさん
2005/07/23(土) 16:04:55Cでもこういうことやっちゃうからね
void hoge(void)
{
…
{ /* ココでローカルスコープ (1)*/
…
}
…
{ /* ココでローカルスコープ (2)*/
…
}
}
0386デフォルトの名無しさん
2005/07/23(土) 18:49:23これを静的なインスタンスとして確保した場合は、
アプリケーション終了前に、デストラクタとは別の手段で
明示的にdeleteを呼び出す必要が有るんでしょうか?
0387デフォルトの名無しさん
2005/07/23(土) 18:51:500388デフォルトの名無しさん
2005/07/23(土) 18:53:32つーか、どうやってdeleteするつもりだ。
それはそうと、アプリ終了時にデストラクタが呼び出されるかどうかも怪しい。
0389デフォルトの名無しさん
2005/07/23(土) 19:09:17使用時にリークさえなければ、終了時の処理は適当で良いって事かワーイ
0390デフォルトの名無しさん
2005/07/23(土) 19:16:52STLに例えると、必要ないのに明示的にclear()を呼び出す感じのを考えていました。
ありがとうございます、気にせず行きます。
0391デフォルトの名無しさん
2005/07/23(土) 19:30:12どうやってアプリを終了させるつもりか知らないが、mainの後には当然デストラクタが呼ばれる。
0392デフォルトの名無しさん
2005/07/24(日) 12:54:10PTSDか何かだろうか?
0393デフォルトの名無しさん
2005/07/24(日) 12:58:16関数の規模が大きくなければ別にいいんじゃねとか思う
0394デフォルトの名無しさん
2005/07/24(日) 13:05:39トラウマというよりトラコーマ
0395デフォルトの名無しさん
2005/07/24(日) 13:05:53全部の変数が使用される直前になってから宣言されてるコードも読みたくないけどな
0396デフォルトの名無しさん
2005/07/24(日) 13:09:57Cでこんな風に書く奴少ないだろ、>>385。
C++での途中宣言のメリットとほぼ同じ効果が得られるにもかかわらず。
それと同じ。
途中宣言止めるべきとは俺は言わないが、自分のスタイルを変えるほどの
インパクトが途中宣言にはない。それだけ。
0397デフォルトの名無しさん
2005/07/24(日) 13:12:460398デフォルトの名無しさん
2005/07/24(日) 13:15:320399デフォルトの名無しさん
2005/07/24(日) 13:40:28などの理由ではなく、むしろその辺を犠牲にしても「保守性をあげた
い」などの人間にとって管理しやすい点を重視したから。
「後からみたときに、および他人が見たときにどちらが分かりやすい
か?」と考えから、俺は先頭で宣言するスタイルを選択した。
「”for(i”・・・iって宣言したっけな?」などとソース全体を見渡すのが
面倒だから。
0400デフォルトの名無しさん
2005/07/24(日) 14:00:080401デフォルトの名無しさん
2005/07/24(日) 14:09:39保守性を考慮すればこそ、使用箇所での宣言を取るべきだろ。
0402デフォルトの名無しさん
2005/07/24(日) 14:09:400403デフォルトの名無しさん
2005/07/24(日) 14:09:48某環境ではバグあるからなぁそれ。
0404デフォルトの名無しさん
2005/07/24(日) 14:10:580405デフォルトの名無しさん
2005/07/24(日) 14:23:310406デフォルトの名無しさん
2005/07/24(日) 14:25:370407デフォルトの名無しさん
2005/07/24(日) 14:26:270408デフォルトの名無しさん
2005/07/24(日) 14:26:490409デフォルトの名無しさん
2005/07/24(日) 14:27:300410デフォルトの名無しさん
2005/07/24(日) 14:29:400411デフォルトの名無しさん
2005/07/24(日) 14:36:52変なマクロに「しちまう」奴がよくいるだけ
本当に必要なケースはまれ
0412デフォルトの名無しさん
2005/07/24(日) 14:44:42具体的にどうぞ
0413デフォルトの名無しさん
2005/07/24(日) 14:59:19for のスコープなんて
int i;
for(i = 0; 〜
でいいんだよ
for(int i = 0;
が使いたくなる心理はあるが
想定要件よりも優先することなどない
むしろ旧仕様とわかっている処理系で
マクロにしてあるから for(int i = 0; を使えと言われる方が強い抵抗を感じる
(この心理もコーディング基準より優先しないが)
0414デフォルトの名無しさん
2005/07/24(日) 15:01:000415デフォルトの名無しさん
2005/07/24(日) 15:23:05マクロが使ってあっても前者の書き方は許されるだろ。
必要ない場所では後者で書くように言われるかもしれないが、
それは「マクロにしてあるから」じゃないだろう。
0416デフォルトの名無しさん
2005/07/24(日) 15:27:580417デフォルトの名無しさん
2005/07/24(日) 15:37:440418デフォルトの名無しさん
2005/07/24(日) 15:41:390420デフォルトの名無しさん
2005/07/24(日) 15:48:170421デフォルトの名無しさん
2005/07/24(日) 15:56:42自分はスコープ最小原理主義者です。
#include<iostream>
struct I
{
int i;int j;int k;
I()
{
int j;//後から変数を宣言するのは気をつけよう
{int i=100;//深いスコープでは重複に気をつけよう}
{ j=100;}
{ k=100;}
}
};
int main(){I i;
std::cout << i.i << std::endl;
std::cout << i.j << std::endl;
std::cout << i.k << std::endl;
}
0422デフォルトの名無しさん
2005/07/24(日) 15:56:55道具をスペックどおりに使うというだけのこと
必要でないギミックは使わないのが基本だよ
0423デフォルトの名無しさん
2005/07/24(日) 16:41:48このスレ超臭い
0424デフォルトの名無しさん
2005/07/24(日) 17:07:340425デフォルトの名無しさん
2005/07/24(日) 17:46:250426デフォルトの名無しさん
2005/07/24(日) 18:25:38それはそうだ。あとは意識の問題。
VC6でプログラミングしているのか、
C++でプログラミングしているのか。
必要でない限り環境に依存させないのも基本だろうと思うので、
後者を基本とするべきじゃないか?
それでも、VC6にはそれを否定するだけの負のポテンシャルがあるのは認める。
0427デフォルトの名無しさん
2005/07/24(日) 18:32:380428デフォルトの名無しさん
2005/07/24(日) 18:36:270429デフォルトの名無しさん
2005/07/24(日) 18:41:390430デフォルトの名無しさん
2005/07/24(日) 18:47:530431デフォルトの名無しさん
2005/07/24(日) 18:54:550432デフォルトの名無しさん
2005/07/24(日) 18:57:100433デフォルトの名無しさん
2005/07/24(日) 19:10:17実際自分のIPアドレスってのは常に複数あって
宛先などからルーティング情報などによって選択されるので
単に「自分のIPアドレス」といっても何が適切か分からん品
勉強した上でネットワークプログラミングスレあたりで。
0434デフォルトの名無しさん
2005/07/24(日) 19:19:41スレ違いにレスしている時点でなんだが
0435デフォルトの名無しさん
2005/07/24(日) 19:29:26的外れではなく、間違ってるんだよ
0436デフォルトの名無しさん
2005/07/24(日) 19:32:51で、そのポインタから子クラスのメソッドが使えちゃったりはするはずないよな?
0437デフォルトの名無しさん
2005/07/24(日) 19:37:580438デフォルトの名無しさん
2005/07/24(日) 19:40:030439デフォルトの名無しさん
2005/07/24(日) 19:51:200440デフォルトの名無しさん
2005/07/24(日) 19:53:39どっか内容間違ってる?
まあこのスレに書くことが間違いってのならそうだが
0441デフォルトの名無しさん
2005/07/24(日) 19:55:33うーんとね、前半の3行くらいがちょっと。
最後の一行はごもっとも。
0442デフォルトの名無しさん
2005/07/24(日) 20:00:280443デフォルトの名無しさん
2005/07/24(日) 20:12:160444デフォルトの名無しさん
2005/07/24(日) 20:14:03>438
それで安心しました。thx
0445デフォルトの名無しさん
2005/07/24(日) 21:04:44しかも相手が妊婦で流産までさせてしまったそうだ。示談にするから
金振り込めっていうし電話の向こうで俺は泣いてるし、いったい俺は
どうしたらいいんだ
0446デフォルトの名無しさん
2005/07/24(日) 21:06:06C++の話を汁
0447デフォルトの名無しさん
2005/07/24(日) 21:08:03deleteしてしまえばOK
0448445
2005/07/24(日) 21:13:35なるほど、それで安心しました。thx
0449デフォルトの名無しさん
2005/07/24(日) 21:21:170450デフォルトの名無しさん
2005/07/24(日) 21:47:14振込先を聞いて警察に通報しr
0451デフォルトの名無しさん
2005/07/24(日) 21:49:190452質問です
2005/07/24(日) 22:05:26このメモリに、あるファイルの完全パスの文字列が割り当てられています。
このパスの2階層上のフォルダパス文字列を
CString型の変数に割り当てる処理を行おうとしております。
Ex)”C:\test\test1\hogehoge.cpp” -> "C:\test"
C++で上記処理を行う場合、どのような処理方法が一般的なのでしょうか?
よろしくお願いいたします。
0453デフォルトの名無しさん
2005/07/24(日) 22:17:07CStringがそもそも一般的じゃありませんから。
0454デフォルトの名無しさん
2005/07/24(日) 22:18:170455デフォルトの名無しさん
2005/07/24(日) 22:24:17(つェ`)えーん
VC専用スレがみつからなかったんですよ。
【VC++】プログラム作成に手を貸して下さい!!
スレなんですかね?板汚しすまそんでした。。
他のスレは過疎ってそうなのでwebでも少し探してみます。ありがとうでした
0456デフォルトの名無しさん
2005/07/24(日) 22:30:09shlwapi.hのPathRemoveFileSpecを2回呼べば?
あとVCのスレはここね。こんな名前だからVCじゃ引っかかるわけないな。
★初心者にVisual C++を教えるスレ★ Part20
http://pc8.2ch.net/test/read.cgi/tech/1120222322/l50
0457デフォルトの名無しさん
2005/07/24(日) 22:38:40ぎゃ・・・検索が甘すぎでした
PathRemoveFileSpec
お、こんな便利なAPIがあったんですね、これで試してみます。
ありがとうございました。
0458デフォルトの名無しさん
2005/07/25(月) 11:21:380459デフォルトの名無しさん
2005/07/25(月) 11:23:330460デフォルトの名無しさん
2005/07/25(月) 11:43:36うまくいく場合と行かない場合があります。
ファイルから1行読み込み、2桁の数字、5桁の数字、12桁の英数文字
を抜き取る作業なのですが関数の使い方は合っているでしょうか?
----------------------------------------
FILE *fp;
int a, b;
char str0[256];
char str1[256];
fp = fopen ("M:\\test\\data1.txt", "r");
if (fp == NULL) exit (-1);
while (fscanf (fp, "%s", str0) != EOF) {
strncpy (str1, str0, 2);
a = atoi (str1);
strncpy (str1, str0 + 3, 5);
b = atoi (str1);
strncpy (str1, str0 + 9, 12);
keisan1 (hwnd, a, b, str1);
}
fclose (fp);
---------------------------------------
データファイルの中身
01,23456,abc456ghijkl
52,63481,vwxyz.abcdef
:
:
0461デフォルトの名無しさん
2005/07/25(月) 11:49:06strncpyは指定された文字数ちょうどをコピーしたときには文字列終端の'\0'を書き込まないため。
0463デフォルトの名無しさん
2005/07/25(月) 12:54:270464デフォルトの名無しさん
2005/07/25(月) 13:54:29なして?
0465デフォルトの名無しさん
2005/07/25(月) 14:40:23>>460のケースだと、固定幅フィールドファイルではなく、CSVファイルに見えたから。
であるなら、車輪の再開発はしなくてもいいのにと思った。
ただ、ソースコードはCコンパイラでコンパイルできるものなので、
C++は使えない環境なのかもしれないとも思った。
C++は使えても、boostは使えない環境なのかもしれないとも思った。
0466デフォルトの名無しさん
2005/07/25(月) 14:51:30このスレではC++が使えない環境のことは考えなくていいんでは
boostは使えないかもしれないけど
0467デフォルトの名無しさん
2005/07/25(月) 15:01:06もちろんboost::tokenizerとは挙動がいろいろと違うけれどね。
0468デフォルトの名無しさん
2005/07/25(月) 15:29:250469デフォルトの名無しさん
2005/07/25(月) 16:43:56素直にTSVつかっとけよ
0470デフォルトの名無しさん
2005/07/25(月) 19:52:55毎回コーディングし直すからうざいんちゃうの?
0471デフォルトの名無しさん
2005/07/25(月) 20:14:470472デフォルトの名無しさん
2005/07/25(月) 20:26:120473デフォルトの名無しさん
2005/07/26(火) 04:59:30なので,低い程よくなります.そこで,1試合ごとの投球回数と失点数
を入力し,「全試合を通しての防御率」と「最近5試合の防御率」を入
力するたびに計算するプログラムを作ってください.ただし,1/3 回
のようなアウトカウントによる投球回数は考えず,投球回数単位で計算
するものとします.
下の表に出ている値で正しいかどうかを確認してください.
なお,最大140試合まで入力できるようにしてください.また,
日本のプロ野球では,延長戦は12回までなので,投球回数に12より
大きい数値は入らないようにしてください.
0474デフォルトの名無しさん
2005/07/26(火) 06:08:09マルチ氏ね。そもそもスレ違い
0475デフォルトの名無しさん
2005/07/26(火) 07:33:55クラスの継承で、アクセスコントロールをメンバ関数個別に設定する事は可能でしょうか?
たとえば、
class A{
...
public:
void Func1();
void Func2();
};
class B : public A{
...
};
の時、
「クラスAのオブジェクト → 外部からFunc1,Func2両方アクセスできる」
という条件を維持したままで、
「クラスBのオブジェクト → 外部からFunc1はアクセス可だが、Func2は不可」
のような設定を実現する方法はあるでしょうか。
0476475
2005/07/26(火) 07:45:43継承先のクラスでprivateで多重定義すればよかったですね。
0477デフォルトの名無しさん
2005/07/26(火) 08:26:46class A {
public:
void Func1();
void Func2();
};
class B : public A {
void Func2();
};
こういうことならこうできるけどいい?
B obj;
obj.A::Func2();
0478デフォルトの名無しさん
2005/07/26(火) 09:05:15で、再定義するよりも、public部で公開したいものをusingする方が
メンテ上ベターでしょう。
0479475
2005/07/26(火) 11:15:22>private継承ということではなかろうか。
はい、そうです。
478さんの方法を試してみます。
勉強になります。
0480475
2005/07/26(火) 13:09:40private継承して継承先からはアクセス不可にしておきたい基底クラスのメンバはごく一部で、
継承先のpublic部でusingして公開しようとしているメンバの方が数が圧倒的に多いです。
そのため、今478さんの方法を試そうとしているのですが、
継承先のpublic部にかなりたくさんのusing記述をする事になってしまいそうです。
他に、継承先クラスから基底クラスの一部のメンバだけを個別にアクセス制限
できるような方法はないものでしょうか。
継承クラス関係で調べているのですがなかなかそういう方法がみつかりません。
0481デフォルトの名無しさん
2005/07/26(火) 13:16:47無理かもしれんが、クラスがでかすぎるようなら
役割でクラスを分割して複数のオブジェクトにするといいかも
0482デフォルトの名無しさん
2005/07/26(火) 13:17:54struct base
{
void a();
void b();
void c();
};
struct derived : base
{
private:
void c() { base::c(); }
}:
0483デフォルトの名無しさん
2005/07/26(火) 13:18:59publicで継承して、見せたくない部分だけprivateでusingすればいいんじゃね?
0484デフォルトの名無しさん
2005/07/26(火) 15:22:06>private継承して継承先からはアクセス不可にしておきたい基底クラスのメンバはごく一部で、
>継承先のpublic部でusingして公開しようとしているメンバの方が数が圧倒的に多いです。
を理由に
>>482
>publicで継承して、見せたくない部分だけprivateでusingすればいいんじゃね?
はあんまり良くないと思うよ
public継承ってことは
基底クラスの参照ポインタで普通にアクセスできてしまうからね
0485デフォルトの名無しさん
2005/07/26(火) 16:18:19char *run()
{char *dp,d[]="running";
dp=d;
return dp;
}
void main()
{char *tp,t[10];
tp=t;
tp=run();
cout << tp << endl;
}
何分基本的な事で申し訳ありません
文字列を返す関数を作りたいのですが、上記のもの実行すると
running・↕ฺと、お呼びでないものも表示されてしまうのです
多分メモリが解放されている為だと思うのですが、何か良い方法は有りませんか?
0486デフォルトの名無しさん
2005/07/26(火) 16:35:00std::string
0487デフォルトの名無しさん
2005/07/26(火) 16:35:50{まず、中括弧をキモイ位置に配置するのはやめなさい。
}
const char* run() {
const char*dp="running";
return dp;
}
0488デフォルトの名無しさん
2005/07/26(火) 16:40:04char *dp="running";
return strcpy(s,dp);
}
0489デフォルトの名無しさん
2005/07/26(火) 16:55:400490デフォルトの名無しさん
2005/07/26(火) 17:09:32>#include <iostream.h>
アナクロすぎ。
文字列を返す関数が欲しいだけなら
const char * run() {return "running";}
でいい。
0491デフォルトの名無しさん
2005/07/26(火) 20:17:08template使うときにこれが障害になることがかなり多いんだけど。
0492デフォルトの名無しさん
2005/07/26(火) 20:28:56え? そういう必要があるときに template 使うよ??
0493デフォルトの名無しさん
2005/07/26(火) 20:31:39for ( int a = 0, unsigned int b = 0; a < 10; a++, b++ ) {
}
これってなぜにダメなのでしょう?
初期値に宣言でおけるのは1つだけ?
おとなしく
unsigned int b = 0;
for ( int a = 0; a < 10; a++, b++ ) {
}
としておけということ?
0494デフォルトの名無しさん
2005/07/26(火) 20:32:55型は1つですよ
0495デフォルトの名無しさん
2005/07/26(火) 20:33:43unsigned は予約語なので変数名になれない
コンパイラは心を持たない
0496493
2005/07/26(火) 20:34:18ちと言葉足らずでしたが
for内だけのスコープを持つ変数宣言は1つしかできないのか?
という意味です
for ( a = 0, b = 0; a < 10; a++, b++ )
ができるのはわかっています。
0497493
2005/07/26(火) 20:34:54いくつでもできる気がしてた・・
0498デフォルトの名無しさん
2005/07/26(火) 20:36:43俺んとこではダメだったけど、これなら通ってもよさそうな気がする
for ( (int a = 0), (unsigned int b = 0); a < 10; a++, b++ ) {
}
0499デフォルトの名無しさん
2005/07/26(火) 20:37:56そいつは無理な相談
0500デフォルトの名無しさん
2005/07/26(火) 20:38:32なんで?
0501デフォルトの名無しさん
2005/07/26(火) 20:46:55規格の文法上不可能だから。
ISO/IEC 14882:1998 Annex A Grammar summaryより
for ( for-init-statement condition(opt) ; expression(opt) ) statement
for-init-statement:
expression-statement
simple-declaration
expression-statement:
expression(opt) ;
simple-declaration:
decl-specifier-seq(opt) init-declarator-list(opt) ;
decl-specifier-seq:
decl-specifier-seq(opt) decl-specifier
decl-specifier:
storage-class-specifier
type-specifier
function-specifier
friend
typedef
init-declarator-list:
init-declarator
init-declarator-list , init-declarator
init-declarator:
declarator initializer(opt)
0502493
2005/07/26(火) 21:04:07↑はgcc拡張だったぽ・・
通常規約上だめなのかも・・ちなみにVCだめ
gccばっかつかってたためか標準でおkかとおもてた
orz
0503デフォルトの名無しさん
2005/07/26(火) 21:04:49オブジェクトの定義を囲う括弧が実行文でなくなる制限についての関連事項はどこだ?
0504デフォルトの名無しさん
2005/07/26(火) 21:12:40namespace
で細かい分類をするのって薦められるやりかたなのでしょうか?
こんな感じです
MyLib::SubsDataA::sub1(){ .. }
MyLib::SubsDataB::sub1(){ .. }
MyLib::SubsDataC::sub1(){ .. }
0505デフォルトの名無しさん
2005/07/26(火) 21:14:01それを>501はそのまんま書いているわけなんだけど……。
もしかして規格書の文法記述読めない?
0506デフォルトの名無しさん
2005/07/26(火) 21:18:49for-init-statementの内のsimple-declarationでは無理として(見ての通り)、
expression-statementの方のことを言っているのなら、expression-statementの
文法を実際に見てみれば、expression-statementの中ではオブジェクトの定義が
出来ないことは分かる。
0507501
2005/07/26(火) 21:24:28for-init-statementの内のsimple-declarationでは無理として(見ての通り)、
expression-statementの方のことを言っているのなら、expression-statementの
文法を実際に見てみれば、expression-statementの中ではオブジェクトの定義が
出来ないことは分かる。
0508501
2005/07/26(火) 21:27:55for-init-statementの内のsimple-declarationでは無理として(見ての通り)、
expression-statementの方のことを言っているのなら、expression-statementの
文法を実際に見てみれば、expression-statementの中ではオブジェクトの定義が
出来ないことは分かる。
0509501
2005/07/26(火) 21:30:02for-init-statementの内のsimple-declarationでは無理として(見ての通り)、
expression-statementの方のことを言っているのなら、expression-statementの
文法を実際に見てみれば、expression-statementの中ではオブジェクトの定義が
出来ないことは分かる。
0510デフォルトの名無しさん
2005/07/26(火) 21:30:210511デフォルトの名無しさん
2005/07/26(火) 21:33:30VCとCWで拡張なしで普通に通ったよ?
int main()
{
int a, b;
for (a = 0, b = 0; a < 10; a++, b++){}
}
0512デフォルトの名無しさん
2005/07/26(火) 21:42:32全然わかんねえ
何だその説明は?
0513デフォルトの名無しさん
2005/07/26(火) 21:53:340514デフォルトの名無しさん
2005/07/26(火) 21:58:45全然わかんねえ
何だその説明は?
0515デフォルトの名無しさん
2005/07/26(火) 22:04:370516デフォルトの名無しさん
2005/07/26(火) 22:09:36カンマ演算子自体はC時代から普通に使えるよな
0517501
2005/07/26(火) 22:12:360518デフォルトの名無しさん
2005/07/26(火) 22:14:50それ(a=0, b=0)は宣言ではなくてexpressionだから。
えー、pc8鯖が強烈に重いので、多重注意しておくれ。
0519デフォルトの名無しさん
2005/07/26(火) 22:20:53C++相談室で回答者やる程度にはC++と規格書の読み方に関する知識がある人間じゃない?
0522デフォルトの名無しさん
2005/07/26(火) 23:15:070523デフォルトの名無しさん
2005/07/27(水) 00:53:120524デフォルトの名無しさん
2005/07/27(水) 02:53:19必要なメモリ量=実行ファイルの大きさ
で合ってます??くだらない質問ですいません。
0525デフォルトの名無しさん
2005/07/27(水) 03:06:22初めから終わりまで全く違います。
0526デフォルトの名無しさん
2005/07/27(水) 03:22:34>くだらない質問
0527デフォルトの名無しさん
2005/07/27(水) 03:24:44そのようですね。
0528デフォルトの名無しさん
2005/07/27(水) 03:25:14むしろCの方がどのくらいメモリを使うかは分かりやすいかと。
あまりそういう細かいことを知らなくても人の作った部品をうまく
組み合わせて全体を作るためのオブジェクト指向でもあるわけだし。
0529デフォルトの名無しさん
2005/07/27(水) 04:05:06こういう感じの。
struct A
{
int x;
int y;
std::vector<int> vect;
};
0530デフォルトの名無しさん
2005/07/27(水) 04:07:450531デフォルトの名無しさん
2005/07/27(水) 04:08:31何がやりたいのか意味が分からん
0532デフォルトの名無しさん
2005/07/27(水) 04:10:01それは激しく環境依存。
0533デフォルトの名無しさん
2005/07/27(水) 04:11:25memcpyとかでは使えない
0534デフォルトの名無しさん
2005/07/27(水) 04:12:25コピーコンストラクタを持たせるべき
0535デフォルトの名無しさん
2005/07/27(水) 04:30:49いったいどこが?
0536デフォルトの名無しさん
2005/07/27(水) 04:56:15structの中にstd::vectorを入れることはできるし、std::vectorを使うことが直接的な問題は引き起こさない。
ただし、セオリーとして、std::vectorを使うときはコンストラクタでだいたいの大きさを指定する:
A() : vect(1000) {} // A::vectはほとんどのケースで1000程度の要素数を持つと予想されるとき
これはパフォーマンスのためと、そのクラスがどの程度のデータを扱うことを想定しているかのヒントのため。
>>534
コピーコンストラクタは、ポインタをメンバに持つときに定義するべきでは?
std::vectorなら、コンパイラが暗黙に定義するコピーコンストラクタで問題ないはず。
0537デフォルトの名無しさん
2005/07/27(水) 06:38:37全然わかんねえ
何だその説明は?
0538デフォルトの名無しさん
2005/07/27(水) 06:58:01それはクラスになっちゃうのでクラスの性質がよくわからない人はやっちゃダメです。
0539デフォルトの名無しさん
2005/07/27(水) 07:29:050540デフォルトの名無しさん
2005/07/27(水) 09:41:33ん? そういうヒントのためにはvector::reserveを使うべきでは?
いや、最初から1000の要素が必要ならそれでも良いけど。
0541デフォルトの名無しさん
2005/07/27(水) 11:17:38>>536 そんなセオリーもありません。プログラムの都合にあわせて好きにすればいいはずです。
>>538 C++での「クラス」と「構造体」に性質の違いはありません。
0542デフォルトの名無しさん
2005/07/27(水) 11:19:09なにこの板。
0543デフォルトの名無しさん
2005/07/27(水) 12:08:41そこがハッキリしてないな。
0544デフォルトの名無しさん
2005/07/27(水) 12:11:19それぐらい知ってますよ
C++でいう構造体とクラスは本質的には同じ物で、何も書かなかった時にデフォルトでpublicかprivateになるという違いがあるだけでしょう?
0545デフォルトの名無しさん
2005/07/27(水) 12:52:38じゃあ何が聞きたいんだよ
人間初心者はお断りだぞ
0546デフォルトの名無しさん
2005/07/27(水) 13:18:41これでモーマンコタイ
0547デフォルトの名無しさん
2005/07/27(水) 13:38:57漏れが危惧したのは、質問者がいう「構造体」とは何かということだった。
ふつうC++プログラマであれば、structとclassに本質的な違いを設けないし、
それゆえstructであっても「クラス」と表現すると思ったからだ(妄想かもシレンが)。
ここはC++スレだが、明らかにC言語の質問も結構書き込まれるからな。
std::vectorをメンバに持たせたとき、「C言語の構造体」にできるすべての操作が保証されるか?
という質問に見えた。
おそらくそれで他の回答者もmemcpyが使えない(PODでないため)とか、
クラスの性質を知っておけとかのレスをつけたんだろう。
0548デフォルトの名無しさん
2005/07/27(水) 14:13:08ハァ?
0549デフォルトの名無しさん
2005/07/27(水) 14:20:33だから、
コピーコンストラクタとoperator=は必ず書く。
これでモーマンコタイ
0550デフォルトの名無しさん
2005/07/27(水) 14:23:00どんなときに必ず書くんですか?
0551デフォルトの名無しさん
2005/07/27(水) 14:29:190552デフォルトの名無しさん
2005/07/27(水) 14:48:36書き忘れがなくなるっしょ。
0553デフォルトの名無しさん
2005/07/27(水) 15:11:12書いておけば書き忘れはなくなるだろうけど、中身が正しい保証は無いよね。
メンバを増やしたときにそのコピーを忘れるとかしないのかなぁ。
0554デフォルトの名無しさん
2005/07/27(水) 15:25:41現在の状況としては。
簡単な住所録アプリケーション
1、検索、データの追加、削除、修正。
2、単純選択法によるソート機能(降順、昇順)
3、UNIX(Soralis)環境での、カレントディレクトリの
datファイルの表示、印刷機能
を実装したものを作れるような状態です。
この後、Windows環境でのC++を勉強していきたいと思っているのですが
どのような参考書を選ぶべきか迷っています。
どなたか、参考に教えていただけないでしょうか?
0555デフォルトの名無しさん
2005/07/27(水) 15:31:09スレ違い
0556デフォルトの名無しさん
2005/07/27(水) 15:32:43確かに
「寿命管理しなきゃいけないポインタがあるのにコピーコンストラクタを書き忘れる」
という大きなポカをするような人なら、
「メンバを1つコピーし忘れる」
なんていうマイナーなポカはその10倍くらいやってもおかしくないな・・・
0557デフォルトの名無しさん
2005/07/27(水) 15:35:17C++に関する質問のスレだったので
こういった、質問をしてもいいのか
と思ったのですが、スミマセン
0558デフォルトの名無しさん
2005/07/27(水) 16:10:410559デフォルトの名無しさん
2005/07/27(水) 16:28:34BYTE getFileSize(UNKNOWN_SIZE file_size)
{
return static_cast<BYTE>(file_size);
}
0560デフォルトの名無しさん
2005/07/27(水) 16:30:43たぶんseekg()で末尾に移動してtellg()
istreamの場合。
0561デフォルトの名無しさん
2005/07/27(水) 16:33:56まず、Windows環境で、どんなプログラミングスタイルを取るか考えろ。
そして開発環境についての質問は他のスレッドへ。(ここで扱うのは標準C++であってVC++でもgccでもない)
>>558
inline size_t filesize(ifstream& fin)
{
size_t current = fin.tellg();
fin.seekg(0, ios::end);
size_t size = fin.tellg();
fin.seekg(current);
return size;
};
0562デフォルトの名無しさん
2005/07/27(水) 16:36:220563デフォルトの名無しさん
2005/07/27(水) 19:49:49テキストモードだと
seek()、tell()ではだめ
つか、素直にstat()使っとけ
標準じゃないけど、使えるだろ
0564デフォルトの名無しさん
2005/07/27(水) 19:58:370565デフォルトの名無しさん
2005/07/27(水) 20:03:120566デフォルトの名無しさん
2005/07/27(水) 20:09:340567デフォルトの名無しさん
2005/07/27(水) 20:09:440568デフォルトの名無しさん
2005/07/27(水) 20:13:070569デフォルトの名無しさん
2005/07/27(水) 20:24:01boost::intmax_tは64bitとは限らないんじゃないか
0570デフォルトの名無しさん
2005/07/27(水) 20:28:26>>567 全くない。戻り値はpos_typeでしかない。
0571デフォルトの名無しさん
2005/07/27(水) 20:39:42じゃ、スレ違いって答えろよアホ
0572デフォルトの名無しさん
2005/07/27(水) 21:51:03size_tが2GB超に対応していれば561の方法。
0573デフォルトの名無しさん
2005/07/27(水) 22:01:050574デフォルトの名無しさん
2005/07/27(水) 22:46:04バイナリデータでファイル読み込みして一度それをChar型に格納するにあたり、
わりと大きなサイズのファイルでも格納できるようには動的にとればいいのですか?
意味あるんでしょうか?
初心者で申し訳ないっす。
0575デフォルトの名無しさん
2005/07/27(水) 22:50:42うむ。
動的にとるほうが、一度に確保できるサイズは大きい。
0576デフォルトの名無しさん
2005/07/27(水) 22:53:18あの後、調べててfileno(*fp)とfilelength(long *)と<io.h>のインクルードで
出来ました。間違ってました?
0577デフォルトの名無しさん
2005/07/27(水) 22:56:18できたならそれでいいじゃないか。
ただし、そいつは非標準なのでこのスレの範囲外。
0578デフォルトの名無しさん
2005/07/27(水) 22:56:23やはりそうですか。
動的なとりかたとしては、
#include<stdlib.h>で
char *data=(char *)malloc)(sizeof(char)*1000000
とかでよろしいのですか?
もっといい方法あります?
0579デフォルトの名無しさん
2005/07/27(水) 22:58:58new char[1000000]とかあるいはstd::vector<char>の方が一般的だと思う。
0580デフォルトの名無しさん
2005/07/27(水) 23:01:48「ヒープにとるから大きな領域取れる」が正しいのでは?
0581デフォルトの名無しさん
2005/07/27(水) 23:02:57あっnewって聞いたことあります!なるほど!
それもfreeでメモリ開放は必要ですか?
0582581
2005/07/27(水) 23:04:560583デフォルトの名無しさん
2005/07/27(水) 23:05:050584デフォルトの名無しさん
2005/07/27(水) 23:10:030585デフォルトの名無しさん
2005/07/27(水) 23:13:07静的に取って味噌。キーワードはstatic。
0586574
2005/07/27(水) 23:21:39えっ静的にとったらどんなファイルサイズでも対応できるようには
ならなくないすか?
でも味噌ってことは、静的にとるメリットがあるってことか
0587デフォルトの名無しさん
2005/07/27(水) 23:25:20> えっ静的にとったらどんなファイルサイズでも対応できるようには
> ならなくないすか?
大きな領域を取りたいと書いてあった(>>574)からそう書いた。
ホントに動的にとりたいのなら、動的にとるしかないではないか。
0588デフォルトの名無しさん
2005/07/27(水) 23:27:31動的にメモリを確保したところでどんなファイルサイズでも対応(一括で収まるって意味?)できるようになるとは限らない。
0589デフォルトの名無しさん
2005/07/27(水) 23:38:12std::vectorならその手間も要らない。
0590デフォルトの名無しさん
2005/07/27(水) 23:47:53やるんなら>>585のとおり、staticである程度確保しておいて、一気に読み込む方法だろうな。
0591デフォルトの名無しさん
2005/07/27(水) 23:51:31>>575
>>578
この辺りの流れから動的に領域を取るほうが、大きな領域を取れると
勘違いしているふしが見られる。 >>586
その誤解を解くために >>585 があることを理解すべし。
0592デフォルトの名無しさん
2005/07/28(木) 01:30:42NEWとMALLOCの違いって知ってるかい?
メンバ変数だけ捕獲させるなら麻呂でいいけど、メンバ関数捕獲するなら、要は、捕獲したメモリにクラス入れるとして、そのクラスに::が
あったらNEW使わないと・・・、中でどうなるかは知らない・・・、どうなるの?
それから、「動的」確保の罠って知ってる?
動的に確保して、ポインタにポインタを突っ込むとどうなるか?w
長いコードだときっとやらかす、目立wたないところできっとマラカス、でデスマらかすw
STATIC?それは性的メモリ確保っていうか、初期化のタイミングの違いってだけの認識で、単なる変数定義だと思うけど?
0593デフォルトの名無しさん
2005/07/28(木) 01:34:39でかいブツなら仮想メモリも使いやすいしね
0594デフォルトの名無しさん
2005/07/28(木) 01:58:41標準にGlobalAlloc,Globallockなんて無い
0595デフォルトの名無しさん
2005/07/28(木) 02:08:220596デフォルトの名無しさん
2005/07/28(木) 02:25:41無名名前空間内の関数はどう修飾するのがベストでしょうか?
0597デフォルトの名無しさん
2005/07/28(木) 02:34:54その台詞は、592が死にそうなシチュエーションですね
0598デフォルトの名無しさん
2005/07/28(木) 03:00:29::のことか?
0599デフォルトの名無しさん
2005/07/28(木) 03:08:490600デフォルトの名無しさん
2005/07/28(木) 04:47:020601デフォルトの名無しさん
2005/07/28(木) 06:00:19せっかく勝ち誇ってたのにすまんね。
0602デフォルトの名無しさん
2005/07/28(木) 06:11:060603デフォルトの名無しさん
2005/07/28(木) 08:35:54でかいでかいというのだからVirtualAllocだろ。
ちょこっとだけでWin32ならHeapAlloc。
GlobalAllocはクリップボードなど特殊用途。
すれ違いスマソ
0604デフォルトの名無しさん
2005/07/28(木) 11:27:11捕獲?
0605デフォルトの名無しさん
2005/07/28(木) 13:34:22UN*Xならmmap()
WindowsならCreateFileMapping & MapViewOfFile()
0606デフォルトの名無しさん
2005/07/28(木) 13:43:05「64bit時代のWindowsアプリケーション開発」
やっぱり、サーバとかCADみたいなやつ向けという論調だな。そりゃそーだが。
0607606
2005/07/28(木) 13:44:2464bitプログラミングに書いたつもりだった
0608デフォルトの名無しさん
2005/07/28(木) 14:14:500609デフォルトの名無しさん
2005/07/28(木) 14:22:36class B
{
public:
void f();
void g();
};
class D : private B
{
public:
using B::f;
};
D obj;
obj.f(); //OK
obj.g(); //NG
こういう風に継承時のアクセス制御を書き換えたいときに。
0610デフォルトの名無しさん
2005/07/28(木) 17:45:43struct B {
template <class T> void f(const T& t) { cout << "T" << endl; }
virtual void f(const B& b) { cout << "B" << endl; }
};
struct D : public B {};
ここで、
B b; D d1, d2;
とすると、
d1.f(0); // (int)0 -> templateの方が選択される
d1.f(b); // B -> f(B)の方が選択される
d1.f(d2); // D -> templateの方が選択される
となります。ここで、
d1.f(static_cast<B>(d2)); // B -> f(B)の方が選択される
のように明示的にキャストせず、派生クラスの場合には
d1.f(d2);だけでf(B)が選択されるようにするには
どうすればいいですか?
0611デフォルトの名無しさん
2005/07/28(木) 17:55:40struct D : public B {
void f(D const& d) { B::f(static_cast<B>(d)); }
};
0612デフォルトの名無しさん
2005/07/28(木) 17:58:190613デフォルトの名無しさん
2005/07/28(木) 22:43:00static char a[500000];をつけてコンパイルしてみた。
予想と違った。実行ファイルのサイズは変化無し。
static char a[500000]={"a"};と初期化してみた。
予想どおり500kバイト増えた(と思われる)。
0614デフォルトの名無しさん
2005/07/29(金) 01:08:54処理系依存
0615デフォルトの名無しさん
2005/07/29(金) 01:50:40staticな配列の中身がゼロでも、実行時に初期化する処理系と、あらかじめDATA
として持っておき、転送する処理系がある。コンパイルオプションで切り替えられる物
もある。
0616デフォルトの名無しさん
2005/07/29(金) 03:13:590617デフォルトの名無しさん
2005/07/29(金) 06:52:35もし可能ならば、.cppファイルの方でそのstatic変数を確保する際の、記述方法を教えて頂けないでしょうか
0618617
2005/07/29(金) 07:00:50ttp://www.tietew.jp/cppll/archive/8420
0619デフォルトの名無しさん
2005/07/30(土) 17:08:10Aのメンバー変数にBからアクセスできません。
どうすればアクセスできますでしょうか?
class A{
int m_value;
class B{ void do(){std::cout << m_value } }
};
error C2327: m_value : 型名、スタティック、または列挙子ではありません。
といわれます
0620デフォルトの名無しさん
2005/07/30(土) 17:19:44それはA内部でBを宣言したと言うだけなので、AのインスタンスとBのインスタンスには何の関連もない。
アクセスするためにはAのインスタンスへの参照をBに渡すか、適切なI/Fを設けることになる。
0621デフォルトの名無しさん
2005/07/30(土) 17:22:36参考までに何言語使ってた?
0622デフォルトの名無しさん
2005/07/30(土) 17:39:13よーく考えてみろ。
B hoge;
hoge.do();
なんてコード書かれたらどうする気だ?
どこにm_valueがあるのかと小一時間(ry
0623デフォルトの名無しさん
2005/07/31(日) 11:00:26B hoge;は無効になり、Bのインスタンスの生成やアクセスはAにしかできず(private扱い)、
かつ内側のクラスは外側のクラスのメンバにアクセスできるというのがよかった。
コンパイラがAのインスタンスへの参照を暗黙で書いてくれればいいのに。
(virtualみたいなキーワードで書いてくれるようになる、でもいい)
この考えはやはり変なんだろうな
0624デフォルトの名無しさん
2005/07/31(日) 12:46:530625デフォルトの名無しさん
2005/07/31(日) 14:11:57のですが、どのように行えばよろしいでしょうか。
イメージとしては、出力ファイルが
hoge1.txt
hoge2.txt
hoge3.txt
:
:
といった感じです。どうかよろしくお願いします。
0626デフォルトの名無しさん
2005/07/31(日) 14:20:210627デフォルトの名無しさん
2005/07/31(日) 14:21:24{
std::stringstream ss;
ss << prefix << n << suffix;
return ss.str();
}
int i = 1;
while (first != last) {
std::ofstream fout(get_filename("hoge", i, ".txt").c_str());
//
fout.close();
++i;
}
または
sprintf("hoge%d.txt", i);
桁数を揃えたければ%0?dなりsetfill('0') << setw(?)なりすればよい。
0628デフォルトの名無しさん
2005/07/31(日) 14:52:00自動でナンバリングなら専用のクラス作ればいいだろ
0629デフォルトの名無しさん
2005/07/31(日) 15:01:250630デフォルトの名無しさん
2005/07/31(日) 17:39:340631デフォルトの名無しさん
2005/07/31(日) 18:44:21それだと>>627はダメだな。
privateメンバにカウンタを持たせて、ファイルに出力するときにそのカウンタ使ったら?
0632デフォルトの名無しさん
2005/07/31(日) 20:05:36最大の番号+1のファイル名を求めたいということかもしれんぞw
0633デフォルトの名無しさん
2005/07/31(日) 23:44:39作ってあげれば?
0634デフォルトの名無しさん
2005/07/31(日) 23:57:250635デフォルトの名無しさん
2005/08/01(月) 02:22:49MBCSのパスにもワイド文字のパスにも対応してないから、日本語絶望的。
0636デフォルトの名無しさん
2005/08/01(月) 03:09:43日本語使うな。
0637デフォルトの名無しさん
2005/08/01(月) 12:59:00は値がはいっていないことをはっきりさせるために
使うのが本来の使い方でしょうか?
0638デフォルトの名無しさん
2005/08/01(月) 13:05:34ポインターをどうしても生で使いたいのならそうでしょう。
「入ってない」というか、「有効でない」ですが。
0639デフォルトの名無しさん
2005/08/01(月) 13:32:26が必要になったときだけ計算するようにしたい。
class Cdata{
public
DataClass dataOrg;
DataClassConverted *pdataConverted;
void callConverted();
};
dataConvertedのコンストラクターがcallConverted()を最初に呼ばれたときのみ実行されて
2回目からはpdataConvertedのメンバー変数(最初に呼ばれたときに計算された結果)が帰ってくるようにしたい。
DataClassConvertedをどう設計すればいいんだろう.
0640606
2005/08/01(月) 14:09:43その日本語の説明そのまま実装すればいいんでないの?
void/*voidで何を返すんだ*/ Cdata::callConverted() {
if (this->pdataConverted == NULL)
this->pdataConverted = new DataClassConverted(this->dataOrg);
return this->pdataConverted->メンバー変数;
}
0642デフォルトの名無しさん
2005/08/01(月) 15:23:500643デフォルトの名無しさん
2005/08/01(月) 15:24:50CDataクラス内にbDataConvertedみたいな初期化フラグを付けるって手もあるけどね
この場合はポインタを直接見た方がスマートかな
0644デフォルトの名無しさん
2005/08/01(月) 17:12:38・callConvertedを面罵関数ポインタにして、初期状態で指す先の関数は
変換処理を行ってcallConvertedを次の関数に書き換え、変換済みデータを返す。
・次の関数は変換済みデータを返すだけ。
0645デフォルトの名無しさん
2005/08/01(月) 23:06:30C++ではNULLよりも0推奨。
NULLを(void *)0にできなくなったから、
オーバーロード解決時に思わぬことが起こりえる。
0646デフォルトの名無しさん
2005/08/02(火) 13:34:57何かオススメの参考書はありませんか?
録音済みのwaveファイルを取り込んでから
・ノイズ除去
・再生速度の変更(低速再生)
・ボリューム調節
などを行い、再度waveとして出力する予定です。
0647デフォルトの名無しさん
2005/08/02(火) 14:44:43二重三重にスレ違い。
ここは環境依存スレではないし書籍スレでもない。
処で、waveファイルって何のこと?
もしかして:.wav
0648デフォルトの名無しさん
2005/08/02(火) 14:54:390649646
2005/08/02(火) 15:20:55適当に他のスレで聞いてみたいと思います。
あと、waveファイル云々はどのように解釈すればよいのですか?
間違ったことは申し上げていない と思っているのですが・・・
0650デフォルトの名無しさん
2005/08/02(火) 15:23:13>647が痛々しいだけだから無視していいと思うよ。
0651デフォルトの名無しさん
2005/08/02(火) 15:27:44しかし、それをwaveファイルというのは正しそうで正しくないのかも知れず。
かと言って、それを論うのはスレ違いなことこの上ないので続けたいなら他所へ行け。
0652デフォルトの名無しさん
2005/08/02(火) 15:31:59あきらめろ
0653デフォルトの名無しさん
2005/08/02(火) 15:32:40説明して欲しいんだが、出てきてはくれんかな?
恥かいちゃったんでもう出てこれないか…
0654デフォルトの名無しさん
2005/08/02(火) 15:52:07というのも、書籍だとまず数学的準備から始まって、数学的証明で終わる。
その中に時々本当にやりたいことについて説明した数式が入ってる。
基礎を押さえて勉強したいとか、信号処理の研究をしたいとかならいざしらず
単にプログラムが書ければよければ信号処理 fft wavelet等でgoogleおすすめ
0655デフォルトの名無しさん
2005/08/02(火) 20:37:37独習C++って本を買おうと思ってます。
C言語については
基礎的な事はある程度できると思いますが
使いこなせていない状況です。
こんなヘッポコレベルの私でも独習C++を理解することができて
また、C++を使いこなすことができますか?
0656デフォルトの名無しさん
2005/08/02(火) 20:40:120657デフォルトの名無しさん
2005/08/02(火) 20:41:22早速アメゾネで注文してきます。
0658デフォルトの名無しさん
2005/08/02(火) 20:44:360659デフォルトの名無しさん
2005/08/02(火) 20:45:37どなたか 最後の決断をたのみます。
0660デフォルトの名無しさん
2005/08/02(火) 20:47:130661デフォルトの名無しさん
2005/08/02(火) 20:56:35Cが「使いこなせてない」と感じる理由が、最近のソフトやフレームワークが
C++ で書かれていることが多いから、ということなら C++ に移行する意味はある。
そうではなく、C で書かれた様々なもののソースを観てもピンとこないというのなら、
C++ に移行したところで何がどうなるとも思えないので VB や C# や Mathmatica
や perl など適当に優しげなものに移行すべきかと思う。
0662デフォルトの名無しさん
2005/08/02(火) 21:05:46とてもよい、アドヴァイスありがとうございます。
私はゲームプログラマーを志望しているのですが
ゲームについてのアルゴリズムを
ゲームのアルゴリズムについて書かれている本やウェブサイトで学んでいます。
私C++に移行したいと思った理由は
C++を元に解説をしている書物などがあるからです。
というわけで アマゾネで注文することを決めました。
0663デフォルトの名無しさん
2005/08/02(火) 21:09:100664デフォルトの名無しさん
2005/08/02(火) 21:13:160665デフォルトの名無しさん
2005/08/02(火) 21:14:13翻訳ソフトで翻訳されたような 日本語でしたね
日本人なので、安心してください>>663さん
0666デフォルトの名無しさん
2005/08/02(火) 21:28:53sox
audacity
ソフトだとこのあたりが参考になると思う
0667デフォルトの名無しさん
2005/08/02(火) 21:29:56日本人だからと言って日本語が話せるとは限らない。
0668デフォルトの名無しさん
2005/08/03(水) 02:23:58音声データだと思っている香具師と、
波形データと思っている香具師と、
意図的に混乱させている香具師と、
その他の悪乗りがレスしているものの
本人が出てこないもんだから決着つかない罠。
0669デフォルトの名無しさん
2005/08/03(水) 05:49:150670デフォルトの名無しさん
2005/08/03(水) 11:50:10何とか「真相は闇の中」的オチに持っていこうとしてるんでしょう。彼が。
0671デフォルトの名無しさん
2005/08/03(水) 11:57:210672デフォルトの名無しさん
2005/08/03(水) 12:54:260673639
2005/08/03(水) 14:51:14template <class CValue,class CGiveValueMethodFunctor>
class CValueWithGivenFlag
{
public:
bool given;
CValue value_;
CGiveValueMethodFunctor giveMethod_;
CValueWithGivenFlag(CGiveValueMethodFunctor &giveMethod):giveMethod_(giveMethod), given(false){}
CValueWithGivenFlag(CValue &valueInput, CGiveValueMethodFunctor &giveMethod): giveMethod_(giveMethod), given(true), value_(valueInput){}
CValue & value(){
if(given){
return value_;
}else{
giveMethod_(value_, given);
return value_;
}
}
void putValue(CValue &v)
{
given=true;
value_=v;
}
};
0674デフォルトの名無しさん
2005/08/03(水) 16:15:06std::ostream& operator<< (std::ostream& os, const B& b) { return os << b.member; }
これで、
B b; std::cout << b << std::endl;
が通る。
このベースクラスBを派生すると
struct D : public B {};
D d; std::cout << d << std::endl; // エラー
コンパイルできない。
ベースクラス用のoperator<<()を呼び出すような実装をするとき、
std::ostream& operator<< (std::ostream& os, const D& d) { この部分; }
に何を書けばいいのか教えてください。
0675デフォルトの名無しさん
2005/08/03(水) 16:35:30std::ostream& operator<< (std::ostream& os, const D& d){ return os << static_cast <const B&> (d); }
0676デフォルトの名無しさん
2005/08/03(水) 17:53:36つ〜か、VC7.1ならそのままで普通に通るんだが。
0677デフォルトの名無しさん
2005/08/03(水) 17:57:50そう書いててダメだったのでわからなかったんですが
すげースンマセン! クラス設計変えて、継承をやめてました!
どおりでinvalid static_castエラーのはずだわー
うへえー(´д`;)
0679デフォルトの名無しさん
2005/08/03(水) 19:53:28多重継承はまぞくておもしろいです。
0680デフォルトの名無しさん
2005/08/03(水) 20:03:21あれはマゾどころか魔窟だ。
0681デフォルトの名無しさん
2005/08/03(水) 20:13:010682デフォルトの名無しさん
2005/08/03(水) 22:15:46なんでそんなことに?
>640のほうがはるかにマシに見えるんだが。
0683デフォルトの名無しさん
2005/08/04(木) 00:49:520684デフォルトの名無しさん
2005/08/04(木) 13:00:57そんなにしてほしいのか?
struct A { A() {} virtual ~A() {} };
struct B : public A { B() {} virtual ~B() {} };
struct C : public A { C() {} virtual ~C() {} };
struct D : public B { D() {} virtual ~D() {} };
struct E : public B, public C { E() {} virtual ~E() {} };
struct F : public C { F() {} virtual ~F() {} };
struct G : public D, public E { G() {} virtual ~G() {} };
struct H : public E, public F { H() {} virtual ~H() {} };
struct I : public G, public H { I() {} virtual ~I() {} };
動くかどうか検証はしていない。ご利用は計画的に。
0685デフォルトの名無しさん
2005/08/04(木) 13:17:02ダライアス継承は仮想継承にしてなんぼだろうが。
0686デフォルトの名無しさん
2005/08/04(木) 15:23:14あとは たのむ
0687デフォルトの名無しさん
2005/08/04(木) 19:49:35A::~A() が virtual になっているなら空の B::~B() を手動で定義しなくてよい
0688デフォルトの名無しさん
2005/08/04(木) 22:32:20そうなのか?てっきり全部ばらばらの働きをするデストラクタも含めて継承して
この例だとIか、あの最後の奴を継承したときどうなるかってことだと思ってたんだが。
685とあわせて全然修行不足だな。すまん。
0689デフォルトの名無しさん
2005/08/04(木) 22:56:17どうすれば?
int a[s][t][u][v][w]
int b[s][t][u][v][w]
という配列に値は入っています。
クラス (ここをどうするか)
{コンストラクタで代入はできますか}
0690デフォルトの名無しさん
2005/08/04(木) 23:02:190691デフォルトの名無しさん
2005/08/04(木) 23:20:30{
}
よくわかりません。解説お願いします。
これでa,b2つの配列ともクラスに渡せて、そのクラスの中で配列に入っている値を得ることが
できますか?
TEST::TEST(int 何か,int 何か){}のようなものを予想していました。
0692デフォルトの名無しさん
2005/08/04(木) 23:22:24次元を減らして考えてみろ。
0693デフォルトの名無しさん
2005/08/04(木) 23:25:25{}
こういうことでしょうか?
0694デフォルトの名無しさん
2005/08/04(木) 23:28:12あーあ俺もいいかげん焼き回ったな
0695デフォルトの名無しさん
2005/08/04(木) 23:29:48そう思ったら、聞く前にまず試してみる
0696デフォルトの名無しさん
2005/08/04(木) 23:32:03内部で新たに5次元配列を宣言して渡すという形にしたほうがいい?
動的配列だからその方法もわかりません。
0697デフォルトの名無しさん
2005/08/04(木) 23:38:53何がどうダメだったのか、分かるか?
0698デフォルトの名無しさん
2005/08/04(木) 23:43:19TEST::TEST(int a1[][t][u][v][w],int a2[][t][u][v][w])
{ここになにか}
そりゃ入れないとだめですね。
3次元動的配列をクラスに渡す場合はどうやるのでしょうか?それを応用して考えてみようを思います。
配列の渡しわからねーー。
0699デフォルトの名無しさん
2005/08/04(木) 23:49:05ひとつ低い次元の配列を要素サイズ分確保してループで埋めて作るやつかね?
そんなの自動で渡る方法なんかないっしょ。
クラス作ってコピーコンストラクタも提供でもせんと
0700デフォルトの名無しさん
2005/08/04(木) 23:51:08そうです。自動で渡る方法ないんですか?
0701デフォルトの名無しさん
2005/08/05(金) 00:08:20TEST::TEST(int***** a1,int***** a2)
これじゃまずいか
0702デフォルトの名無しさん
2005/08/05(金) 00:14:33こんな風にクラスのある内部関数で
int temp =a1[2][2][4][5][7];
0703デフォルトの名無しさん
2005/08/05(金) 00:30:31妥協
0704デフォルトの名無しさん
2005/08/05(金) 01:16:340705デフォルトの名無しさん
2005/08/05(金) 01:31:13コンストラクタで組み込み配列型メンバの初期化は制御できない。全部デフォルトの初期化になる。
つまり無理。
0706デフォルトの名無しさん
2005/08/05(金) 04:07:11配列を渡したいのか、配列へのポインタを渡すだけで良いのかによって変わる。
2次元で考えると:
class X {
int **_x, **_y;
public:
X(int **x, int **y) : _x(x), _y(y) {}
};
自分なら、配列や配列へのポインタは扱わず、多次元配列のクラスを使う。
既存品ならBoost.Multiarrayかな。
でも5次元に特化した配列クラスなら1時間もあれば書けるでしょ。
そのクラスのインスタンスを、受け取りたい関数に渡す。
void f(CMultiArray *X, CMultiArray *Y) {}
CMultiArray *A = new CMultiArray(s, t, u, v, w);
CMultiArray *B = new CMultiArray(s, t, u, v, w);
f(A, B);
または、その5次元配列がなんらかの処理とセットで使われるなら、
それらをまとめてひとつのクラスにする。
ハッキリ言って5次元配列とかnewのループまわして作るのめんどいので
配列自体をカプセル化した方が良いよ。
0707デフォルトの名無しさん
2005/08/05(金) 10:37:28基底クラスの初期化の前に
派生クラスのオブジェクトを初期化することはできないのでしょうか?
0708デフォルトの名無しさん
2005/08/05(金) 10:39:240709デフォルトの名無しさん
2005/08/05(金) 10:40:50boost::base_from_memberを使えばできる。
http://www.kmonos.net/alang/boost/classes/base_from_member.html
0711デフォルトの名無しさん
2005/08/05(金) 12:51:35そもそも、派生クラスのオブジェクトに依存する基底クラスって設計がおかしい気がするのだが……
0712デフォルトの名無しさん
2005/08/05(金) 13:39:57Visual Studioに便利がツールが添付されてたりとか・・・
0713デフォルトの名無しさん
2005/08/05(金) 13:42:26Base(){
((Ext*)this)->init();
this->i = 0;
}
};
class Ext {
init();
};
これでひとつ。
0714デフォルトの名無しさん
2005/08/05(金) 17:05:24VBCommenter 参考にしてプラグインを”自作”。
ただし C++ 用の CodeDOM は実装されていないので、
気合でパーサ書いて、実装しないとダメかも。
0715デフォルトの名無しさん
2005/08/06(土) 00:52:20まともに動く保証は無い?
0716デフォルトの名無しさん
2005/08/06(土) 01:05:05「catch 句の中へ飛ぶような使い方はするなボケ」で、
それ以外は規格的には大丈夫っぽい。
解釈が間違ってたら誰かふぉろーよろしく。
0717デフォルトの名無しさん
2005/08/06(土) 01:38:380718デフォルトの名無しさん
2005/08/06(土) 07:50:32同じ流れを例外で行えばデストラクタが呼ばれるとき、longjmpを行うと未定義と書いてある。
JIS X3014 18.7
0719デフォルトの名無しさん
2005/08/06(土) 12:50:25あー、"解体"ってのがデストラクタのことか。
俺も JIS X3014 を見てたんだけど、
ISO/IEC 14882 のほうがやっぱり読みやすいね。
0720デフォルトの名無しさん
2005/08/06(土) 15:37:270721デフォルトの名無しさん
2005/08/06(土) 16:53:54たくさんの(50くらいの)メンバーをこの方法で初期化するため,ファイルを読み込むクラスも作りました。⇒LoadFile
この方法ではうまく初期化できなかったので,別の方針をお尋ねしたいのですが…。
一度mapに全部ファイルの内容を流し込んでしまう方法も考えましたが,流し込む時点ではメンバーの型が
分からないので困っています。(外部ファイルに例えば「L=3」と書いてあっても,mapに追加する時点では
int, double, charのどれに利用するのか分からない)
#include <iostream>
#include "LoadFile.h"
using namespace std;
class Hoge {
static const int L;
static const double X;
public:
int getL() const { return L; }
double getM() const { return X; }
};
LoadFile fl("test.dat"); //ファイル名を渡すとそこから読み込んでくれるようにしました
/*fl.func();*/ //メソッドはいじれない
const int Hoge::L = 2;
/*const int Hoge::M = fl.getDouble("X");*/ //メソッドはいじれない
int main() {
Hoge hoge;
cout << hoge.getL() << endl;
/* cout << hoge.getX() << endl;*/
return 0;
}
0722デフォルトの名無しさん
2005/08/06(土) 16:58:380723デフォルトの名無しさん
2005/08/06(土) 17:07:05なんで static const になってんの?
Hoge のインターフェースを見ると、メンバに LoadFile 持てばいいだけに見えるけど。
0724デフォルトの名無しさん
2005/08/06(土) 17:09:01class A {.....};
int main() { A a[20160]; }
とするとエラーが出ます。
自分で定義したクラスの配列には、制限があるのでしょうか。お願いします。
0725デフォルトの名無しさん
2005/08/06(土) 17:10:030726デフォルトの名無しさん
2005/08/06(土) 17:11:480727724
2005/08/06(土) 17:16:30取りあえずコンストラクタ作ってみます。リアルタイムでサンクス。
0728デフォルトの名無しさん
2005/08/06(土) 17:18:55char c[4ギガ]
}
0729?V?Q?S
2005/08/06(土) 17:30:500730721
2005/08/06(土) 17:43:17>>722
そうですか…orz
>>723
staticなのは,Hogeのオブジェクト(複数)間で共通の定数だからですが,
定数なのでconstをつけようとして,おかしくなってきました。
もともとメンバーにLoadFileがあったので,staticだけにする方向で行きます。
0731デフォルトの名無しさん
2005/08/06(土) 21:35:36関数{
変数宣言
サブルーチン呼び出し
}
サブルーチン{
呼び出し元の変数使用
}
みたいに
0732デフォルトの名無しさん
2005/08/06(土) 21:46:080733デフォルトの名無しさん
2005/08/06(土) 21:46:13無理。
そういうのはインタプリタ言語じゃないと難しいと思う。
0734デフォルトの名無しさん
2005/08/06(土) 21:49:28サブルーチン内のstatic変数とかじゃダメなん?
0735デフォルトの名無しさん
2005/08/06(土) 21:55:210736デフォルトの名無しさん
2005/08/06(土) 22:00:160737デフォルトの名無しさん
2005/08/06(土) 22:01:410738デフォルトの名無しさん
2005/08/06(土) 22:06:510739デフォルトの名無しさん
2005/08/06(土) 22:19:07「サブルーチンからだけは見える」は実現できないけど
0740デフォルトの名無しさん
2005/08/06(土) 22:32:22擬似的に
void func() {
struct {
int internal;
void routine() {
hoge(internal);
}
} sub;
sub.routine();
}
0741デフォルトの名無しさん
2005/08/06(土) 22:55:13マルチすまん
なんか難しそうなことはわかった
素直に参照渡し使うことにする
0742デフォルトの名無しさん
2005/08/07(日) 05:13:56{
A* hello()
{
std;;cout _<< "Hello" << std::endl;
}
A* operator->()
{
std::cout << "A::oprator->()" << std::endl;
return this;
}
A* operator[](const std::string& s)
{
std::cout << "A::operator[]()" << std::endl;
return this;
}
A* operator()()
{
std::cout << "A::operator()()" << std::endl;
return this;
}
};
int main()
{
A a;
a->hello() //OK
a->(); //error
a->["hello"]; //error
}
operator->でA*を返してるはずなのにエラーになったりならなかったり
どういうことでしょうか? vc7.1です
0743デフォルトの名無しさん
2005/08/07(日) 05:31:12a.operator->();
a.operator()();
0744デフォルトの名無しさん
2005/08/07(日) 05:34:56なんでコピペしないで手で写してるの?
0745デフォルトの名無しさん
2005/08/07(日) 09:17:25operator []()は普通参照を返すけど。
0746デフォルトの名無しさん
2005/08/07(日) 11:22:490747デフォルトの名無しさん
2005/08/07(日) 11:45:240748デフォルトの名無しさん
2005/08/07(日) 11:51:08->の後にはメンバがなければならない。
[]や()はたとえオーバーロードしていようと演算子だから->の後には続けられない。
0749デフォルトの名無しさん
2005/08/07(日) 12:17:37"operator"も書けば呼べなくもない
0750デフォルトの名無しさん
2005/08/07(日) 13:37:160751デフォルトの名無しさん
2005/08/07(日) 14:17:44特別バージョンに指定するtemplate<>ですが、どうしてこれを書く必要があるのかわかりません。
template<typename T>
class C {
// ...
};
//template<>
class C<int> {
// ...
};
下が上の特別バージョンであることをコンパイラは判断できないんですか?
0752デフォルトの名無しさん
2005/08/07(日) 15:07:070753デフォルトの名無しさん
2005/08/07(日) 15:12:40下の書き方じゃ変数化したいintと普通のintの区別が付かないから
0754デフォルトの名無しさん
2005/08/07(日) 15:14:13明示的インスタンス化の宣言が template class C<int>; だから、
class C<int>; だけの場合を許すとして、
明示的インスタンス化と見るか明示的特殊化と見るかを決めかねるんじゃないか?
0755デフォルトの名無しさん
2005/08/07(日) 16:05:20なにぶんテンプレート初心者なもので。
>>753
テンプレート引数なのか型名なのか区別が付かないということでしょうか??
>>754
定義も一緒にする場合にはtemplate<>は付けなくてもいいということですか?
template<typename T> class C
{
public:
void f() {
printf("C<T>::f\n");
}
};
//template<>
class C<int> {
public:
void f() {
printf("C<int>::f\n");
}
};
void main() {
C<float> c1;
c1.f();
C<int> c2;
c2.f();
}
とりあえず上のプログラムをVSN2002でコンパイルしたら下のような出力になりました。
C<T>::f
C<int>::f
0756754
2005/08/07(日) 16:22:49伝わらなかったみたいだな。ごめんよ。
class C<int>; を許すとして、
template class C<int>; と見るか、
template<> class C<int>; と見るか、
どっちにするか決められないんじゃないか、ってこと。
0757デフォルトの名無しさん
2005/08/07(日) 16:23:550758デフォルトの名無しさん
2005/08/07(日) 16:24:54C++知らないのにどうしてここを見ているの?
0759754
2005/08/07(日) 16:30:01gcc 3.4.4 でも MSC でも class C<int>; が
明示的特殊化の宣言( template<> class C<int>; )として通った。
こんなの規格にあったっけ?
0760754
2005/08/07(日) 16:37:14gcc 3.4.4:
error: an explicit specialization must be preceded by 'template <>'
vctoolkit2003:
error C2906: 'C<int>' : explicit specialization requires 'template <>'
どちらも明示的特殊化として認識はできているが、
文法としては template<> が必要だからしょうがなくエラーって感じだな。
0761デフォルトの名無しさん
2005/08/07(日) 16:47:57これは言語の仕様として必ず必要ということになってるんでしょうか?
それともコンパイラに依存するとなっているんでしょうか?
0762デフォルトの名無しさん
2005/08/07(日) 16:54:160763デフォルトの名無しさん
2005/08/07(日) 17:02:47言語仕様として必要なんですね。
それだけわかれば良かったんです。
コンパイラの話にしてしまってすいません。
ありがとうございました。
0764デフォルトの名無しさん
2005/08/08(月) 00:49:46class C<int> なら構文的には forward declaration として認識されるような気がする。
規格書ちゃらっと見てみた限りでは friend 宣言で使われてたよーな。
0765デフォルトの名無しさん
2005/08/08(月) 00:55:33セミコロンが抜けた。 class C<int>; ね。
で、friend class task<int>; って記述があったってことね。
0766デフォルトの名無しさん
2005/08/08(月) 01:07:45構文として forward declaration などというものは存在しないわけで、何が言いたいのかわからん。
0767デフォルトの名無しさん
2005/08/08(月) 03:13:160768デフォルトの名無しさん
2005/08/08(月) 06:03:490769デフォルトの名無しさん
2005/08/08(月) 21:50:52構文としては explicit-specialization じゃなくて単なる declaration であり、
解釈としては forward declaration として見なされるのではないか?ということです。
0770デフォルトの名無しさん
2005/08/08(月) 23:07:16ISO/IEC 14882:2003にない造語で勝手に語らないでくれないか。
0771デフォルトの名無しさん
2005/08/08(月) 23:11:09オマエモナー
0772デフォルトの名無しさん
2005/08/08(月) 23:26:31???
0773デフォルトの名無しさん
2005/08/08(月) 23:32:510774デフォルトの名無しさん
2005/08/08(月) 23:59:27「オマエモナー」の使い方がおかしい。
0775デフォルトの名無しさん
2005/08/09(火) 02:01:36ちょっと >759 を読み直してみろよ。
構文としては simple-declaration であるはずの class C<int>; が
explicit-specialization と同様に扱われているようだが、
そう扱うように規格で定められているのか?というのが問題なわけよ。
「forward declaration として見なされるのではないか?」なんてのは的外れ。
そもそも「forward declaration」という言葉の意味が
規格中で定義されていないので、この流れの中では意味不明。
0776デフォルトの名無しさん
2005/08/09(火) 03:34:32ごめん。
確かに的はずれで、explicit-specialization 「の宣言」 (14.7.3/2) が俺脳内 forward declaration そのものでした。
forward declaration については 9.1/2 で言及があるんですが、class-key identifier の場合なので template-id
である今回の場合はあてはまらない。
7.1.5.3 の elaborated type specifier で、かつ単一の構成要素なので 7.1.5.3/1 の場合だと思うんですが、
そうすると friend ついてないし、結局 explicit specialization か explicit instantiation じゃないとだめ。
でも template も template <> もついてないから、そっちもだめ。
この辺は friend class C<int>; を認めるために 14882:1998 から変更されてるみたいですが、
ttp://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#68
規格上は class C<int>; は ill-formed だというのが正しいんじゃないでしょうか?
0777デフォルトの名無しさん
2005/08/09(火) 04:35:30配列を初期化するのは可能なのでしょうか?
0778デフォルトの名無しさん
2005/08/09(火) 09:25:11ごめんC++の限界
0779デフォルトの名無しさん
2005/08/09(火) 10:32:04配列の代わりにvectorを使うとか
0780デフォルトの名無しさん
2005/08/09(火) 12:05:020781デフォルトの名無しさん
2005/08/09(火) 12:15:150782デフォルトの名無しさん
2005/08/09(火) 12:16:040783デフォルトの名無しさん
2005/08/09(火) 12:33:33RGB old;
BGR new;
new.b = old.b;
new.g = old.g;
new.r = old.r;
ってこと?
どうやるもへったくれもなさそうなんだけど。
0784デフォルトの名無しさん
2005/08/09(火) 13:56:280785デフォルトの名無しさん
2005/08/09(火) 15:21:34Microsoft Platfrom SDK\Help\PSDK.hxq
というところで必ず停止します。仕方ないのでインストールをキャンセル。
0786デフォルトの名無しさん
2005/08/09(火) 16:39:52たしかどこかにすべてローカルにDownしてからインスコできるモジュールが
あったのでそれを入手すればなんとか。
coreSDKあたりでぐぐればヒットする。
0787デフォルトの名無しさん
2005/08/09(火) 19:33:04こんな状態で、aとb両方のインターフェースをもったクラスへのポインタを
引数として受け取るクラスCはどうやったら定義できるでしょうか。
つまりCは、a及びbを継承したクラスabと、A及びbを継承したクラスAbの
どちらも渡せるような物にしたいんです。
0788デフォルトの名無しさん
2005/08/09(火) 19:39:58C は「クラス」じゃなくて関数の間違いですよね。
漏れなら単に void C(a*, b*) と引数を2つにするけど。
interface も2つに分かれてるんだしさ。
0789デフォルトの名無しさん
2005/08/09(火) 20:41:37a,bのインターフェースを持った物ではなく、a,b両方のインターフェースを持ったものみ渡したいんです。。
0790デフォルトの名無しさん
2005/08/09(火) 20:48:54それを1つの引数で済ませるようなことはしない、っていう意味。
4つも5つもinterfaceがあるならまた話は別だけど・・
0791デフォルトの名無しさん
2005/08/09(火) 20:53:57struct ab : a, b { };
struct C : std::unary_function<ab&, void> { };
とかは?
0792デフォルトの名無しさん
2005/08/09(火) 20:54:50それ以外はコンパイルエラーにすることもできるかもね
0793デフォルトの名無しさん
2005/08/09(火) 20:55:290794デフォルトの名無しさん
2005/08/09(火) 21:15:22struct a {virtual void FuncA() = 0;};
struct b {virtual void FuncB() = 0;};
struct interface_ab : virtual public a, virtual public b {};
struct A : virtual public a {
void FuncA() {
std::cout << "A::FuncA" << std::endl;
}
};
struct ab : public interface_ab {
void FuncA() {
std::cout << "ab::FuncA" << std::endl;
}
void FuncB() {
std::cout << "ab::FuncB" << std::endl;
}
};
struct Ab : virtual public A, virtual public ab {
void FuncA() {
A::FuncA();
}
};
void c(interface_ab& hoge) {
hoge.FuncA();
hoge.FuncB();
}
int main() {
Ab obj;
c(obj);
}
0795デフォルトの名無しさん
2005/08/09(火) 21:22:010796デフォルトの名無しさん
2005/08/09(火) 22:16:59両方の引数に同じポインタを渡すってコトですか?
それはちょっとかっこ悪い気がするんですが。。
>>791
関数オブジェクトを知らないので、使い方がよくワカリマセン。
Abとかは、その場合のab&にキャストできるんでしょうか??
>>794
自分もその方法は思いつきました。
が、仮想継承じゃないとコンパイルエラーが出たんですが、仮想継承じゃなくてもいけるんでしょうか?
仮想継承は遅いらしいので、この方法以外を探していたのですが。
0797デフォルトの名無しさん
2005/08/09(火) 23:09:07>仮想継承は遅いらしいので
あんたのアプリで問題になるほど重いとはかぎらんだろ。
何故簡単に解決する方法があるのにそれを試さない。
0798デフォルトの名無しさん
2005/08/09(火) 23:13:27なんでそういうことをしたいのか理由が知りたい
0799デフォルトの名無しさん
2005/08/10(水) 01:36:240800デフォルトの名無しさん
2005/08/10(水) 04:19:410801デフォルトの名無しさん
2005/08/10(水) 09:38:010802デフォルトの名無しさん
2005/08/10(水) 11:02:28単純に
void func_a_b(a *pa, b *pb)
{
pa->func_a();
pb->func_b();
}
template<typename T>
void func_ab(T *pab)
{
func_a_b(pab, pab);//T*はa*,b*へ変換できること。
};
みたいなのじゃだめ?
T* が a* と b* に変換できる場合だけコンパイルが通ると思うけど。
基本的に>>788と同じだけど、一応呼び出し側は一つだけ渡せば済むということで。
既に型がa*だけとかb*だけとかになってしまっているのなら
dynamic_castなり何なりを使って動的に両方のインタフェースを持っていることを
確認するしか無いと思う。静的に確認する方法は無いよね。
0803デフォルトの名無しさん
2005/08/11(木) 12:05:29プリプロセッサによる条件文を記述しようとしているのですが、
Windows環境でのビルドだと、指定したインクルード(#include "MyWinApp.h")がされるようにしたいのです。
プリプロセッサに何をしていすればいいのでしょーか?
よろしくお願いします。
#ifdef ?
#include "MyWinApp.h"
#else
#include "MyApp.h"
#endif
0804デフォルトの名無しさん
2005/08/11(木) 12:11:05スレ違い。環境依存。C++には定義されていない。
0805デフォルトの名無しさん
2005/08/11(木) 13:34:27これだけのことじゃないのかな?
//#define WINDOWS //Winの時だけコメントから外す
#ifdef WINDOWS
#include "MyWinApp.h"
#else
#include "MyApp.h"
#endif
WINDOWS という識別子は変えた方がいいだろうけど
0806デフォルトの名無しさん
2005/08/11(木) 13:39:34処理系依存だろ?
0807デフォルトの名無しさん
2005/08/11(木) 13:45:28とりあえずこの辺でもみとけ。
ttp://www.boost.org/boost/config/
0808デフォルトの名無しさん
2005/08/11(木) 20:47:49ここで聞くといい
http://pc8.2ch.net/test/read.cgi/tech/1122723009/
0809デフォルトの名無しさん
2005/08/11(木) 21:10:24コンパイラのマニュアル嫁
某のコンパイラだと
__WIN32__と_Windowsが定義されてる
0810デフォルトの名無しさん
2005/08/11(木) 23:17:32このデフォルト引数の指定がgcc(3.4.4 cygwin)でエラーになります。
error: `zero' was not declared in this scope
friendじゃない、普通のメンバ関数ならデフォルト引数の指定にzeroが使えました。
VCだと通るみたいなんで、gccのバグでしょうか?
0811デフォルトの名無しさん
2005/08/11(木) 23:19:44随伴は外部スコープを持つ
0812デフォルトの名無しさん
2005/08/11(木) 23:21:14VCの方がむしろ拡張。
0813デフォルトの名無しさん
2005/08/11(木) 23:23:37できれば、規格で対応する記述のあるセクション番号などをお願いします。
0814デフォルトの名無しさん
2005/08/11(木) 23:30:50それだと、こっちもエラーにならないとおかしいんじゃないですか?
struct S { static int const zero = 0; friend int f() { return zero; } };
こっちはgccでもVCでもエラーになりません。
0815デフォルトの名無しさん
2005/08/12(金) 00:18:50規格とかよく知らんが、少なくとも漏れの目には810と814でf()のスコープが違うように見えるが。
0816デフォルトの名無しさん
2005/08/12(金) 00:45:11class A {
func(int i); // 1
func(double d); // 2
};
の2のポインタが欲しいときはどうすればいいのでしょうか。
0817デフォルトの名無しさん
2005/08/12(金) 00:47:360818デフォルトの名無しさん
2005/08/12(金) 00:47:550819816
2005/08/12(金) 00:49:47メンバ関数ポインタについて教えてください。
class A {
void func(int i); // 1
void func(double d); // 2
};
の2のポインタが欲しいときはどうすればいいのでしょうか。
0820デフォルトの名無しさん
2005/08/12(金) 00:51:47で、どうすんだろ、オーバーロードされてっから関数名じゃ特定できないな。
0821デフォルトの名無しさん
2005/08/12(金) 00:54:04void (A::*)(int); // 1
void (A::*)(double); // 2
で,
void (A::*pmf1)(int) = &A::func; // pmf1という変数に1へのポインタを代入
void (A::*pmf2)(double) = &A::func; // pmf2という変数に2へのポインタを代入
0822デフォルトの名無しさん
2005/08/12(金) 00:56:24しらんかった。
0823816
2005/08/12(金) 00:56:26変数の宣言のしかたで区別してもらえるんですね。
やってみます。
0824デフォルトの名無しさん
2005/08/12(金) 00:57:23オーバーロードされている関数のポインタを取る場合,
代入先の変数の型によってあいまい性が解消されるという規則があります.
static_castのような明示的なキャストによる曖昧性の解消も可能です.
static_cast<void (A::*)(int)>(&A::func); // 1へのポインタを指定
static_cast<void (A::*)(double)>(&A::func); // 2へのポインタを指定
0825816
2005/08/12(金) 03:45:33ありがとうございました。
ご報告まで。
0826デフォルトの名無しさん
2005/08/12(金) 09:04:41普通に設計してればいらない気がするんですが・・・
横着したいとき用というわけでもないですよね
0827デフォルトの名無しさん
2005/08/12(金) 09:39:01唯一使っても良いと思えるのはクラスに対するオペレーターオーバーロードだけだね。
0828デフォルトの名無しさん
2005/08/12(金) 09:44:14それもあんまり使い道ないと思うよ。
0829デフォルトの名無しさん
2005/08/12(金) 10:00:02使い道なしってことですか。
0830デフォルトの名無しさん
2005/08/12(金) 10:15:220831デフォルトの名無しさん
2005/08/12(金) 10:27:11810も814も f() はグローバルで同じスコープだろ。(両方とも ::f() )
0832デフォルトの名無しさん
2005/08/12(金) 12:54:01行儀良くしてると遅くなるとき
0833デフォルトの名無しさん
2005/08/12(金) 12:58:33何言っても設計が悪いではねられそうで警戒しちまうなw
0834デフォルトの名無しさん
2005/08/12(金) 13:06:13あるあるw
0835デフォルトの名無しさん
2005/08/12(金) 13:24:400836デフォルトの名無しさん
2005/08/12(金) 13:36:200837デフォルトの名無しさん
2005/08/12(金) 13:50:50思いこんでる香具師大杉。
「C++の設計と進化」P64を嫁。
0838デフォルトの名無しさん
2005/08/12(金) 14:05:350839デフォルトの名無しさん
2005/08/12(金) 19:35:49int main ()
{
char *pBuffer;
pBuffer = new char *[5]; // char * 型のメモリを確保
pBuffer[0] = new char[20]; // ↑で確保したメモリのひとつにchar型のメモリを確保
strcpy(pBuffer[0], "Helo C++ World"); // 確保したchar型のメモリに文字列を入れる
cout << pBuffer << endl;
delete [] pBuffer[0];
delete [] pBuffer;
return 0;
}
上のように、キャラポインタ型のデータを確保して、
その確保したデータに文字列を入れたいのですが、
pBuffer = new char *[5]; // char * 型のメモリを確保
ここで引っかかってしまいます。
char*型のメモリって、確保できないんでしょうか?
どなたかどうかお願いします m(__)m
0840デフォルトの名無しさん
2005/08/12(金) 19:39:42pBuffer = new char *[5]; // char * 型のメモリを確保
pBuffer[0] = new char[20]; // ↑で確保したメモリのひとつにchar型のメモリを確保
strcpy(pBuffer[0], "Helo C++ World"); // 確保したchar型のメモリに文字列を入れる
cout << *pBuffer << endl;
delete [] pBuffer[0];
delete [] pBuffer;
すいません、自己解決?しちゃいました・・
char **pBuffer;
ってやったら、うまくいっちゃいました。
これで正しいでしょうか?
0841デフォルトの名無しさん
2005/08/12(金) 19:41:51× char* pBuffer;
× char** pBuffer;
0842デフォルトの名無しさん
2005/08/12(金) 19:43:090843デフォルトの名無しさん
2005/08/12(金) 19:43:41○ char** pBuffer;
あとstrcpyじゃなくてstrncpy使ったほうがよさげ
更に言うとメモリ管理めんどくさくなりそうだからクラス化しちゃえば・・・?
0844デフォルトの名無しさん
2005/08/12(金) 19:44:35どうもありがとうございます m(__)m
>>840の
cout << *pBuffer << endl; は
cout << pBuffer[0] << endl; の方が正しいかも
>>842
ああ、すみません。
>>843
うはwwごめんなさい。
0845デフォルトの名無しさん
2005/08/12(金) 19:51:15多数派 char* pBuffer
少数派 char *pBuffer
あんま見ない char * pBuffer
なんですね ^^
>>843
今クラス化の途中です。
strncpy()はstrlen()も一緒に使うんでしょか?
0846デフォルトの名無しさん
2005/08/12(金) 19:53:04strncpyで指定する長さは確保したサイズであって文字列自体のサイズじゃない
それ以上書くなって意味。buffer overflow予防。
0847デフォルトの名無しさん
2005/08/12(金) 19:54:510848デフォルトの名無しさん
2005/08/12(金) 19:55:14俺は本音は少数派で普段は多数派に迎合
メンバポインタとか多数派じゃ無理
0849デフォルトの名無しさん
2005/08/12(金) 20:03:03あー、なるほど。納得。
もし>>839のだと、
strncopy(pBuffer[0], "Helo", strlen("Hele") + 1);
って書かなきゃならないから、なんかおかしいと思ったのですが、
strncopy(pBuffer[0], "Helo", 20);
って書けば有事の際にもオーバーフローしなくなりますね。
でもサイズが合わないとヌル文字は入らないとかなんとか・・。
>>847
orz
>>848
迎合てww そですかww
メンバポインタってのはよくわからず。
0850デフォルトの名無しさん
2005/08/12(金) 20:52:14class CCCC
{
int a;
int *a_ailias;
CCCC():a_ailias(&a){}
};
もっとスマートな方法ないのかな
0851デフォルトの名無しさん
2005/08/12(金) 20:57:14> strncopy(pBuffer[0], "Helo", strlen("Hele") + 1);
> strncopy(pBuffer[0], "Helo", 20);
まあ、あくまで一例の話だし、細かいこと言うのはアレだけど
char pBuffer[] = "nulupo";
char* src = "Helo";
strncpy(pBuffer, src, (sizeof pBuffer/sizeof pBuffer[0]));
かっちりやるならこうだろ。
pBuffer[0]へコピーとか、"Helo"だの20だのハードコーディングとか、ポインタと配列の区別とか、まあ頑張れ。
ちなみにメンバポインタってのはこういうヤツ。
void (IInterface::*pMethod)() = CSomeClass::someMethod;
(pObj->*pMethod)();
>>850
そんな感じでポインタか参照使うしかないんじゃね?
何がしたいのかにもよるだろうけど。
0852デフォルトの名無しさん
2005/08/12(金) 21:05:07>char* src = "Helo";
const付けろよ。
0853デフォルトの名無しさん
NGNG0854デフォルトの名無しさん
2005/08/12(金) 22:22:400855デフォルトの名無しさん
2005/08/12(金) 22:27:360856デフォルトの名無しさん
2005/08/12(金) 22:40:350857デフォルトの名無しさん
2005/08/12(金) 22:43:02「別名」を使うなら参照(int& a_alias)を使うんじゃないかな。
ポインタでも実質ほとんど変わらないだろうけれど、参照にはNULLがない・参照先は変えられない分すこし安全。
0858デフォルトの名無しさん
2005/08/12(金) 22:49:300859デフォルトの名無しさん
2005/08/12(金) 22:54:300860デフォルトの名無しさん
2005/08/12(金) 22:58:32基本的にはsnprintfは失敗すると-1を返すから、それならmalloc(realloc)して
エラー回避できる余地がある、ただ、こういった問題があるが、
ttp://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/dangers-c.html
0861デフォルトの名無しさん
2005/08/12(金) 23:00:550862デフォルトの名無しさん
2005/08/12(金) 23:02:05( ‘д‘)
⊂彡☆static
0863デフォルトの名無しさん
2005/08/12(金) 23:09:040864デフォルトの名無しさん
NGNGシュチュエーションがあまりないから、strncpy()はあまり使いどころがないような。
もしそういう処理なら、strncpyを使って、バッファの最後に必ず0を書き込むという
処理でいいかもしれないけど。
バグを利用してスタックを書き換えるとか、セキュリティーを意識して、strncpy()が
推奨されてるのだろうか。
0865デフォルトの名無しさん
2005/08/12(金) 23:12:520866デフォルトの名無しさん
2005/08/12(金) 23:18:19クラスユニークな変数を臨機応変に生成 / 削除したいなら
static なポインタを定義して new / delete すればええやん
マルチスレッドんときはブロック処理して
0867デフォルトの名無しさん
2005/08/12(金) 23:31:54> ttp://www.linux.or.jp/JF/JFdocs/Secure-Programs-HOWTO/dangers-c.html
日本語しか読めないとこんな時代遅れの文書をいつまでも
使い続けることになるんだな。かわいそう。
0868デフォルトの名無しさん
2005/08/12(金) 23:38:300869デフォルトの名無しさん
2005/08/12(金) 23:41:14>>867は日本語もろくに使えない池沼
>>867は日本語もろくに使えない池沼
>>867は日本語もろくに使えない池沼
0870デフォルトの名無しさん
2005/08/12(金) 23:45:26もう少しトゲのない文章は書けないのかね?
0871デフォルトの名無しさん
2005/08/12(金) 23:46:51少なくともWIN系ではそのままじゃ使えないな
#define snprintf _snprintf みたいなことをしなきゃならん
0872デフォルトの名無しさん
2005/08/13(土) 00:17:36string.hって文字列操作用の関数群であって、文字列用バッファ管理をするものではないという認識で居たんだが、プロの世界ではstring.hにあるような関数を直で使ってバッファ操作を行うのか・・・
0873デフォルトの名無しさん
2005/08/13(土) 00:21:59その使い方だと、最後にNULが埋まらない場合が多い気がするけど。
0874デフォルトの名無しさん
2005/08/13(土) 07:01:50クラスCはメンバ変数としてvoid(*m_pfunc)(int)という関数ポインタを持ち、
Set〜,Get〜という感じでそのポインタのセッターゲッター関数もあります。
クラスAはメンバ変数としてクラスBへのポインタを持っています。
クラスAのコンストラクタでクラスBをnewして、
クラスAのメンバ関数void func(int) へのポインタを
クラスBに渡したいのですが、可能でしょうか?
とすればどう書けばよいでしょうか。教えてください。
0875デフォルトの名無しさん
2005/08/13(土) 07:19:40メンバ関数 void func(int) へのポインタは void (*m_pfunc)(int) とは型が違うぞ。
それ以外の情報は関係ない。型をあわせない限り無理。
0876デフォルトの名無しさん
2005/08/13(土) 07:24:53戻り値voidで引数intな型の関数(とそのポインタ)のつもりだったんですけど、
どう違いますでしょうか。
0877デフォルトの名無しさん
2005/08/13(土) 07:30:510878デフォルトの名無しさん
2005/08/13(土) 07:42:100879デフォルトの名無しさん
2005/08/13(土) 07:51:52クラスA内で生成するクラスBの、このインスタンスには
特別にクラスAのメンバ関数へのポインタを渡したいのです。
メンバ関数と外の関数の両方に対応させるというのは不可能な事なのでしょうか?
0880デフォルトの名無しさん
2005/08/13(土) 08:06:110881デフォルトの名無しさん
2005/08/13(土) 08:17:37メンバ関数へのポインタってのは取れないんですか?
クラスごとにそれぞれ.cppと.hファイルを作ってるんですが、
クラスAの定義の外側に普通の関数として書いてそのポインタを渡せば
とりあえず目的は達成できると思いますが、なんか汚いというか気持ち悪いです。
こういったケースの場合どうするのがいいでしょうか。
0882デフォルトの名無しさん
2005/08/13(土) 08:24:39void(A::*m_pfunc)(int)
この場合、C の宣言に A が出てくることになるが、いいのか?
メンバ関数へのポインタは普通のポインタの逆でアップキャストができない
0883デフォルトの名無しさん
2005/08/13(土) 08:47:07メンバ関数ポインタの使用に固執するなら、まあ、クラスBにクラスAの
メンバ関数ポインタ型のメンバと、それを初期化するコンストラクタを書く
のがまともな手だとおもうが
それがいやなら、静的メンバ関数は、通常の関数ポインタに渡せるから、
そこら辺で妥協すれば?
0884デフォルトの名無しさん
2005/08/13(土) 09:22:410885デフォルトの名無しさん
2005/08/13(土) 12:46:39>クラスAの定義の外側に普通の関数として書いてそのポインタを渡せば
それで済むようなものは非静的メンバ関数である必要はないんじゃないか?
つまり >883
>それがいやなら、静的メンバ関数は、通常の関数ポインタに渡せるから、
>そこら辺で妥協すれば?
0886デフォルトの名無しさん
2005/08/13(土) 12:55:47>>885
一応クラスで全部ラッピングしたいのと(一個だけ外にあると気持ち悪い)、
ライブラリっぽくしたいので、グローバルな関数を使用して
それを外からよばれたりすると困らないかなと思いまして。
staticな関数にするとstaticなメンバにしかアクセスできないし、
この関数一つのためにクラスBにAの宣言を書くのも気持ち悪いなと。。。
グローバルにしながら外から呼べなくする方法というのはありますでしょうか?
(今は関数オブジェクトというのについて調べてます)
0887デフォルトの名無しさん
2005/08/13(土) 14:36:00template <typename T> struct C { void (T::*m_pfunc)(); };
template <typename T> struct B : C<T> { };
struct A : C<A>
{
B<A>* b;
A()
{
b = new B<A>;
b->m_pfunc = &A::func;
}
void func() { }
};
0888デフォルトの名無しさん
2005/08/13(土) 15:02:30関数ポインタとメンバ関数ポインタの違いとか、
>staticな関数にするとstaticなメンバにしかアクセスできないし、
の理由とか、分かっているのかな。
関数オブジェクトについて調べるより、そっちの方が先だと思う。
その辺が分かれば答えは自ずと見えてくると思うんだけど……。
こういうのって色々やり方があって、状況に応じて使い分けているから
一概にこれ、とは言いづらいんじゃない?
>>887
>>879
>普段は外の(グローバルな?)関数へのポインタを渡して使っているのですが、
>..snip..
>メンバ関数と外の関数の両方に対応させるというのは不可能な事なのでしょうか?
らしいよ。
#Boost.Functionと言いたくても我慢してる自分
0889デフォルトの名無しさん
2005/08/13(土) 16:05:57二工夫ぐらい必要だし、キャスト必至で使いにくそう
0890デフォルトの名無しさん
2005/08/13(土) 17:15:01というわけで、関数オブジェクトならぬ関数ホルダーを使った実装w
本質的に無関係なんで、AのB型ポインタ・メンバはオブジェクトに変えさせてもらった
これで要望は満たしていると思うが、いかがか?
VC++7.1 で確認済み
#include <iostream>
#include <memory>
struct FuncHolderBase { virtual FuncHolderBase* clone() const = 0; };
template<typename Func>
class FuncHolder : public FuncHolderBase {
Func func_;
public:
FuncHolder(Func f) : func_(f) {}
FuncHolder<Func>* clone() const { return new FuncHolder<Func>(func_); }
operator Func() { return func_; }
};
(続く)
0891デフォルトの名無しさん
2005/08/13(土) 17:16:06std::auto_ptr<FuncHolderBase> fb_;
typedef void(*Func)(int);
public:
void set(Func f) { fb_.reset(new FuncHolder<Func>(f)); }
void set(FuncHolderBase const& fb) { fb_.reset(fb.clone()); }
template<typename T> T& get() { return static_cast<T&>(*fb_); }
FuncHolder<Func>& get() { return get<FuncHolder<Func> >(); }
};
struct B : public C {};
class A : public C {
typedef void(A::*MF)(int);
B b_;
void print(int n) { std::cout << "Member: " << n << std::endl; }
public:
A() { b_.set(FuncHolder<MF>(&A::print)); }
void foo(int n) {
(this->*b_.get<FuncHolder<MF> >())(n); }
};
void print(int n) { std::cout << "Normal: " << n << std::endl; }
int main()
{
B b; b.set(&print); b.get()(1);
A a; a.foo(2);
}
0892890
2005/08/13(土) 18:18:07テンプレートって侮れねえ.....orz
0893874
2005/08/13(土) 20:55:56ちょっと今の自分のレベルだと難しそうなので、
とりあえずきれいではない方法でベタに書いておきます。
いろいろキーワードを頂いたので、もうちょっとレベルが上がったら
見れるようにログを保存しとこうと思います。
(>>892よかったらあとで参考にしたいので教えてください。)
ありがとうございました。
0894892
2005/08/13(土) 21:59:31じゃあ、挙げとく
struct FuncHolderBase {};
template<typename Func>
class FuncHolder : public FuncHolderBase {
Func func_;
public:
FuncHolder(Func f) : func_(f) {}
operator Func() { return func_; }
};
class C {
std::auto_ptr<FuncHolderBase> fb_;
typedef void(*Func)(int);
public:
template<typename T>
void set(T f) { fb_.reset(new FuncHolder<T>(f)); }
template<typename T> T get() { return static_cast<FuncHolder<T>&>(*fb_); }
Func get() { return get<Func>(); }
};
class A : public C {
typedef void(A::*MF)(int);
B b_;
void print(int n) { std::cout << "Member: " << n << std::endl; }
public:
A() { b_.set(&A::print); }
void foo(int n) { (this->*b_.get<MF>())(n); }
};
後は890-891と同じ
0895874
2005/08/14(日) 10:07:57ありがとうございました。まだ意味もよく分からぬままですが
とりあえずいじってみようと思ってコンパイルしてみたところエラーが出ました。
VC6++なんですが、なんかコンパイラの原因でしょうか。
error C2275: 'C::Func' : typedef 識別子に、クラス メンバ アクセス演算子 (->) を使用しました。
error C2059: 構文エラー : ')'
error C2783: 'T __thiscall C::get(void)' : 'T' 用のテンプレートの引数を減少できませんでした。
warning C4508: 'main' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。
0896デフォルトの名無しさん
2005/08/14(日) 10:10:420897デフォルトの名無しさん
2005/08/14(日) 10:11:12るせーToolkit使ってるおれはどうなる
0898デフォルトの名無しさん
2005/08/14(日) 10:31:460899デフォルトの名無しさん
2005/08/14(日) 10:48:24世間の端っこにばかり居て中道の感覚を知らない
うらぶれたおっさんの言動w
0900デフォルトの名無しさん
2005/08/14(日) 11:14:50下手するとVC++5.0使っている場合もあるよ。
0901デフォルトの名無しさん
2005/08/14(日) 11:47:02使っているからって糞じゃないとか言い出すのは、日々の土方労働で
感覚がすっかりズレてしまった阿呆。
0902デフォルトの名無しさん
2005/08/14(日) 11:49:070903874
2005/08/14(日) 11:52:01コンパイラの問題だから修正しようがない、ってことでOKですか?
0904デフォルトの名無しさん
2005/08/14(日) 12:02:250905デフォルトの名無しさん
2005/08/14(日) 12:04:53あ、デバッガ使えなくなるんだっけ?覚えてないけど。
0906デフォルトの名無しさん
2005/08/14(日) 12:21:08財布と相談しろとしか言いようがない。
0907874
2005/08/14(日) 12:29:02なにが引っかかってエラーになってるのか分からないんですが。
0908デフォルトの名無しさん
2005/08/14(日) 12:31:330909デフォルトの名無しさん
2005/08/14(日) 14:13:45それにサイトもリニューアルしてるし
0910デフォルトの名無しさん
2005/08/14(日) 14:21:21違う
あなたが悩んでいることは純粋に設計の問題であって
コンパイラのバージョンは関係ない
何をどうしたいのかを、まずはっきりさせなさい
それでもし書けないことがあったら、
本質的に無理なことか、そうではないかをはっきりさせなさい
本質的に無理なこととは、アセンブラでもハードでも絶対に無理なことを言う
0911874
2005/08/14(日) 15:08:39教える立場、教えてもらう立場って前にあかの他人同士だっていう関係性を忘れんな。
テメェが威張る場面じゃねーんだよ。
偉そうな事抜かす前に話の流れくらい読んでから書き込めや糞馬鹿が。
0912デフォルトの名無しさん
2005/08/14(日) 15:20:260913デフォルトの名無しさん
2005/08/14(日) 15:30:540914デフォルトの名無しさん
2005/08/14(日) 15:56:500915デフォルトの名無しさん
2005/08/14(日) 15:57:560916デフォルトの名無しさん
2005/08/14(日) 16:16:380917デフォルトの名無しさん
2005/08/14(日) 16:32:420918874
2005/08/14(日) 16:51:530919デフォルトの名無しさん
2005/08/14(日) 17:31:30わからない人がいるみたいだから
説明してあげたんですよ。
もうわかりましたか?
0920デフォルトの名無しさん
2005/08/14(日) 18:21:39何も説明してないじゃん
これだから池沼は困る
0921デフォルトの名無しさん
2005/08/14(日) 19:40:23早くよくなってくださいね。
0922デフォルトの名無しさん
2005/08/14(日) 19:44:46char *a;//char型のポインタにはいったもじを
string aa;//string型の変数に代入したいのですが、
どうすればよいのでしょうか。
for(int i = 0;i<sizeof(a);i++){
aa += *a;
a++;
}
このようにすると、
仲良し 織
では、仲良 しか、はいりません。
0923デフォルトの名無しさん
2005/08/14(日) 19:58:360924デフォルトの名無しさん
2005/08/14(日) 20:05:440925デフォルトの名無しさん
2005/08/14(日) 20:15:03どうしたらよいでしょうか。
0926925
2005/08/14(日) 20:44:280927785
2005/08/14(日) 21:46:12ISOイメージ版をDLして
Daemon Toolsでマウントしてインストールしたとです
(FULL DONWLOAD版は使用方法不明)
0929デフォルトの名無しさん
2005/08/14(日) 23:00:360930デフォルトの名無しさん
2005/08/14(日) 23:04:37どのバージョン?
0931デフォルトの名無しさん
2005/08/14(日) 23:09:16standardです
0932デフォルトの名無しさん
2005/08/14(日) 23:20:01いいんじゃね?
0933デフォルトの名無しさん
2005/08/14(日) 23:24:27サポートに電話して聞いても詳しく教えてくれなかったので・・・
明日買ってきます
0934デフォルトの名無しさん
2005/08/14(日) 23:35:46どこにかけたんだ? MSのサポートはちゃんとそーゆー事にも答えてくれるぞ。
0935デフォルトの名無しさん
2005/08/14(日) 23:39:500936デフォルトの名無しさん
2005/08/14(日) 23:42:310937デフォルトの名無しさん
2005/08/14(日) 23:44:21MSへですよ
うーん、電話の内容をここに転載してもいいのでしょうか?
一言一句正しく書かないと怖いことになりそうです
0938デフォルトの名無しさん
2005/08/14(日) 23:47:310939デフォルトの名無しさん
2005/08/14(日) 23:53:05いらない。スレ違い。
やるならどっか他所でやれ。
0940デフォルトの名無しさん
2005/08/15(月) 02:01:500941デフォルトの名無しさん
2005/08/15(月) 02:27:21IBM PS/2のソフトならTurboC++1.0でも落としてくれば?
0942デフォルトの名無しさん
2005/08/15(月) 02:31:33SDKとかが供給されるんでなかったか?違ったかな?
0943デフォルトの名無しさん
2005/08/15(月) 02:36:42つか、あれはドキュメントが全てやけど。
0944デフォルトの名無しさん
2005/08/15(月) 06:49:53ttp://page3.auctions.yahoo.co.jp/jp/auction/c104648493
終了してっけど。
0945デフォルトの名無しさん
2005/08/15(月) 07:02:350946デフォルトの名無しさん
2005/08/15(月) 11:02:08http://www.ps2dev.org/
オープンソースのDevelopment Kitがある。
0947デフォルトの名無しさん
2005/08/15(月) 19:16:57思うような結果になりません。「こんにちは」のように全て全角の文字列の場合、
「こんにちは(半角→)ヘヘ・・・・ンンンンンA」のような妙な半角文字が表示されます。
「こaんにちは」などのように途中に半角文字を挟んだり、
全部半角の文字列を渡した場合はうまくいくようです。
どうしたらよいでしょうか。教えてくださいお願いします。
///////////////wstringからstringに変換//////////////
string narrow(const wstring& input) {
char* buffer = new char[input.size() * MB_CUR_MAX + 1];
wcstombs(buffer, input.c_str(), input.size() * MB_CUR_MAX);
string result = buffer;
delete[] buffer;
return result;
}
////////////main()の先頭でlocale設定////////////////
std::locale::global(std::locale("ja"));
////////////結果テスト//////////////
wstring text;
text = L"こんにちは";
MessageBox(NULL,narrow(text).c_str(),"",MB_OK);
0948デフォルトの名無しさん
2005/08/15(月) 19:23:41windows.hをインクルードできなくて。同じフォルダにおいても。
untitled.c(1) : fatal error C1083:
Cannot open include file: 'Windows.h': No such file or directory
0949948
2005/08/15(月) 19:26:30VCTK2003
0950デフォルトの名無しさん
2005/08/15(月) 19:43:32大量のエラー吐きまくりで実行できません。
どういう風にインストールすればいいのか!?
0951デフォルトの名無しさん
2005/08/15(月) 19:52:07開発環境の話はスレ違い
0952デフォルトの名無しさん
2005/08/15(月) 19:55:41>C言語をはじめよう!のひな形が実行できません。
ここは C++ スレです
0953デフォルトの名無しさん
2005/08/15(月) 20:12:27{...
};
Class MainMethod
{
static CommonValue commonValue;
};
としたいのですが
外部シンボルCommonValue が未解決です
といわれます.
classをstaticに宣言することはできないのでしょうか?
0954デフォルトの名無しさん
2005/08/15(月) 20:16:43{...
};
Class MainMethod
{
static CommonValue commonValue;
};
CommonValue MainMethod::commonValue;
説明は有料です
0955デフォルトの名無しさん
2005/08/15(月) 20:18:28おまいさんが、宣言しかしてなくて定義をしていないからコンパイラ(リンカ)さんが怒るのです。
どっか適当なところに
static MainMethod::CommonValue commonValue;
とかって定義を記述しておきなさい。
0956デフォルトの名無しさん
2005/08/15(月) 20:18:54あのー、今日はこれくらいしかもってないんですけど…これで何とか…
)
(
,, ) )
゙ミ;;;;;,_ (
ミ;;;;;;;;、;:..,,.,,,,,
i;i;i;i; '',',;^′..ヽ
゙ゞy、、;:..、) }
.¨.、,_,,、_,,r_,ノ′
/;:;":;.:;";i; '',',;;;_~;;;′.ヽ
゙{y、、;:...:,:.:.、;:..:,:.:. ._ 、}
".¨ー=v ''‐ .:v、,,、_,r_,ノ′
/;i;i; '',',;;;_~⌒¨;;;;;;;;ヾ.ミ゙´゙^′..ヽ
゙{y、、;:...:,:.:.、;、;:.:,:.:. ._ .、) 、}
".¨ー=v ''‐ .:v、冫_._ .、,_,,、_,,r_,ノ′
/i;i; '',',;;;_~υ⌒¨;;;;;;;;ヾ.ミ゙´゙^′.ソ.ヽ
゙{y、、;:..ゞ.:,:.:.、;:.ミ.:,:.:. ._υ゚o,,'.、) 、}
ヾ,,..;::;;;::,;,::;):;:;:; .:v、冫_._ .、,_,,、_,,r_,ノ′
0957デフォルトの名無しさん
2005/08/15(月) 20:19:130958デフォルトの名無しさん
2005/08/15(月) 20:21:23教える立場、教えてもらう立場って前にあかの他人同士だっていう関係性を忘れんな。
テメェが威張る場面じゃねーんだよ。
偉そうな事抜かす前に話の流れくらい読んでから書き込めや糞馬鹿が。
0959デフォルトの名無しさん
2005/08/15(月) 20:23:30{
static CommonValue &commonValue(){
static s_commonValue; return s_commonValue;
}
};
にでもしときんさい。
0960デフォルトの名無しさん
2005/08/15(月) 20:24:01>あかの他人同士だっていう関係性を忘れんな。
オマエガナー
0961デフォルトの名無しさん
2005/08/15(月) 20:26:39偉そうな事抜かす前に話の流れくらい読んでから書き込めや糞馬鹿が。
0962デフォルトの名無しさん
2005/08/15(月) 20:29:160963デフォルトの名無しさん
2005/08/15(月) 20:31:590964デフォルトの名無しさん
2005/08/15(月) 20:34:140965デフォルトの名無しさん
2005/08/15(月) 20:34:55向こうでlocaleの指摘をした&&cppllのログページを紹介した人間だが。
紹介先のコードが間違ってたみたい。規格を確認したら、wcstombsは
サイズnを指定した場合、「nバイトに達した」または「ナル文字を格納した」
場合にコピーを停止するから、ナル文字まで含めた文字数(つまり
バッファ長)を渡さなくちゃいけないみたい。
std::string narrow(const std::wstring& input) {
char* buffer = new char[input.size() * MB_CUR_MAX + 1];
std::wcstombs(buffer, input.c_str(), input.size() * MB_CUR_MAX + 1);
std::string result = buffer;
delete[] buffer;
return result;
}
0966デフォルトの名無しさん
2005/08/15(月) 20:35:020967965
2005/08/15(月) 20:52:25環境はVisual C++ Toolkit 2003です。一応。
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
0968デフォルトの名無しさん
2005/08/15(月) 20:53:480969デフォルトの名無しさん
2005/08/15(月) 21:06:140970947
2005/08/15(月) 21:08:26いろいろありがとうございました。+1したらうまくいきました。
終端NULLの分を含めないといけなかったというのはおかげ様で納得できたのですが、
でもだとするとなんで半角文字含めた文字列を渡したときにうまくいってたんでしょう?
0971デフォルトの名無しさん
2005/08/15(月) 21:21:58それは非常に単純。
バッファを全部使い切る前に文字終端に達したと言うだけの話。
0972デフォルトの名無しさん
2005/08/15(月) 21:22:50VCのwcstrの日本語文字はmbstrに戻すとき、2byte食う。
VCのwcstrの半角英数文字は、mbstrに戻すとき1byteしか食わない(一文字につき1byte分余る)
それだけの話だろう?
0974デフォルトの名無しさん
2005/08/15(月) 22:51:44どんなひどい初心者質問でも
0975デフォルトの名無しさん
2005/08/15(月) 22:52:580976デフォルトの名無しさん
2005/08/15(月) 23:04:120977デフォルトの名無しさん
2005/08/15(月) 23:04:20いま、立てています
0978デフォルトの名無しさん
2005/08/15(月) 23:05:50http://pc8.2ch.net/test/read.cgi/tech/1124113879/
0979デフォルトの名無しさん
2005/08/15(月) 23:06:520980デフォルトの名無しさん
2005/08/16(火) 03:39:510981デフォルトの名無しさん
2005/08/16(火) 10:24:430982デフォルトの名無しさん
2005/08/16(火) 13:07:050983デフォルトの名無しさん
2005/08/16(火) 13:52:440984デフォルトの名無しさん
2005/08/16(火) 13:56:100985デフォルトの名無しさん
2005/08/16(火) 14:01:460986デフォルトの名無しさん
2005/08/16(火) 14:21:380987デフォルトの名無しさん
2005/08/16(火) 14:22:400988デフォルトの名無しさん
2005/08/16(火) 14:23:09■━⊂( 。・_・) 彡 ガッ☆`Д´)ノ
■━⊂( 。・_・) 彡 ガッ☆`Д´)ノ
■━⊂( 。・_・) 彡 ガッ☆`Д´)ノ
■━⊂( 。・_・) 彡 ガッ☆`Д´)ノ
0989デフォルトの名無しさん
2005/08/16(火) 14:25:52class ぬるぽ
{};
main()
{ }
0990デフォルトの名無しさん
2005/08/16(火) 14:31:25■━⊂( 。・_・) 彡 ガッ☆`Д´)ノ
0991デフォルトの名無しさん
2005/08/16(火) 14:33:200992デフォルトの名無しさん
2005/08/16(火) 14:50:140993デフォルトの名無しさん
2005/08/16(火) 14:53:200994デフォルトの名無しさん
2005/08/16(火) 15:08:330995デフォルトの名無しさん
2005/08/16(火) 15:11:390996デフォルトの名無しさん
2005/08/16(火) 15:12:09■━⊂( 。・_・) 彡 ガッ☆`Д´)ノ
0997デフォルトの名無しさん
2005/08/16(火) 15:12:45■━⊂( 。・_・) 彡 ガッ☆`Д´)ノ
0998デフォルトの名無しさん
2005/08/16(火) 15:14:470999デフォルトの名無しさん
2005/08/16(火) 15:16:281000デフォルトの名無しさん
2005/08/16(火) 15:17:3010011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。