トップページ⇒tech
1001コメント247KB

C++相談室 part8

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
(´∀`).。o(関連URLは>>2-5の辺り)
0002デフォルトの名無しさんNGNG
実数の階乗はガンマ関数ってか?
0003v(^▽^)vNGNG
C++ Final Draft International Standard
http://www.kuzbass.ru/docs/isocpp/

Boost
http://www.boost.org/
STLport
http://www.stlport.org/
Loki
http://www.moderncppdesign.com/


過去ログ
Part1
http://piza.2ch.net/tech/kako/980/980175292.html
Part3
http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4
http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5
http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6
http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7
http://pc.2ch.net/test/read.cgi/tech/1021787032/
0004デフォルトの名無しさんNGNG
v(^▽^)v

Generic Programming with C++ Template
http://pc.2ch.net/test/read.cgi/tech/1008593126/
●STL スレッド●
http://pc.2ch.net/test/read.cgi/tech/1004287394/


Windowsの話はこちらで

Win32API 質問箱 Build4
http://pc.2ch.net/test/read.cgi/tech/1023361418/


■ VisualC++(MFC限定)相談室 4■
http://pc.2ch.net/test/read.cgi/tech/1021620974/
0005デフォルトの名無しさんNGNG
■関連スレ■

VisualC++相談室 3
http://piza2.2ch.net/tech/kako/993/993186053.html
VisualC++相談室 4
http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
VisualC++相談室 5
http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
VisualC++相談室 6
http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
VisualC++相談室 【7】
http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
VisualC相談室 【8】
http://pc.2ch.net/test/read.cgi/tech/1022499000/
0006デフォルトの名無しさんNGNG
乙カレー
0007デフォルトの名無しさんNGNG
>>2
過去ログとか書き終わるまで、まてよ
0008v(^・^)vNGNG
v(^・^)v
0009shigeNGNG
v(^・^)v ←むかつく
0010デフォルトの名無しさんNGNG
v(^・^)v ←なんすかこれ
0011デフォルトの名無しさんNGNG
もうC++スレいらないって言っただろ
何で立てるんだよ?
0012デフォルトの名無しさんNGNG
>>10
俺の顔
0013v(^・^)vNGNG
v(^・^)v delete >>11;
0014デフォルトの名無しさんNGNG
>>11
お前が見なけりゃいいだけ
0015デフォルトの名無しさんNGNG
ドイツ強いな。
fstream系のコンストラクタってなんでワイド文字バージョンが
ないのだろう。変換が面倒くさい。
0016デフォルトの名無しさんNGNG
destroy(>>11);
0017デフォルトの名無しさんNGNG
SendMessage(>>11, WM_ITTEYOSHI, 0, 0);
0018デフォルトの名無しさんNGNG
if (msg.sender == >>17)
 reject();
0019デフォルトの名無しさんNGNG
if (>>11->temminate())
>>11->deallocate();
0020デフォルトの名無しさんNGNG
terminate()だった。逝ってきます・・・・
0021デフォルトの名無しさんNGNG
void >>11::OnDeallocate()
{
 for (;;)
  new >>11;
}
0022デフォルトの名無しさんNGNG
void >>11::>>11()
{
 this->execute("マンキン.exe");
}
0023デフォルトの名無しさんNGNG
>>22
Syntax error
0024デフォルトの名無しさんNGNG
>>23
たしかに>>22はvoidが不要だった。コンストラクタのつもり。

オブジェクトを生成しようとすると、マンキン.exeが実行され、
HDDがあぼ〜んする。
0025デフォルトの名無しさんNGNG
>>1 乙カレー

Lokiをリンクに入れるのならここもリンクに入れてくれ。

LokiをVC7に移植したLokiPort
http://www.geocities.com/rani_sharoni/LokiPort.html
0026デフォルトの名無しさんNGNG
C++の参照について質問です。

void A(char **a,char **b){
 *a="a";
 *b="b";
}
main(){
 char *a,*b;
 A(&a,&b)

というように、2つの値を返したい関数があるのですが、
これを参照を使おうと思って、
void A(char &*a,char &*b)
としてみましたが、
エラー:参照型へのポインタあるいは参照は定義できない
と言われてしまいました。やりたいのは参照型へのポインタではなく、ポインタへの参照
だと思うんですけど、どう書いたらいいのか教えてください。
0027デフォルトの名無しさんNGNG
void A(char*& a, char*& b)
0028デフォルトの名無しさんNGNG
istreamからvectorに内容をコピーするとき、

istream_iterator<char> i(f), e(f);
advance(e, 15);
copy(i, e, back_inserter(v));

とやってみても一切読み込めません。
指定サイズを読み込む方法って無いんですか?
0029助けてくださいNGNG
教科書に
#include"compati.h"
とあったので書き込むと
fatal error C1083: インクルード ファイルがオープンできません。'compati.h': No such file or directory
と出て来ます。
これは何者なんですか?
ほんとのド素人です
0030デフォルトの名無しさんNGNG
>29
勘だが、その教科書の前のほうにそのファイルが定義されている
0031デフォルトの名無しさんNGNG
ってゆーか、他の人の方が効きたいんじゃないか>これは何者なんですか?
0032助けてくださいNGNG
includeの中身を” ”でくくるっていうのはどういうことなんですか?

0033デフォルトの名無しさんNGNG
>32
先に近所を読む
0034助けてくださいNGNG
それが教授からコピーしか貰ってないから前後が無いんですわ
0035デフォルトの名無しさんNGNG
その答えはK&Rに。
0036デフォルトの名無しさんNGNG
>>27
できました!
ありがとうございます。
0037デフォルトの名無しさんNGNG
教授にそのことを言うか、同じ本を探すか、ですなぁ?
0038助けてくださいNGNG
そうですか・・

0039助けてくださいNGNG
ちなみに「先に近所を読む」ってどういう意味です?


0040デフォルトの名無しさんNGNG
compati.hについて書かれてないのならお手上げですな。
ファイル自作してエラーメッセージを見れば、あるいは内容を推測
出来るかも知れん。
0041デフォルトの名無しさんNGNG
stdio.hとかがあるところを読む前に、自分が作業している
ディレクトリを探すってこと。たいてい標準的なのは<>で囲み、
自分たちがつくったファイルをインクルードするときは""で
囲む
0042デフォルトの名無しさんNGNG
教授を小一時間、問い詰めろ。
0043助けてくださいNGNG
プログラムが80行あるんで順番に書き込んでみてもらってもいいですかね?
0044デフォルトの名無しさんNGNG
>>28
input iteratorからcopyでは無理。素直にforループを書く。
と思う
0045デフォルトの名無しさんNGNG
まあ、いいんでない?
0046デフォルトの名無しさんNGNG
そうだな
まだスレの初めだからいいだろう。
0047助けてくださいNGNG
#include<stdio.h>
#include"compati.h"

#define M 5 /*機会の台数*/
#define N 2 /*修理者の人数*/
#define A 10.0 /*平均故障発生感覚*/
#define H 4.0 /*平均修理時間*/
#define DT 0.5 /*時刻増分*/
#define T_END 10000.0 /*シミュレーションを終える時刻*/
0048助けてくださいNGNG
void main(void)
{
double tt = 0.0; /*シミュレーションクロック*/
int i; /*待ち行列のforのカウンタ*/
int j; /*機会のforカウンタ*/
int k; /*修理者のforカウンタ*/
int f = 0; /*故障している機械の台数*/
int q = 0; /*待ち行列の長さ*/
int sm[M + 1] = {0}; /*機会jのjの状態*/
int sn[N + 1] = {0}; /*修理者kの状態*/
int sq[M + 1] = {0}; /*待ち行列*/
double p[M + 1] = {0.0}; /*機会がf台故障している時間*/
srand(15);
0049助けてくださいNGNG
/*開始*/
while (tt <= T_END){

/*故障発生*/
for(j=1;j<=M;j++){
if(sm[j]==0){
if((1.0 / A*DT) > RAND()){
sm[j] = 1;
q = q+1;
sq[q] = j;
}
}
}
0050助けてくださいNGNG
/*故障修理*/
for(k=1;k<=N;k++){
if(sn[k]==0){
if(q>0){
sn[k]=sq[1];
q=q-1;
if(q>0){
for(i=1;i<=q;i++){
sq[i]=sq[i+1];
}
}
}
} else{
if((1.0/H*DT)>RAND()){
sm[sn[k]]=0;
sn[k]=0;
}
}
}
0051助けてくださいNGNG
/*表示*/
printf("%7.2f ",tt);
for (j = 1; j <= M; j ++) printf(" %2d",sm[j]);
printf(" ");
for (k = 1; k <= N; k ++) printf(" %2d",sn[k]);
printf(" ");
for (i = 1; i <= q; i ++) printf(" %2d",sq[i]);
printf(" ");

/*故障している機械の台数を数える*/
f=0;
for(j=1;j<=M;j++){
if(sm[j]==1){f=f+1;}
}
p[f]=p[f]+DT;

/*時刻を進める*/
tt=tt+DT;
}

/*結果出力*/
for(j=0;j<=M;j++){
printf("p[%1d]=%10f\n",j,(double)p[j]/T_END);
}
}
0052助けてくださいNGNG
以上です
0053デフォルトの名無しさんNGNG

イテレータとかのoperator->() は普通ポインタを返すようになってますが
なんでこれでメンバの参照ができるのですか?

そのまま単純に考えると
(イテレータ)->(メンバ名) は (Tのポインタ) (メンバ名) となるように思われ意味をなさないですよね。

Bjarneは
> p->m = 7; // (p.operator->())->m = 7
てますが、つまりoperator->()は特別扱いってこと?
0054デフォルトの名無しさんNGNG
srandとRANDぐらい?
0055デフォルトの名無しさんNGNG
ぱっと見、RAND()くらいしかないような。
0056デフォルトの名無しさんNGNG
>54
ぽいね。なんとかなりそうじゃん
0057デフォルトの名無しさんNGNG
55 鬱氏
0058助けてくださいNGNG
どういうことですか?
0059デフォルトの名無しさんNGNG
>>52
>void main(void)
ここだけでワラタ。
0060デフォルトの名無しさんNGNG
i=1;i<=M ってのがいいね。
0061デフォルトの名無しさんNGNG
#include "compati.h"
のかわりに

#include<stdlib.h>

double RAND(void)
{
return (double)rand()/RAND_MAX;
}
0062デフォルトの名無しさんNGNG
>助けてください
#include"compati.h"
の代わりに
#include<stdlib.h>
double RAND(void){return (double)rand()/(double)RAND_MAX ;}
とでもすればよい
006362NGNG
げげげ
006461NGNG
>62
すまん。
0065デフォルトの名無しさんNGNG
かぶりまくっているな。
0066デフォルトの名無しさんNGNG
ふたりが一致したということは、かなり正解ってことかな?
0067助けてくださいNGNG
おお!エラーがなくなりました!
0068デフォルトの名無しさんNGNG
待ち行列か。昔実験でやったよ。
0069デフォルトの名無しさんNGNG
ケコーン>>61-62
0070助けてくださいNGNG
ちなみに実行すると永遠に数字が出るんですがどこ直したらたらいいんですかね・・?
0071デフォルトの名無しさんNGNG
新たな問題発生
0072デフォルトの名無しさんNGNG
>70
中身についてはがんばってくれよ
0073デフォルトの名無しさんNGNG
>70
ここから先は宿題の範疇
0074助けてくださいNGNG
ですよね(笑)
っていうかマジありがとうございました!
これで胸張ってあした免許の試験受けにいけます!
0075デフォルトの名無しさんNGNG
#define T_END 10000.0 /*シミュレーションを終える時刻*/

T_ENDの単位はわからないけど、いつか止まりそう。
0076デフォルトの名無しさんNGNG
あ、遅かったか。
0077助けてくださいNGNG
まだいました
0078デフォルトの名無しさんNGNG
そうか、あしたがんがれ。
0079デフォルトの名無しさんNGNG
#define DT 0.5 /*時刻増分*/
#define T_END 10000.0 /*シミュレーションを終える時刻*/

好きにかえればいい。このままだと20000行
0080デフォルトの名無しさんNGNG
>78
なんかいいひとっぽい。
0081助けてくださってありがとうございましたNGNG
いやー、凄いですね。今大学3年なんですけど
どうやったらそんなにCできるようになるんですか?
0082デフォルトの名無しさんNGNG
>81
俺は大学4年だよ。Cをはじめたのは9年前だが。
0083デフォルトの名無しさんNGNG
プログラミングが好きならできるようになる。
試験があるならさっさと寝とけ

  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/ ←>>81
 (_フ彡        /
0084助けてくださってありがとうございましたNGNG
りょうかいです
0085デフォルトの名無しさんNGNG
  .∧ ∧
  (>>53).。oO(氏にたい…)
  /   \
  ⌒|  /⌒
   ノ_ノ
0086デフォルトの名無しさんNGNG
>>85
イテレータがポインタを返すようになってるから、->演算子はメンバを返す
ように(通常の構造体のアロー演算子のように)オーバーロードされてる
だけの話では?
0087デフォルトの名無しさんNGNG
>85
自分でスマートポインタ書いてみたらわかるんじゃない?
0088デフォルトの名無しさんNGNG
class A{
public:
void f(){
puts("A::f");
}
};
class B :public A{
public:
void f(){
puts("B");
A::f();//    ここ
}
};
ここで、クラス名を指定せずに自動的に継承元のメンバ関数を呼ぶことはできないのでしょうか。
perlだとSUPER::を付けると検索してくれるんですけど。
0089デフォルトの名無しさんNGNG
C++の予約語ってこれ以外に何がありましたっけ?

auto
and
bool
char
class
const
const_cast
double
define
defined
do
extern
explicit
enum
else
elif
endif
export
float
for
int
if
ifndef
include
long
mutable
namespace
or
public
protected
private
return
register
static
static_cast
struct
switch
short
sizeof
template
typedef
typename
using
void
volatile
while
xor
0090デフォルトの名無しさんNGNG
>>88
多重継承が可能な言語では無理じゃないの?
0091デフォルトの名無しさんNGNG
>89
reinterpret_cast
0092デフォルトの名無しさんNGNG
>>88
しかも呼び方が違う
0093デフォルトの名無しさんNGNG
>>86
operator->()が返すの自体はポインタではないですか・・・
>>87
ただ単に保持しているポインタを返すだけで期待通り動くので何も新しいことは
わからなかったです・・・
0094デフォルトの名無しさんNGNG
dynamic_castもな。
それから、xorは予約語じゃないぞ
0095デフォルトの名無しさんNGNG
>>89
あと
import
extends
implements
abstract
native
があります
009689NGNG
>xorは予約語じゃないぞ

そうだった(..;)どうも
0097デフォルトの名無しさんNGNG
>95
なかなかアグレッシブな人物だな。
009889NGNG
extensってJavaじゃないでしか?(..;)
0099デフォルトの名無しさんNGNG
virtual 抜けてるかも。>>89
0100デフォルトの名無しさんNGNG
>>90
perlは多重継承を可能にするために@ISAが配列になってると思ってたんだけど。
0101デフォルトの名無しさんNGNG
>>94
orとかandはいいのですか・・・
0102デフォルトの名無しさんNGNG
>>89
なんか、要るのがなくて、要らんのがあるね
0103デフォルトの名無しさんNGNG
xor予約語じゃない?
try,catch もある。
0104デフォルトの名無しさんNGNG
case
break
0105デフォルトの名無しさんNGNG
>>89はここをみたらどうだい・・・
http://www.kuzbass.ru/docs/isocpp/lex.html
0106デフォルトの名無しさんNGNG
operator,new,delete
0107デフォルトの名無しさんNGNG
inline
0108デフォルトの名無しさんNGNG
friend asm union
0109デフォルトの名無しさんNGNG
signed unsigned this
011089NGNG
>>105
助かりましたありがとう
0111デフォルトの名無しさんNGNG
ifndefが入っててifdefがないのはどうよ
つーか、プリプロセッサディレクティブもありなのか?
0112デフォルトの名無しさんNGNG
>89
スキャナでも作る気?
0113デフォルトの名無しさんNGNG
エディタの強調表示用のキーワード登録とか?
0114デフォルトの名無しさんNGNG
>113
それ、ありそう。
0115デフォルトの名無しさんNGNG
実装例があるかは知らないけど、exportキーワードはあるな。
0116デフォルトの名無しさんNGNG
括弧とか比較演算子とか、記号を奇妙な2文字の組み合わせで表現する方法があったけど、
なんて言うんでしたっけ?
検索キーワードが思いつかず、具体的な表記も分からないので検索のしようがないです
0117デフォルトの名無しさんNGNG
トライグラフって、C++でも有効なの?
0118デフォルトの名無しさんNGNG
有効。
0119デフォルトの名無しさんNGNG
stringクラスを参照ではなくそのまま関数の引数に与えるのは
良くないと言われたんだけど、本当ですか?
なんでも、VC標準のSTLやSTLPortではCopy On Writeになっていないから、だそうで。
0120デフォルトの名無しさんNGNG
>>119
string の値渡しは、const string& で渡す場合にくらべると、
百害あって一利なしって話だと思う。

あ、一利あった。
渡した先で const_cast されて、呼び出し元のデータが壊される危険性を回避できるな。
そんな理由で効率を落とす気には、普通は、ならんと思うけど。
0121デフォルトの名無しさんNGNG
>>119
VCのstringはリファレンスカウントしてるよ。
0122デフォルトの名無しさんNGNG
GCを導入しているC++処理系はありますか?
あったら教えてください
0123デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/1014486422/
0124122NGNG
まねじだ・・・(´д`;)
0125デフォルトの名無しさんNGNG
>>122
operetor new, operator delete を自前で定義すれば、処理系に依らず GC を
使えるけど。BoehmGC とか。

(ただし最適化しすぎると、動作がおかしくなったりする)
0126デフォルトの名無しさんNGNG
Cの初心者です。
ポインタについて学び、使い方は分かったのですが、これを使う理由が
つかめません。どういった場面で必要になるのか、どなたか教えて下さい。
0127デフォルトの名無しさんNGNG
>>126
文字列の操作、リストの実装、グラフの実装など。
ほとんどの場面で有効。
0128126NGNG
>>127
即レスthxです。参考にになりました(ノ´Д`)ノ
0129デフォルトの名無しさんNGNG
>>89
誰もasmキーワードに触れなかったのは何故だろう(w
0130デフォルトの名無しさんNGNG
>>108
0131デフォルトの名無しさんNGNG
>>89
規格書を引くと 2.11 Keywords に書いてあるよ。
0132デフォルトの名無しさんNGNG
>>53よ、くじけるな! 俺も同じ疑問を持った人間だ!
何も考えてない>>86>>87がマヌケなレスをしてるが、
とりあえず確認コードを書いてみるべさ。

class HOGE
{
  void foo(void){cout<<"foo"<<endl;}
};

auto_ptr<auto_ptr<HOGE> > ppHoge(new auto_ptr<HOGE>(new HOGE));

ppHoge->foo();

これでどうよ? 俺もまだ実験してないけど、これで
なにかが分かってくるんじゃないか?
あとで実験報告もするべさ!
0133デフォルトの名無しさんNGNG
trieコンテナのあるライブラリって無いですか?
指定したノード以下の要素すべて列挙できる物が欲しいのですが。
0134デフォルトの名無しさんNGNG
純然たる木構造だったら、自分で書いてもたいして手間にならないんじゃない?
0135132NGNG
VC6SP5での実験結果!
以下のコードが、正常にコンパイルされることがわかった!

(ppHoge->operator->())->foo();
ppHoge->operator->()->foo();
ppHoge.operator->()->operator->()->foo();
(*ppHoge.operator->()).operator->()->foo();
(*ppHoge.operator->())->foo();

で、結論。
ようするに、「new演算子」と「operator new」みたいな関係だ!

(オブジェクト)->(メンバ)

ってのは、「->演算子」の呼び出し。「->演算子」を呼び出すと、
演算子の左側がポインタなら、直(じか)に「->演算」を行う。
演算子の左側がクラスなら、そのクラスのoperator->()を呼び出した後、
「->演算」を行う。それが、
> p->m = 7; // (p.operator->())->m = 7
の意味だっ。
だから、
ppHoge -> -> foo();
はコンパイルされない。こいつは、「->演算子」の右側に引数が来るべき
なのに「->演算子」が来ているから。
うむっ、おっけっ! どこにも矛盾はないぞっ! どうよ?>>53

(´-`).。oO(問題は……これってプロ言を読んだら書いてありそうだなってことだ……)
0136デフォルトの名無しさんNGNG
>>135
そんな興奮せんでも仕様に書いてあるがな。
An expression x->m is interpreted as (x.operator->())->m for a class object…
0137132NGNG
>>136
やっぱりかいっ!

(´-`).。oO(やっぱプロ言は買っとかんとあかんかね……)
013853NGNG
operator->()を呼び出した場合はさらにそのあとに -> があるかのようにあつかわれるのか?
というのが結局>>53の意図するところであったわけで・・・
漏れは「そうだよ」と言ってほしかっただけちゃうんかと・・・
ありがとう>>135・・・
ARMには>>136のように書いてあったようだね・・・
0139デフォルトの名無しさんNGNG
endif に誰も突っ込まないのは何故だろう・・・
もしかしてホントにそうなの?
014053NGNG
>>137
THE C++ PROGRAMMING LANGUAGE(=プロ言?)にあったのが
> p->m = 7; // (p.operator->())->m = 7
です・・・
0141デフォルトの名無しさんNGNG
> THE C++ PROGRAMMING LANGUAGE
これ本当にフルネームで言うのが大変。何かいい呼び名つけようか。
0142デフォルトの名無しさんNGNG
(´-`).。oO(鬱病なのって俺だけかな・・・)
0143デフォルトの名無しさんNGNG
C++3rd
0144デフォルトの名無しさんNGNG
(´-`).。oO(俺の他にも鬱病がいたんだな・・・)
0145デフォルトの名無しさんNGNG
表紙の特徴から・・・Dragon Book、ラクダ本、Red Book
著者から・・・K&R、GoF、Petzold

う〜ん、表紙は各国で違ってるし特徴ないし、著者の名前も呼びにくいし・・・
0146デフォルトの名無しさんNGNG
>>145
表紙の特徴から・・・東映
0147146NGNG
スマソ・・・
0148デフォルトの名無しさんNGNG
いいかも。波しぶき具合が東映ぽくて。
0149デフォルトの名無しさんNGNG
びあるね本
決定!
0150デフォルトの名無しさんNGNG
昔のUNIXは3edとかいう名前がついてたと思った。
だからC++3edで十分。つーか既に古い。
0151デフォルトの名無しさんNGNG
MinGWがgcc3.1になった━━━━━━(゚∀゚)━━━━━━ !!
Dev-C++
http://www.bloodshed.net/dev/devcpp.html
0152デフォルトの名無しさんNGNG
>>151
gcc 3.x 系列、そろそろ安定した? 3.0.x の頃は、ちまちまとしたバグが出てた
みたいだけど。

(そろそろ乗り換え時か)
0153デフォルトの名無しさんNGNG
>>152
かなりいいみたいだよ。もっともDev-C++はまだβ版だけどね。
MinGWは実行ファイルのサイズが小さくて幸せ。
0154デフォルトの名無しさんNGNG
>MinGWは実行ファイルのサイズが小さくて幸せ。
ンなこたぁない
0155デフォルトの名無しさんNGNG
>>154
そ・・・・それは、、VCとかと比べるとあまり変わらンけど、BCよりは
小さいかなと。msvcrt使ってるから。

でも、gcc3.1になってから、実行ファイルのサイズが大きくなった
ようだし。。。取り敢えずサイズが小さいという言葉は取り下げます。
0156デフォルトの名無しさんNGNG
http://www.tietew.jp/cppll/archive/3217

このメッセージから始まっているスレッドで、
コンストラクタから例外を出さない方が良いとなっているんだけど
読んでもイマイチ理解できません。

class A {
 char* buf;
public:
 A():buf(new char[100]{}
 ~A(){delete buf;}
};

たとえばこんなクラスで、newが例外をthrowしても、
クラス構築失敗で問題無いと思うんですが。
0157初心者以前NGNG
これからVC++を始めようと思うのですが、
つくったもの(exeファイル)をネット上で実行ってできるのでしょうか?
ダウンロードして、実行というものはみたことあるのですが
クリックして、ネット上で実行するものをみたことありません。

どうなのでしょうか
0158名無しさん@カラアゲうまうまNGNG
文字列配列をnewで確保する方法ってこれであってますか?
char** all_line = new char*[n];
for(int i=0;i<n;i++)
all_line[i] = new char[100];
0159デフォルトの名無しさんNGNG
なぜvector<string>を使わない?
0160名無しさん@カラアゲうまうまNGNG
>>159
ごめんまだ入門者だから勉強してないんだ
0161デフォルトの名無しさんNGNG
>>157
「ネット上で実行」の定義を述べて下さい。
0162デフォルトの名無しさんNGNG
>>161
多分だけど、CGIプログラムのことじゃないかな?
0163デフォルトの名無しさんNGNG
>>158
いいけど100文字が分かっているなら
char (*p)[100] = new char[n][100] ;
のほうがいいと思う
0164名無しさん@カラアゲうまうまNGNG
>>163
ありがとうございました。
0165デフォルトの名無しさんNGNG
>161

Terrariumとか「ネットで実行」にぴったしダネ
0166デフォルトの名無しさんNGNG
みなさん自前のallocaterとか書いてますよね
俺も頑張ろう...
0167デフォルトの名無しさんNGNG
書いてないヨ
0168デフォルトの名無しさんNGNG
>>166
allocator・・・・・・
0169166NGNG
うわーん孤立しちゃったよ〜
0170デフォルトの名無しさんNGNG
Windowsでのエラー出力をストリームでやりたいのですが、
(最終的にはOutputDebugString()で出力する)
これって、ガリガリ書くしか方法は無いのでしょうか?

なんかSTL辺りに含まれてそうな気がするのですが(継承して使うとか)...

又、ソースを公開されているページでも良いので、ご存知でしたらお教えください。

trace << "エラー 変数=" << tmp << endl;
みたいに出来ないでしょうか...
0171デフォルトの名無しさんNGNG
>>170
http://www.jah.ne.jp/~naoyuki/Writings/ExtIos.html
ふぉらよ。あとは自力でなんとかしな。(勝手に引用失礼)

>>166
漏れもやってるよ。気にすんな。
でもインターフェースが気に入らずに結局vectorも自作したがな。
オラ不毛って言えよ!
0172170NGNG
↑そういうの待ってました!!

どうもありがとうございます。
0173デフォルトの名無しさんNGNG
詳しい人に質問!たとえば ホームページの管理人つまり制作者はそのホームページに来
ている人のどこまでの個人情報を知る事ができるの?あっipから住所等の個人情報が解る
なんてこという低レベルの回答は無しね。っていうか、ここには低レベルな人はいないとはおもうけど。
0174デフォルトの名無しさんNGNG
板違い
Web制作板にいけ。
0175デフォルトの名無しさんNGNG
>>173
その日にしたオナニーの回数や昨日食べた朝飯、
尻の使用回数などまでバッチリ分かりますが。
0176デフォルトの名無しさんNGNG
//a.h
class a {
private:
  static int m_value;
public:
  static int Get() { return m_value; };
};

//b.cpp
#include  "a.h"
class b : public a {};

void main() {
  b::Get();
};

とすると、リンク時に「Error: 外部シンボル 'a::m_value' が未解決」
となるんですが、なぜなんでしょう?

0177デフォルトの名無しさんNGNG
スタチックだから
0178176NGNG
m_valueの実体が定義されてないからでした。

class a {
private:
static int m_value;
public:
static int Get() { return m_value; };
};
int a::m_value = 0;
0179デフォルトの名無しさんNGNG
>>174
すみません、そっちにいきます
0180デフォルトの名無しさんNGNG
#defineとconstの違いは何ですか?
constは関数の中などで軽く定数を持たせたいときに使う事でよいですか?
0181デフォルトの名無しさんNGNG
>>180
Effective C++を買って読もう。君の質問の回答はそこにある。
ついで、将来君が疑問に思うであろう問題の回答の3割ぐらいはそこにあるはずだ。
0182180NGNG
>>181
どうもです。
財布に厳しい本ですが探してきます。
0183デフォルトの名無しさんNGNG
C++はプリプロセッサを使わないように改良されている・・・
by effective C++
0184180NGNG
Effective C++
思ったより値段の安い書籍でしたね。
1万円ほどすると勘違いしてました。

>>183
ナルホドどうもです。
0185デフォルトの名無しさんNGNG
便乗質問、EffectiveC++は図書館から借りてきて、暗記するほど
読み込んだのですが、Moreの方の評価はどんなもんでしょうか?

どちらかを購入したいのですが、間違いなく良書なれど既読の前者か、
立ち読みした感じ、ちょっと重箱の隅っぽい気がした未読の後者か…。
3800円を出せぬ貧乏人に、せめて知識をお与え下されば幸いです。
0186デフォルトの名無しさんNGNG
>>185
Effective C++, More Effective C++, Effective STL 三部作は、食費を削っても
買うべき。
0187デフォルトの名無しさんNGNG
STLもあったのか。買わねば・・・
0188185NGNG
>>186
スマートポインタや例外処理の解説くらいならとりあえずいいかな
…と思って他のですが、前作に劣らぬ良書なんですねぇ。レスサンクスです。

食費\400/dayか………………(;´Д`)つ�I アト380ニチ…
0189デフォルトの名無しさんNGNG
Exceptional C++も死んでも買いなさい
0190デフォルトの名無しさんNGNG
Modern C++ Designもよろしく。
0191デフォルトの名無しさんNGNG
C++で書かれたデザインパターンの良本はありませんか?
0192デフォルトの名無しさんNGNG
>>191
俺の脳内で自動翻訳済みの物がある
0193デフォルトの名無しさんNGNG
>>191
GoF のデザパタ本で良いと思うが。後は 190 も挙げてるけど Modern C++ Desgin
が template 使ってデザパタしてる。
0194デフォルトの名無しさんNGNG
191
_φ(。。_) GoFは著者名でしたっけ。ミョウニチ本屋へ足を運んでみます。
ありがとうです。
0195デフォルトの名無しさんNGNG
>>186 >>189-190
+ C++sardで6冊か(w
0196デフォルトの名無しさんNGNG
洋書以外だと憂鬱本ぐらいか?(w
0197デフォルトの名無しさんNGNG
>>195
Inside the C++ Object Model も入れとく。コンパイラの内部動作について理解を
深めるのに最適。STL 使うなら Generic Programming - STL による汎用プログ
ラミングも必読。あとは C++ only の本ではないが Linkers & Loaders も読んで
おいて損はない。

>>196
あれも良い本だよな。OO がらみだと、デザパタ本に憂鬱本、それからリファク
タリングあたりか。

(とりあえず、こんなもんじゃない?)
0198デフォルトの名無しさんNGNG
憂鬱本って何ですか?
0199デフォルトの名無しさんNGNG
>>198
『憂鬱なプログラマのための オブジェクト指向開発講座』
C++というよりはオブジェクト指向についての本だが。
わりと具体的に話を勧めていくので分かりやすい。

//しかし、必読書のレベルですらいくらかかるんだ?
0200デフォルトの名無しさんNGNG
C++コンパイラのインストーラには、
これらの本を理解しているかのテストをするセクションが欲しいね。
クリアしないと絶対にインストールできないの。
0201198NGNG
>>199
ありがとうございます。
0202デフォルトの名無しさんNGNG
>>200
実際にやってみながら学ぶことができない罠。
0203デフォルトの名無しさんNGNG
>>200
ネタにマジレスするのもなんだが、そりゃ辛すぎだわ。コンパイラで
実験してみないとわからん、みたいなこともあるんだし。

>>197
俺、STLに関する本はすでに『C++標準ライブラリチュートリアル&
リファレンス』と『Effective STL』を持ってるんだけど、
『Generic Programming - STL による汎用プログラミング』は、
それでも買ったほうがいいぐらいの本?
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/qid%3D1025313500/250-3796507-7440208
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/qid%3D1025313461/250-3796507-7440208
http://www.amazon.co.jp/exec/obidos/ASIN/4756134416/qid%3D1025313416/250-3796507-7440208
あと、『Inside the C++ Object Model』って、洋書?
0204デフォルトの名無しさんNGNG
>>203
『Generic Programming ―』は、体系的・抽象的に書かれているので、
ある程度 STL が分かってから読むべき本のように思う。でも、読んでおくと
視野が広がるし、思考の経済というか、他方面への応用も利くと思う。

『Inside the C++ Object Model』は、以前トッパンから訳書が出ていたんだが、
同社の出版事業撤退により絶版状態のようだ。C++ を究めたいという酔狂もの
には必読。
0205203NGNG
さんきゅ。憂鬱本とあわせて、その2冊も探してみるよ。
0206デフォルトの名無しさんNGNG
VC7でこんな現象に出くわしたんだが、これってバグだろうか?
下記ソースをコンパイルすると
error C2535: 'Aho<T>::Baka Aho<T>::f(Aho<T>::Baka)' : メンバ関数は、既に定義または宣言されています。
こういわれる。

template<class T>
class Aho {
typedef T::Baka Baka;
//typedef int Baka; // 上の行をコメントアウトしてこの行を有効にするとコンパイルが通る
template<class U> Baka f(Baka baka);
template<> Baka f<int>(Baka baka) { return Baka(); }
template<> Baka f<char>(Baka baka) { return Baka(); }
};
0207デフォルトの名無しさんNGNG
3行目ですでに使われてるBakaをもう一度使ってるからじゃないの?
0208デフォルトの名無しさんNGNG
そゆ問題では無いと思う。
テンプレート引数に依存した不明な型Bakaを引数にとった関数は
その特殊化よりも不明な引数の一致を優先して判断されているように
見受けられる。バグかな・・。
0209デフォルトの名無しさんNGNG
>>208
とりあえず gcc 2.95.3 でも Borland C++ Compiler 5.5.1 でもコンパイルエラー
になることは確認したけど。
0210デフォルトの名無しさんNGNG
配置構文(゚∀゚)デキタ!
0211デフォルトの名無しさんNGNG
>>209
するとC++として不正だって事?
なにがダメなんだろ・・・。
0212デフォルトの名無しさんNGNG
もしかして、
typedef typename T::Baka Baka;
じゃない?
0213デフォルトの名無しさんNGNG
>>212
だめですた・・
0214デフォルトの名無しさんNGNG
教えてください。
Cを一通りできるとして
C++を業務レベルまでマスターするには
どれくらいかかるんですか?
0215デフォルトの名無しさんNGNG
STL3年デザパタ5年
0216デフォルトの名無しさんNGNG
>>206
 typedef T::Baka Baka;
の意味を考えたらよくわかるはず.
当然,class T ではすでに T::Baka が typedef されている必要がある訳で.
あとは >>212 のいうとおり,
 typedef typename T::Baka Baka;
は必須の気が.
0217デフォルトの名無しさんNGNG
>>216
いや、結果は変わらないんですよ・・。in VC7
他のコンパイラではどうなんでしょうか?

template<class T>
class Aho {
typedef typename T::Baka Baka;
//typedef int Baka; // 上の行をコメントアウトしてこの行を有効にするとコンパイルが通る
template<class U> typename Baka f(typename Baka baka);
template<> typename Baka f<int>(typename Baka baka) { return Baka(); }
template<> typename Baka f<char>(typename Baka baka) { return Baka(); }
};
0218デフォルトの名無しさんNGNG
>>217
だ か ら
具体的にどんなインスタンス作ってるか教えれ
答えるのはそれからだ
0219デフォルトの名無しさんNGNG
>>218
宣言しただけ。
インスタンスは作らない状態でエラーが出ます。
0220デフォルトの名無しさんNGNG
>>219
VC6 だと何事もなく通るけど。
0221デフォルトの名無しさんNGNG
>>220
・・本当だ。
つまりVC7のヴァグってことでOK?
ゲイツ氏ね
0222デフォルトの名無しさんNGNG
・ここではどういう意味で「インスタンスを作る」という句を使っているのか?
・TにBakaを持っていないクラスを渡しているんじゃないか?
・VC6で通って、VC7で通らないことってあるの?
0223デフォルトの名無しさんNGNG
>>220
今試せないけどソースは上に上げたあれのみです。
typedef Aho<ほにゃらら>
もしてないし、ましてインスタンスの作成もしてないです。
0224デフォルトの名無しさんNGNG
お取り込み中申し訳ないのですが、新しく質問しても良いでしょうか?

基本クラスのポインタに派生クラスのオブジェクトをもたせている場合、
基本クラスのポインタをdeleteしただけでは派生クラスのデストラクタは
呼んでくれないのでしょうか?今書いているソースでそうなっていて
メモリリークを起こして困っているのですが・・・。
0225デフォルトの名無しさんNGNG
>>224
基底クラスのデストラクタを virtual にする必要があります。
0226デフォルトの名無しさんNGNG
>>225
あ、一応やってみています。当然ながらクラスと同名なので、デストラクタの
名前は変わってくるのですが、それでもオーバーライドしてくれるんですか?
やってみても呼んでくれてないようなんですが・・・
0227デフォルトの名無しさんNGNG
>>226
> 名前は変わってくるのですが、それでもオーバーライドしてくれるんですか?
もちろん。っつか、大抵の実装では名前なんか見てなくて vptr->vtbl に書き
込まれたポインタを参照するだけだし。

ダメだというそのプログラム、簡略化してテスト用のコードを張ってくれ。
0228デフォルトの名無しさんNGNG
>>227
ちょっと今取り込んでいるので、もし良かったら夜に張るので
お願いできますか?
0229アポストロフィーSNGNG
ちょっと質問です。
JPEG画像を縮小して保存するプログラムを作りたいんですが、自分でバイナリ読み取ってピクセル圧縮して色とかも平均出して・・・とかってやらないと駄目でしょうか。
かなり大変そうなんですが・・・ なんか簡単にできるライブラリとかありませんか?
0230廻し者NGNG
x86 で Windows なら、インテルパフォーマンスライブラリにある、
Intel Image Libary と Intel JPEG Library なんか使ってみては
どうでしょうか。

ttp://www.intel.com/software/products/perflib/
0231デフォルトの名無しさんNGNG
g++のios::begがあった〜(疲労)
パパこれを探すのに5000ファイルくらい調べちゃったよ
0232デフォルトの名無しさんNGNG
素直にgrep汁
0233デフォルトの名無しさんNGNG
>>227
単なる手前のボケでした。平身低頭、申し訳ありません。
一応顛末を書いておくと、基底クラスや派生クラスが親子構造で混在するような
システムを作っていて、deleteする時はデストラクタで子供を次々deleteしていく
ようにして、一変に消せるようにしていたのですが、条件判定に変なものを使って
失敗していたようです。お騒がせしました。

直したら立派に呼んでくれて安心しました。
0234デフォルトの名無しさんNGNG
>>231
locate ios_base で一発じゃないのか?
0235234NGNG
まちがえた…
locate '*/ios'
とでもしてくれ。
0236デフォルトの名無しさんNGNG
>>230
どうもです。しかし・・・英語がむずい・・・;
なんか無理そうだ・・・とりあえず落としてみます。
0237229NGNG
すいません、236は僕です。あと下げ忘れました。スマソ!!
0238デフォルトの名無しさんNGNG
libjpegなら日本語解説も沢山ある
0239 NGNG
クラスのメンバ関数の引数の配列の数に変数を使いたいのですが
できますか?
むりなら代わりとなる方法を教えてください
0240デフォルトの名無しさんNGNG
配列の数って要素数?
0241デフォルトの名無しさんNGNG
>>239
void A::foo(int array[], int count)
{
for (int i = 0; i < count; i++) cout << array[i];
}
で何か不満でも?
0242デフォルトの名無しさんNGNG
void A::foo(int arr[N])
の N を変数にしたいってことなのかな。飛躍し過ぎ?
0243デフォルトの名無しさんNGNG
>>239
vector
0244デフォルトの名無しさんNGNG
>>241>>239 微妙にスレ違い
void A::foo(vector<int> ints)
{
for (vector<int>::iterator i = ints.begin(); i != ints.end(); ++i) {
hanatanhalahala(i);
}
}
0245デフォルトの名無しさんNGNG
template<size_t N> void f(int arr[N]);

char a[256];
f(a);
0246デフォルトの名無しさんNGNG
>>245
動的なサイズ変更に対応できないのでアウト
0247デフォルトの名無しさんNGNG
引数だと一次元目の[]の中身って意味なさないような。
0248デフォルトの名無しさんNGNG
ようは、239の質問が微妙ということでいいですか?
0249デフォルトの名無しさんNGNG
>>246
配列は動的ではない
0250デフォルトの名無しさんNGNG
>>248 いいです
0251デフォルトの名無しさんNGNG
>>244
スレ違いを指摘するんなら、もっとスレ違いらしさを出したコードにしとけよ。
void A::foo(vector<int>& ints)
{
  for_each(ints.begin(),ints.end(),hanatanhalahala);
}
0252デフォルトの名無しさんNGNG
正直、>>239の態度にむかついた。
0253デフォルトの名無しさんNGNG
超イイ!!
0254デフォルトの名無しさんNGNG
>>245
へぇ〜。面白いね。配列渡しは通らないけども
#include<iostream>

template < int N >
void f(char (&arr)[N]) {
for(int i=0;i<N;i++) std::cout << arr[i] << "\n" ; } ;

int main() {
char s[] = "2channel" ;
f(s) ; }
0255デフォルトの名無しさんNGNG
テンプレート引数をそこまで自動で判断してくれるんだから、
次期C++には型推論が導入されたりしてな。
0256デフォルトの名無しさんNGNG
型推論・・・凄い時代になったものだ
まあ技術は進歩し続けているわけだけど。
0257デフォルトの名無しさんNGNG
おお、すげえ。
0258デフォルトの名無しさんNGNG
これ以上コムパイラが対応しきれるかどうか・・・。
0259デフォルトの名無しさんNGNG
おおーできたー。
0260デフォルトの名無しさんNGNG
http://pc.2ch.net/test/read.cgi/tech/1008593126/741
0261デフォルトの名無しさんNGNG
ポインタに対応できないから実用上無意味だけども
0262デフォルトの名無しさんNGNG
情けないことにどういう理屈なのかわからない。
0263デフォルトの名無しさんNGNG
void f( const char *p )
{
  std::cout << "pointer" << std::endl;
}
template< unsigned N >
void f( const char (&x)[N] )
{
  std::cout << "template array " << N << std::endl;
}
int main()
{
  const char x[] = "array?";
  f( x );
  f( &x[0] );
  return 0;
}

・・・template バージョンが呼ばれないです。(cygwin g++)
なんで?
0264デフォルトの名無しさんNGNG
template版よりも、通常のfの方が呼び出しのマッチングに関して優先順位が
高いからじゃないの?
0265デフォルトの名無しさんNGNG
>>263
こうやったら「曖昧」と叱られたよ。

template <unsigned N>
void f(const char (&x)[N])
{
std::cout << "template array " << N << std::endl;
}

template <>
void f(const char *p)
{
std::cout << "pointer" << std::endl;
}

int main()
{
const char x[] = "array?";
f(x);
f(&x[0]);
return 0;
}
0266 NGNG
面白いな、コレを多次元配列でやるとどうなるんだろう
0267263NGNG
template< typename T >
void f( T *p )
{
  std::cout << "pointer" << std::endl;
}
template< typename T , unsigned N >
void f( T (&x)[N] )
{
  std::cout << "template array " << N << std::endl;
}

・・・こっちにしてもだめですた。
実行確認せずにこれの結果って予想できるもん?
や、決まってるんだろうけどさ。
0268デフォルトの名無しさんNGNG
Modern C++ Design買ったんだけど、俺の乏しい理解力では到底内容が
わからなかったので、もう少し易しいtemplateテクニックを満載した本を
誰か出版して欲しい。
0269デフォルトの名無しさんNGNG
>>268
そーゆー路線だと、結城さんあたりかねぇ。
0270デフォルトの名無しさんNGNG
どうもchar x[] = "array?";のxが参照としてはchar[]だけども
式の評価ではchar*になってこちらが優先されるようだ。
ためしにf(&x)とすれば配列バージョンが呼ばれる
0271デフォルトの名無しさんNGNG
>>269
C Magazineに寄稿している人だよね?ホームページを見てみたんだが、
C++関連の内容はまだうpしてないようだ。
0272デフォルトの名無しさんNGNG
>>270
本当だね。この実行結果は実に興味深い。

template <unsigned N>
void f(const char (&x)[N])
{
std::cout << "template array " << N << std::endl;
}

template <>
void f(const char *p)
{
std::cout << "pointer" << std::endl;
}

int main()
{
const char x[] = "array?";
f(&x);
f(&x[0]);
return 0;
}
0273デフォルトの名無しさんNGNG
データベースをクライアントから操作するためのプログラムって
ほとんどVBとかで十分なんですかぁ?VCってあまり
使われてないような、
0274デフォルトの名無しさんNGNG
>>273
プログラム側に何を期待するかによる。

スタンドアロンの VB 出すまでもなく Access VBA や Web がらみだと VBScript で
間に合うことも多いし、逆に VC でなければやっとれん、という事もある。
0275274NGNG
ただし、JAVAはつねにやっとれん。
0276デフォルトの名無しさんNGNG
>>273
うちの会社の基幹業務はAccessのVBAでやっとるよ。
最初のうちはスイスイ動いていたが、最近データの量が肥大して、
検索にだんだんと時間がかかるようになってきた。この先不安。
0277247NGNG
>>275
騙られた……。

確かに JDBC 1.0 の頃はかなり「やっとれん」感が強かったが、最近は
触ってないので知りません。
0278278NGNG
アルファベットが1文字以上連続しているものを単語と
  呼ぶことにする。コマンドライン指定されたC++のソース
  ファイルを読み込みながら、単語ごとにその出現回数を
  カウントしておく。すべての単語が読み込み終わったら、
  まずアルファベット順に単語とその出現回数を表示し、
  その後、出現回数の多い順に単語を表示するようなプロ
  グラムを作成せよ。
   ただし、単語にはアルファベットの大文字や小文字が
  混じっていてもよいものとし、その場合大文字小文字の
  区別なく、アルファベット順になるようにせよ。
   また、ソートする部分については、この問題に合うソ
  ート用の関数を独立させて作ること。ソートの方法は何
  でもよいものとする。
-----<
わかります?
0279デフォルトの名無しさんNGNG
>>278
宿題スレ逝け
0280デフォルトの名無しさんNGNG
>>278
わかります。
0281デフォルトの名無しさんNGNG
C++スレなんかで聞いたら10人中11人ぐらいソートせずに終わらせると思うが(藁
0282デフォルトの名無しさんNGNG
map使わない方が面倒だな。
0283デフォルトの名無しさんNGNG
おいお前等。
スタンダードアイオーでもイオストリームでもいいんだが、リファレンスっちゅうのはどこにあるんですか?
0284デフォルトの名無しさんNGNG
禿しく>>281の言う通り。

オレモマダマダダダシノウ...(-_-)
0285デフォルトの名無しさんNGNG
>>283
FILE*&
std::iostream&
0286よっし〜NGNG
C++の派生クラスの実装を、C言語だけで記述する事は可能でしょうか?

3DSMAXのプラグインSDKの仕様が、コンパイラのバージョンを指定しているけど、
そのバージョンを持っていないので、C言語でクラスのレイアウトに何とか整合してやって、
リンク可能な状態に持っていけないかなぁって・・・
0287デフォルトの名無しさんNGNG
コンストラクタとデストラクタがなくていいなら何とか。
0288よっし〜NGNG
> コンストラクタとデストラクタ
えっ? コンストラクタとデストラクタ駄目ですか?
基底クラスのデストラクタがvirtual宣言されてマス。
0289デフォルトの名無しさんNGNG
基底クラスの物は呼ばれるけど、
派生(自作)クラスのデストラクタは呼ばれない。
それから、思いっきり実装依存になるよ。
CでCOMクラスを実装するのと同じ方法でやる。
0290デフォルトの名無しさんNGNG
ああわかってる
・・・・
わかってるってば!
0291デフォルトの名無しさんNGNG
  人
(...・.・.) ?
0292デフォルトの名無しさんNGNG
C言語で仮想関数?(((( ;゚Д゚))))ガクガクブルブル
0293デフォルトの名無しさんNGNG
  人
(...・.・.) ?
0294デフォルトの名無しさんNGNG
>>286
バージョン指定があるってことは、クラス名の mangling があってないと
ダメってことではないの?
0295よっし〜NGNG
> それから、思いっきり実装依存になるよ。
それは致し方無い事です。そもそも「3DSMAXのプラグイン」という事自体が実装依存なので。

> 派生(自作)クラスのデストラクタは呼ばれない。
これが問題だなー。でもなんで呼ばれないんだろう?
実装依存で、むちゃくちゃやって、何でも出来そうな気がするのだけど・・・
デストラクタが呼ばれるしくみが良く解ってないカモ

> クラス名の mangling があってないと
これも実装依存で、何とか実現できないものでしょうか?

ふむー。そもそもVCって、CとC++を区別しちゃってて、CからC++のクラスにアクセスするのって無理なのかなぁ?
0296 NGNG
Modern C++ Designの表紙に載ってるようなナイフがホスィ。
0297デフォルトの名無しさんNGNG
Modern C++ Designを持っていないやしはC++プログラマにあらず
0298デフォルトの名無しさんNGNG
     A
    (゚o゚)<持ってなくて悪かったなハゲー
    (ー)ー
     ))
0299デフォルトの名無しさんNGNG
2次元配列を動的に確保したいのですが
class A{
public:
BYTE x;
BYTE y;
BYTE p
};

A** a;
void Load(int x,int y){
a=new A*[x];
for(int i=0;i<x;i++){
→a[i]=new A[y];
}

}

int main(){
Load(100,100);
}

こうやると強制終了ダイアログが出て、落ちます。
VC++のエラーメッセージは
0xC0000005: Access Violation。で、
デバッガでは→の部分に印がつきます。
どこが悪いのでしょうか。
0300デフォルトの名無しさんNGNG
BYTE p;
0301あきらNGNG
VC++できるひといます?
0302デフォルトの名無しさんNGNG
>300
すみません。うつし間違えました。仰せのとおり;がpの後ろに必要です。
0303あきらNGNG
VC++できるひといます?
0304ゆたかNGNG
数値の加算、減算、乗算、割算のできるwindowsプログラム作りたいのですが、
まったくわかりません。誰か作っていただけませんか?
0305デフォルトの名無しさんNGNG
んで、その二次元配列にはstd::vectorを使えない理由はあるのか?
0306デフォルトの名無しさんNGNG
>305
はい、vectorを使っても落ちました。
ちなみにそのときのコードは
vector <vector <MapData> > a;
void Load(int x,int y){
a.assign(x);
for(int i=0;i<x;i++){
→a[i].assign(y);

}
}
これがまた→のところで落ちました。
0307デフォルトの名無しさんNGNG
実は>>299ではAのコンストラクタを省略してて
コンストラクタでの処理がおかしいと予想。
0308デフォルトの名無しさんNGNG
実は16bitのDOSアプリ、とかいう罠、はナイよな……
0309デフォルトの名無しさんNGNG
……
assignでなにがしたかったんだ?
0310デフォルトの名無しさんNGNG
>309
すみません。resizeでした。
vector <vector <MapData> > a;
void Load(int x,int y){
→a.resize(x);
for(int i=0;i<x;i++){
a[i].resize(y);

}
}

しかしこうすると今度は上のほうで落ちました。
0311デフォルトの名無しさんNGNG
>307
コンストラクタは
A(){
x=0;
y=0;
p=0;
}
となっています。
0312デフォルトの名無しさんNGNG
class A{
public:
& nbsp;BYTE x;
  BYTE y;
  BYTE p;
};

vector< vector<A> > a;

void Load(int x, int y)
{
 a.resize(x);
  for(vector< vector<A> >::iterator i = a.begin(); i != a.end(); ++i)
  {
    i->resize(y);
  }
}

int main()
{
  Load(100, 100);
  a[99][99].x = 0xff;
  printf("0x%X\n", a[99][99].x);
}

どこで落ちるんだ?
0313デフォルトの名無しさんNGNG
>312
今いろいろやっていて気づきました。
a.resize(10)
だったら大丈夫なのですが
a.resize(100)だと落ちます。
メモリは192MB積んでいるのでメモリが足りないはずはないのですが・・・
タスクマネージャで調べても利用可能領域は40000KBありました。
0314デフォルトの名無しさんNGNG
sageてしまいますた
0315デフォルトの名無しさんNGNG
サイズが大きすぎ(2G以上とか)でnewがNULLを返してる?
0316デフォルトの名無しさんNGNG
sizeof(A)とxとyは幾つなんだろう
0317デフォルトの名無しさんNGNG
int dd=sizeof(A);
3でした。
0318デフォルトの名無しさんNGNG
うむ。VCのnewは例外を投げないので、返値がNULLかどうかチェック
した方がよい。
0319デフォルトの名無しさんNGNG
>>299(のp;を修正したもの)でも、落ちる要素は全くない
aという変数が別ファイルなりで別の型として宣言されてたりしないかな
0320デフォルトの名無しさんNGNG
或いはメンバ変数と仮引数とグローバル(static)変数か(xとyも両方で使われてるし)
0321デフォルトの名無しさんNGNG
//ヘッダ
class MapData{
public:
BYTE x;
BYTE y;
BYTE p;
MapData(){
x=0;
y=0;
p=0;
}
}

class MapManager{
vector< vector<MapData> > data;
int Width;
int Height;
public :
BOOL Load(char* MapName);
}
ヘッダ//
0322デフォルトの名無しさんNGNG

//cpp
BOOL MapManager::Load(char* filename){

int fh=_open(MapName,_O_RDONLY);

int StrLen;
char buf[256];
_read(fh,&StrLen,sizeof(StrLen));
_read(fh,buf,StrLen);
_read(fh,&Width,sizeof(int));
_read(fh,&Height,sizeof(int));

data.resize(Width);

for(vector< vector<MapData> >::iterator i = data.begin(); i != data.end(); ++i)
{
i->resize(Height);
}
for(int s=0;s<Width;s++)
{
for(int j=0;j<Height;j++)
{
_read(fh,&data[s][j].p,1);
_read(fh,&data[s][j].x,1);
_read(fh,&data[s][j].y,1);
}
}
_close(fh);
return TRUE;
}
cpp//

MapManager* mm=new MapManager();
int WinMain(----){
//
mm->Load("test");
//
return 0;
}
詳細です。クラスだと何か違いますか?
0323デフォルトの名無しさんNGNG
int fh=_open(filename,_O_RDONLY); でした。すみません。
0324デフォルトの名無しさんNGNG
すいません。
クラスの便利さがわかりません。
どなたか噛み砕いて教えてください
0325デフォルトの名無しさんNGNG
>>324
・メンバを非公開にできる。
・メンバ関数を持てる。
・継承が使える。
・仮想関数を使ってポリモーフィズムが実現できる。

などなど。
0326デフォルトの名無しさんNGNG
まずは使うべし。使って体感しる!
0327324NGNG
だめぽ。
なんか構造体と違いがあまりわかりませぬ(´・ω・`)
0328デフォルトの名無しさんNGNG
手始めに憂鬱本を読んでみよう>>324
0329デフォルトの名無しさんNGNG
>>327
>>326サソも言っておられるが、こればかりは口で説明してもなかなか
わかってもらえますまい。

簡単なクラスとそれを使ったサンプルをいくつか作ってみれば自然に
理解できるよ。
0330324NGNG
ん〜
今の仕事で、作ってます。
クラスだけえんえんと…
実際業務でクラスなんか作っても
使う部分の作業に当たらせてもらえません。
そこで、こんな仕様のプログラムでここを
クラスにするとクラスのありがたみがわかる!!
なんて、仕様書どなたかもっていませんか?
皆様レスアリガトウございます
0331デフォルトの名無しさんNGNG
stlを使えばありがたみが分かる
0332デフォルトの名無しさんNGNG
がんがれ
0333デフォルトの名無しさんNGNG
>>330
すごく「例えば」の話になるけど、リスト構造を扱う時、ポインタの付け替えを
すべてメンバ関数に任せればよいようになる。

あまりキチキチに非公開にしてしまうと効率が落ちることがあるが、バグは
どんどん出にくくなる。
0334デフォルトの名無しさんNGNG
>>321
関係ないかもしれないがMapDataにコピーコンストラクタを自分で作っても同じ?
vectorはresizeとかのときコピーコンストラクタよんでるとおもうけど。
0335324NGNG
なるふぉど…
確かにクラスの中だったらメモリは消えないですからね。
ポインタを頭に入れてみると確かに便利かもしれませんね。。。
0336デフォルトの名無しさんNGNG
>>335
んー、そうですね、クラスの中だからメモリが消えないというより、
リスト構造の細かいちまちまとした部分まで見ずに済むようになり、
プログラムの設計に専念できるようになると言ったらいいかな?

その代わり今までみたいに構造体のポインタを持って関数を
コールして操作するということはしなくなる(やろうと思えばいくら
でもできるが敢えてしない)ので、カナーリ感覚が違うんですよ。
0337デフォルトの名無しさんNGNG
std::stringや、CStringなどの文字列クラスを使ってみれ。
連結や比較なんかは演算子で出来るし、バッファのことは何も考えなくても
よきにはからってくれる。
0338デフォルトの名無しさんNGNG
>>321
Width と Height に値を、resize に渡す前に確認してみたらどうか?
0339デフォルトの名無しさんNGNG
#include <new.h>
#include <new>

int new_nh(size_t)
{
 throw std::bad_alloc();
 return 0;
}
_set_new_handler(new_nh);

これをプログラムエントリで実行して、例外を投げるようにしてみな。
vector<>内でメモリが確保できないと、通常はリカバリできないけど
例外を投げるとどうなっているかが分かる。
0340デフォルトの名無しさんNGNG
HRESULT __stdcall
_com_dispatch_raw_propget(IDispatch*, DISPID, VARTYPE, void*) throw();

このように関数のプロトタイプ宣言に throw() と書いてあるものがありますが
これはどういう効果があるのですか?
この関数が呼ばれた瞬間に例外をスローするのですか?
0341デフォルトの名無しさんNGNG
>>340
逆です。この関数は例外を投げないという意味です。
0342デフォルトの名無しさんNGNG
>>339
#include <new.h>
#include <new>

int new_nh(size_t)
{
 throw std::bad_alloc();
 return 0;
}


WinMain(){

_set_new_handler(new_nh);
mm->Load(....);
}
BOOL Load(....){
//
try{
→data.resize(Width);
}catch(std::bad_alloc e){

}
//
}
こうやってみたのですが、→でハンドルされていない例外といわれます。
catch(...)だと大丈夫なのですが。デバッガは__sbh_alloc_block(int)というコンテキストで止まっています。
0343デフォルトの名無しさんNGNG
age
0344デフォルトの名無しさんNGNG
VB/BasicのGoSubに代わるCの命令ってなんかある?
0345デフォルトの名無しさんNGNG
>344
関数を呼ぶだけじゃないの?
0346344NGNG
>>345
関数呼びたくないの。
その関数内でしか持ってない、必要な変数多いし。
0347デフォルトの名無しさんNGNG
>346
DQNですか?
0348デフォルトの名無しさんNGNG
必要な処理をマクロ化するとか?(実質上コピペと変わらんが)
0349344NGNG
んー、やっぱ普通の方法無いのね。

>>348
今やってるのがそれ。

>>347
秒間何万回も使うからオーバーヘッドが
大きいってのもあるんよ。
0350デフォルトの名無しさんNGNG
>>342
catch(std::bad_alloc&)で捕まえてみて。
0351デフォルトの名無しさんNGNG
>>349
インラインアセンブラで入り口と出口を作って、その間にサブルーチンを書く。
0352デフォルトの名無しさんNGNG
>>349
必要な変数はクラスにまとめておいて、
引数を少なくしたメソッド呼び出しにするのがC++流。

つか、gotoか。
0353344NGNG
レスありがとう。
とりあえず351の方法使うです。
(俺も無作法だとは思うんだけど。)

あともう一つだけ。
デバッグウィンドウに数字を表示したい時ってどうしてるの?
0354デフォルトの名無しさんNGNG
混じれ酢してみるか。
関数呼び出しはVBのGoSubより何倍も早いから気にするな。
どうしても気になるならインライン関数にするなりご自由に。

>秒間何万回も使うからオーバーヘッドが大きいってのもあるんよ。
なんかムカつく言い方だな。
そんなに速度が気になるんじゃアセンブラで最適化しろ
0355デフォルトの名無しさんNGNG
デバッグウインドウってなんだよ
C++にそんなもんねーぞ
0356デフォルトの名無しさんNGNG
>>344
BCB厨のDQNに認定
0357356NGNG
補足
BCB厨だからDQNなんじゃないぞ、
そんなことDQNだと言うんだ
0358デフォルトの名無しさんNGNG
なしてBCB?
0359デフォルトの名無しさんNGNG
>>347
でしょう。

要件があるなら、それを列挙した上で質問すべき。無条件で質問しておいて、
出てきた方法に対して煽りを返すのは、

 細かいことは書かなくても、
  みんな超能力者だから、
   俺のことは分かってるはずだ

という思い込みがあるから。

>>349
場合によっては inline 関数が使えるかもな。ただし、ゲーム作ろうとしてる
ならムダだぞ。
0360デフォルトの名無しさんNGNG
> 出てきた方法に対して煽りを返すのは

これどこ?
0361デフォルトの名無しさんNGNG
>350
またハンドルされていない例外になってしまいました。
ためしにvector < vector<double> > data2;
data2.resize(100)でやってみても、やはり同じように落ちました。
0362デフォルトの名無しさんNGNG
>>360
349
0363デフォルトの名無しさんNGNG
>>360
>>346
煽り返してるとまでは思わないが
0364デフォルトの名無しさんNGNG
>350
いま、Releaseでビルドすると落ちませんでした。Debugだと落ちます。なぜでしょう?
0365デフォルトの名無しさんNGNG
>>354
一応、俺も馬路レス。
関数呼び出し自体より、変数を引き渡す方を考慮しているものと思われ
10個とか引数あったらさすがに差が出る。
0366デフォルトの名無しさんNGNG
関数内の多数のローカル変数をサブルーチンでも使いたい。
サブルーチンは呼ばれる回数が多いので変数を一個一個渡すのはイヤ。

と彼は質問すればよかったのかな?
こういう場合はやっぱ>>352か強引に>>351のようにするのかな。
0367デフォルトの名無しさんNGNG
>>364
下のソースで落ちる?

#include <vector>
#include <iostream>

main()
{
 std::vector< std::vector<double> > data;
 data.resize(100);
}
0368デフォルトの名無しさんNGNG
iostreamは余計だ。
0369デフォルトの名無しさんNGNG
構造体をポインタで渡すのは駄目?
0370デフォルトの名無しさんNGNG
>>369
むしろ推奨。
0371デフォルトの名無しさんNGNG
多数のローカル変数ってのにいちいち
構造体名が付くのがうざいけど仕方ないか。
0372344NGNG
いや、煽るつもりはなかったんだけど、
gotoがあるならgosubもあるかな、と思ってたから。

なんか荒らしたみたいでスマソ。
0373デフォルトの名無しさんNGNG
>>369
ダメ。const参照で渡せ
0374デフォルトの名無しさんNGNG
>367
それだけのソースなら落ちません。
0375デフォルトの名無しさんNGNG
>>374
ソース全部上げられるか?
たぶん余所でメモリ壊してるんだと思う
0376デフォルトの名無しさんNGNG
VCでDEBUG_NEWが定義されてるとか
0377デフォルトの名無しさんNGNG
STLport使ってて、_STLP_DEBUGが定義されてないとか。
前にこれで関係のないところのメモリ壊されてハマった記憶あり。
0378デフォルトの名無しさんNGNG
>377
定義してみたら落ちませんでした。これは、なぜですか?
0379377NGNG
>>378
デバッグ版とリリース版でnew/deleteが違うから。
リリース版のnewで確保したメモリをデバッグ版deleteで削除したりするとヒープが破壊される。
0380デフォルトの名無しさんNGNG
>379
なるほど。おかげで助かりました。どうもありがとうございました。
0381デフォルトの名無しさんNGNG
>>372
別に荒らしだとは思わなかったけど、
見事に定番通りのDQNぶりが見ていて微笑ましかった。
いつか「あのときあんな恥ずかしい書き込みしちゃった…」って思えるくらいに
スキルが上がるといいね。
0382デフォルトの名無しさんNGNG
ヤナヤシ
0383デフォルトの名無しさんNGNG
boost1.28をvc6-stlportでインストールしたんですけど
regexのビルドって
bjam〜"-sTOOLS=msvc-stlport"で作った物と
regexのディレクトリでmakeしたもの、どっちが正しいんでしょうか?
bjamで作った物はbin-stageディレクトリに
boost_regex(_debug).dll/lib
があり、
makeしたものは
 *mss(d) SingleThread-static(debug)?
 *mdi(d) MultiThread-dynamic(debug)?
 *mds(d) MultiThread-static(debug)?
までは分かるのですが、mdidd/mssdd/mdsddが分からないです。
どれを使うのが正しいんでしょうか?
0384デフォルトの名無しさんNGNG
VC++だと、ヘッダの#pragmaで勝手にリンクするほうを使えばいいと思うが。
0385デフォルトの名無しさんNGNG
>>384
レスどうもです。#pragmaでリンクされるのは後者なので、
bjamで生成した物は不要だから破棄しても良いということですか?
0386_NGNG
Javaのインターフェースみたいに多重継承を使おうと思ったのですが

class IA { public: virtual void Func1()=0; };
class IB { public: virtual void Func2()=0; };

class C : public IA, public IB {
  public: void Func1() { puts("C::Func1()"); }
  public: void Func2() { puts("C::Func2()"); }
};

void* obj = new C;
IA* a = obj; a->Func1();
IB* b = obj; b->Func2();
でどっちもFunc1()が呼ばれて困ってます。void*をC*にしたらちゃんと動きました。
IA*にC*として代入する時は何か特別なことやってるんですか?
0387デフォルトの名無しさんNGNG
たぶん、void*に入れたときに、大事な情報が死んだ。
CはIAやIBをインプリメントしているので、ちゃんとポインタで
受けられる。
0388デフォルトの名無しさんNGNG
>>386
void*から直接キャストした物だと
class D : public IB{};と区別が出来ないからしょうがない。
0389_NGNG
なる。VMTのオフセットがどうたらこたらって話かな?
でも、多重継承って思ったより強力ですね。ちょっとC++見直しまひた。
(って強力すぎるから問題がでるのか・・・)
0390デフォルトの名無しさんNGNG
>>385
気になるならとっとけば?
0391デフォルトの名無しさんNGNG
なんか作ってみた、ちょとダサいけど

#include "stdio.h"

#define ImplementSetOperations( Type )\
private:\
Type( unsigned int value ): value( value ){};\
public:\
Type(void) : value( 0 ){}\
Type( Type const& f ): value( f.value ){}\
Type& operator=( Type const& f ){ value = f.value; return *this; }\
Type& operator|=( Type const& f ){ value |= f.value; return *this; }\
Type& operator&=( Type const& f ){ value &= f.value; return *this; }\
Type operator|( const Type& f ) const{ return Type( value|f.value ); }\
Type operator&( Type const& f ) const{ return Type( value&f.value ); }\
bool operator==( Type const& f ) const{ return value==f.value; }\
bool operator!=( Type const& f ) const{ return value!=f.value; }\
bool operator<=( Type const& f ) const{ return (value&f.value)==value; }\
bool operator>=(Type const& f ) const{ return (value&f.value)==f.value; }\
bool operator<( Type const&f ) const{ return (value&f.value)==value && value!=f.value; }\
bool operator>( Type const&f ) const{ return (value&f.value)==f.value && value!=f.value; }\
class BooleanType;\
operator BooleanType*(void) const{ return value==0 ? NULL : reinterpret_cast< BooleanType* >( const_cast< Type* >( this ) ); }\
private:\
unsigned int value;\
public:

struct FontStyle
{
ImplementSetOperations( FontStyle );
static FontStyle const Normal, Italic, Bold, Underline;
};

FontStyle const FontStyle::Normal( 0 ),
FontStyle::Italic( 1 ), FontStyle::Bold( 2 ), FontStyle::Underline( 4 );

int main()
{
FontStyle style; // Empty
if ( style==FontStyle::Normal ) puts( "style is Normal" );
style |= FontStyle::Bold | FontStyle::Italic;
if ( style>=FontStyle::Italic ) puts( "style contains Italic" );
if ( !(style>=FontStyle::Underline) ) puts( "style doesn't contain Underline" );
if ( style&FontStyle::Bold ) puts( "style contains Bold" );
}
0392デフォルトの名無しさんNGNG
>>3の過去ログにPart 2がなかったので探しました。
http://pc.2ch.net/tech/kako/996/996640937.html
0393デフォルトの名無しさんNGNG
>>392
Good Job!!
0394デフォルトの名無しさんNGNG
Dev-C++ beta4.1キタ━━━━━━(゚∀゚)━━━━━━ !!
http://www.bloodshed.net/dev/devcpp.html
0395 NGNG
#include <iostream.h>

void main(void)
{
static char *b[]={"Akira", "Mitsuo", "Chiaki"};
b[1][1]='d';
*(*(b+1)+1)='g';
cout << b[1][1]<<endl;
}

これをコンパイルすると

〜〜の命令が〜〜を参照しましたが、メモリが"written"になることはできませんでした。

ってエラーが出るのですがなぜでしょう?
0396デフォルトの名無しさんNGNG
"strings"[1] = 'T';
とやるのと同じ問題では。
0397 NGNG
え??どういうことですか?
型が違うということですか???
0398デフォルトの名無しさんNGNG
プログラミング言語Cに於て(C++も亦)、
「文字列リテラルの値を変更している場合、その動作は未定義」
であることが規定されてゐます。
0399デフォルトの名無しさんNGNG
初心者な質問ですみません。
スタティックライブラリを作っているんですが、
これのヘッダとLIBファイルのみでインライン展開をさせることは出来るんでしょうか?
やっぱりソースもないと駄目ですか?
0400デフォルトの名無しさんNGNG
基本的に、ある関数をインライン展開するには、
.hファイルに実装を書く、ということになります。
libファイルは基本的に全く関係有りません。

答えは「これのヘッダ」が何を意味するかによりますが
その後の「ソースもないと」をみると、"駄目です"と
いうのが正解でしょう。
0401デフォルトの名無しさんNGNG
>>400
そうですか。
わかりました、ありがとうございました。
0402 NGNG
>>398

なるほど、、、そうでしたかよくわかりませんが調べてみます
ありがとうございました
0403デフォルトの名無しさんNGNG
>402
つまり
char*p="ABC";みたいなのはプログラマがいじっちゃいけない
ところに文字列"ABC"が用意されてそのアドレスがpにセットされるので
参照する分には良いの。でも書き換えるとダメなの。
書き換えたいなら変数として領域を確保する必要があるの。
つまり
char str[10]="ABC";みたいな。
あるいは
char str[10];
strcpy(str, "ABC");
とか
0404デフォルトの名無しさんNGNG
なぜリテラル文字列はconst指定されてないのか激しく疑問
未定義にするくらいなら禁止しちゃえばいいのに
0405デフォルトの名無しさんNGNG
C++ではconstだぞ
0406デフォルトの名無しさんNGNG
コンストラクタの初期化リストでthisポインタを使うのは悪なのでしょうか?
0407デフォルトの名無しさんNGNG
>>406
って言うかアクセスできないメンバあるのか?
0408デフォルトの名無しさんNGNG
>>407
たとえばコンストラクタで所有者のアドレスを受け取るメンバがあったとして
ClassName() : member( this ){}
とかやると怒られる
漏れもなんでなのかよく分からん・・・
0409デフォルトの名無しさんNGNG
class Class {
 Class *member;
public:
 Class(): member(this) {}
};
問題ないけど
0410 NGNG
>>403
ご親切にどうもありがとうございます
つまりポインタの宣言だけでは配列を確保していないってことですね


0411デフォルトの名無しさんNGNG
>つまりポインタの宣言だけでは配列を確保していない

違う。「リテラル」ってのが何なのか理解しなさい。
0412デフォルトの名無しさんNGNG
>>406-409
VC++では出るけど、この警告はM$の言語拡張らしい?
言語拡張をオフにすると出なくなる(この警告の警告レベルが下がる)

thisの中身が初期化されてないからとりあえず警告出しとくよって感じかと
thisの値(アドレス)自体は別段問題無いと思われ
0413デフォルトの名無しさんNGNG
>411
言葉のあやじゃないかな・・>配列を確保していない
char *p="ABC";
char str[]="ABC";
の差に気が付けばいいのでは?
0414デフォルトの名無しさんNGNG
>413
元々は>>395、つまり文字列リテラルを書き換えようとしてのエラーで、>410はその理由をわかってないってこと
0415 NGNG
>>411
>>413
ということはリテラルだから変数として確保してないから書き込めない
ってことですね?
0416 NGNG
>>414
リテラルの意味さっき調べて知ったもので、、、
0417デフォルトの名無しさんNGNG
まあ、そういうこと。で、
char *array[] = { "abc", "def", "ghi" };
は、「ポインタの配列」で、array[0], array[1], array[2]それぞれの示す先が
文字列リテラルだから、(constを付けなくても)書き換えようとした時の動作は未定義。
char array[][4] = { "abc", "def", "ghi" };
の場合は、「配列の配列(2次元配列)」で、array[0], array[1], array[2]は配列(の先頭要素のアドレス)だから、
中身を書き換えても大丈夫。
0418 NGNG
>>417
どうもありがとうございます
わかりました
0419デフォルトの名無しさんNGNG
自分まだ林氏のスーパービギナー編を一通りやっただけのペーペー初心者です。
今、エディットボックス3つと四則演算ボタンを配置しただけの簡単な電卓を作ろうとしていて、
�@ed1と2に値を入力
�A「+」とか「-」とかを押す
�Bed3に答え(浮動小数点型)が表示
という風にしたいのですが、
出だしはCString ssでは駄目なのかとか、
またm_ed1を1項、2を2項と定義付けるにはどう記述するのかからして分りません。
ヘルプや言語リファレンス本で調べてもいまいち・・(あまりに初歩だから載ってない?)。
学校の一室にしかソフトが入ってないので(自前で買うには高い)直接いじれる日時が限られてるし・・どなたか教えて頂けないでしょうか。
0420デフォルトの名無しさんNGNG
>419
それはVC++かな?
0421デフォルトの名無しさんNGNG
>419
>>4
0422デフォルトの名無しさんNGNG
C++のデベロッパーってすごいな
0423デフォルトの名無しさんNGNG
おお、素早いレスありがとうございます。
>420 はい、VC++の6.0です。
>421 さっき一通り読んだけどやっぱりわかりません(汗
でもある程度まではテンプレートが用意されてるのを知ったのは収穫でした。
明日は半日使えるけど、ヘルプでtemplateから検索していけば辿り着けるだろうか。
0424419NGNG
すいません、423は私です(名前変え忘れた)
0425デフォルトの名無しさんNGNG
VC++のみの話題は専用スレに行けっての
0426デフォルトの名無しさんNGNG
>423
テンプレートなんか使わなくてもできるよ。
ま、専用スレで聞いてくれ。
0427419NGNG
あちゃ、VC++とC++が別物だって知らんかった。お邪魔しました・・・
0428デフォルトの名無しさんNGNG
お前ら様方は<iostream.h>,<iostream>の違いと仮想関数の目的は明確にわかっていますか?
0429デフォルトの名無しさんNGNG
当然
0430デフォルトの名無しさんNGNG
当然わかっていません
0431デフォルトの名無しさんNGNG
俺様ごときがわかるわけありません。
0432428NGNG
>>429 恐れ入りますm(_ _)m
>>430 盛れと一緒に勉強しませう!
0433デフォルトの名無しさんNGNG
<iostream.h>なんてイラネーヨ
0434デフォルトの名無しさんNGNG
<iostream.h>って、中身が古いケースも、
stdで囲ってないだけで<iostream>とおんなじなケースと、
両方あるんじゃない?環境によって
0435デフォルトの名無しさんNGNG
iostream.hなど(仕様には)無い。
ただしCライブラリについて、
The ".h" headers dump all their names into the global namespace,
と決まっていることや、古い(namespaceをサポートしない)C++との
互換性から、c++ライブラリについてもそのようにする処理系がある。
0436デフォルトの名無しさんNGNG
例外初心者なんですが、わからないことがあります。
try{}の中でローカル変数をnewした後でthrowした場合、
そのローカル変数はどうなってしまうのですか?
リークになってしまうのですか?
あと、自分でいろいろ関数っを作ってるんですが、catch{}の中に書くことが無くて
例外が起きたら、レポートを作ってシステムにthrowして強制終了させるぐらいにしか
使えません。これって普通ですか?
皆さんはそんなことはないですか?
0437デフォルトの名無しさんNGNG
>>436
スタックの巻き戻しの際にデストラクタが呼ばれるから、デストラクタ
を正しく定義しておけばリークしないんじゃない?
0438デフォルトの名無しさんNGNG
>>436
>ローカル変数をnewした
意味不明。
0439デフォルトの名無しさんNGNG
>>436
auto_ptr
0440デフォルトの名無しさんNGNG
>>437-439
try{}スコープの中でヒープを確保した場合(LPDWORD a = new DWORDとか)です。
chach{}はスコープが違うので解放出来ません。
マニュアルにはスタックフレームを巻き戻してautoオブジェクトを破棄するとしか
書いていません。
>>436の言うようにauto_ptrを使うか、try{}スコープ外で宣言するしかないのですか?
0441デフォルトの名無しさんNGNG
>>436
例外に関しては、Exceptional C++を読むべし。
例外の正しい取り扱いは、君が想像しているよりも、はるかに難しい。

>auto_ptrを使うか、try{}スコープ外で宣言するしかないのですか
そのとおり。auto_ptr使用がお勧め。というか、例外を使い出したら、
「自前でdeleteは書かない」ことを目標にしとかないと失敗するぞ。
0442デフォルトの名無しさんNGNG
template<class T>
struct S {
typedef T U;
};

template<class T>
struct SS : public S<T> {
U a;
};

main(){}
----------------------
をgcc 3.1 でコンパイルすると

test.cc:8: warning: `typename SS<T>::U' is implicitly a typename
test.cc:8: warning: implicit typename is deprecated, please see the documentation for details

というwarningがでます。X::Yという形でないのにimplicitだと
いわれるのがよく分からないんですが、これは正しい動作なんでしょうか?

これがコンパイラの正しい動作だとして、
U => typename SS<T>::U とやる他に回避方法はありませんか?
0443デフォルトの名無しさんNGNG
>>441
> 例外の正しい取り扱いは、君が想像しているよりも、はるかに難しい。

オレも痛感いたしますた。
Exceptional は読んどくべきだけど、読んですぐ身になるほど易しい問題じゃないね・・・
0444デフォルトの名無しさんNGNG
クラスの定義はヘッダに、
メンバ関数の実装はcppに書くのが普通ですか?
0445デフォルトの名無しさんNGNG
>>442
template<typename T>
struct S {
  typedef typename T U;
};
が正解だったと思う。使ったことないんで、記憶に自信がないけど。

>>444
1.君の言う「クラスの定義」は、正しくは「クラスの宣言」。
2.君の言う「メンバ関数の実装」は、正しくは「クラスの定義」。
用語を思いっきり間違えて使っているけど、1をヘッダに、
2をcppファイルに書くのは、普通。それはあってる。
0446デフォルトの名無しさんNGNG
>445
どうもです。
0447デフォルトの名無しさんNGNG
テンプレートに毒されて、ほとんどの実装がヘッダに逝く罠
しかも、それを当たり前とすら思う罠
0448デフォルトの名無しさんNGNG
俺のプロジェクトも.cppより.hの方がずっとサイズがでかいぞ(ワラ
0449436NGNG
>>441
わかりました。そうします。
ありがとうございました。

0450デフォルトの名無しさんNGNG
別にどっちにあったってそんなに変らんと思うが
ヘタレ環境だとコンパイルに時間がかかったり
リンク後のサイズが大きくなったりするのかな?
0451デフォルトの名無しさんNGNG
>>450
何のために #include があるのか、勉強しなおせ。
0452デフォルトの名無しさんNGNG
c++になって.libって全く意味が無くなったよな
0453442NGNG
>>445
parse errorになります。
typename は quialifed name (X::Yのようなの) にしか使えません。
0454デフォルトの名無しさんNGNG
>>448
漏れ同じくらいかも・・・・
0455デフォルトの名無しさんNGNG
>>452
はぁ ?
0456デフォルトの名無しさんNGNG
SSの定義のなかで
typedef typename S<T>::U U;
かなあ
0457デフォルトの名無しさんNGNG
>>452
確かにね。
OBJファイルも生のバイドコードじゃなくて
中間コードみたいなのを生成するようにして、
ヘッダとLIBで、テンプレートやインライン展開が可能になればいいのに。
0458442NGNG
>>456
ありがとうございます。
それは考えたのですが、実際のクラスでは継承が芋ヅル式に
続いています。
これでは全てのクラスに書くことになってしまうので、
避けたいのです。
0459デフォルトの名無しさんNGNG
>>458
取りあえずデザインパターンの本読んで目から鱗を落とすことを推奨。
0460デフォルトの名無しさんNGNG
>>459 関係ない話で恐縮だが、俺はあれを読んで目に鱗がついたよ
0461デフォルトの名無しさんNGNG
>>460
確かに、全面的に同意する気はないけどね。
でも、ああいうやり方もあるんだと。どこかでうまく使えば便利だなと。
中小クラスを継承して後からメソッドを実装するなんて当たり前のことにも名前付いてて少しワラタ。
0462デフォルトの名無しさんNGNG
>>445
クラスの「宣言」と「定義」って、そんなに明確にわかれてましたっけ?
class T { ... };
↑これをどっちで呼ぶかって話しなんだけど。
データフィールドとか、インライン関数の「定義」をしてますよね。
中でどれだけ「定義」されていても、全体では「宣言」って呼ぶんですか?
0463デフォルトの名無しさんNGNG
>>462
定義 class a{}
実装 a::a(){}
宣言 a *ax = new ax;
0464デフォルトの名無しさんNGNG
ファイルにロックをかけたいのですがどんなメソッド、関数がありますか?
flockを使うしかないのでしょうか。
0465デフォルトの名無しさんNGNG
>>464
WebProg板が無駄に詳しいけどね。
後はディレクトリがあるかないかとか。
0466オレ的にはNGNG
>>462
宣言 class a;
I/Fの定義 class a{}
実装の定義 a::a(){} (うまい言葉が見つからん・・・)
0467デフォルトの名無しさんNGNG
>>462
もともと「定義」というのは、コンパイラがそれに出会ったら、
その場でコンパイルされて何らかのオブジェクトコードが生成されるものだ。

それに対して「宣言」というのはあくまでコンパイラに教えるのが目的で、
それ自身はオブジェクトコードが生成されないものだ。

だからたとえ inline とあっても、コンパイラが出会ったその場で
オブジェクトコードが生成されるわけではないので、それは「宣言」。

つまり「関数呼び出しを生成するのではなく、その場でこれを展開してくれ」
という「宣言」なわけだ。

だから「inline 宣言」とはいうけど、「inline 定義」とは言わないよな、フツー。

とはいうものの、「テンプレート」となると話はややこしくなるが...。
0468デフォルトの名無しさんNGNG
>>467
なるほろ・・・日常的な「定義」とは意味が異なるのですね
0469464NGNG
>>465
なるほどー。サンクスです。

ロックかけるときだけfile descriptor取得して
Cの関数使うのはちょっと気持ち悪いなーと思ったので
質問してみました。
0470462NGNG
>>467
ってことは、
class A {};
↑これも宣言?
そんなわけないとおもうんだけどなぁ。
0471デフォルトの名無しさんNGNG
∧ ∧
(*゜ー゜)++
0472デフォルトの名無しさんNGNG
定義も宣言の一種とどこかで読んだような……
0473デフォルトの名無しさんNGNG
K&R では「定義」と「宣言」は明確に区別されてますね。
以下引用。

> "定義"とは変数が実際につくられ、あるいは記憶が割り当てられた
> ところを指すのに対し、"宣言"とは変数の性質は指定されているが
> 記憶割当てはされていないところを指す。
0474デフォルトの名無しさんNGNG
>>3 の C++ Final Draft を見る限り、
>>473 の意味で区別するのが正しいとは思えない。
0475デフォルトの名無しさんNGNG
K&RはCだからね、C++にも通用するとは限らない
0476デフォルトの名無しさんNGNG
473
C++3rd(邦訳版)のP.113にも class A{}; が定義であるように
解説されてますね。
0477デフォルトの名無しさんNGNG
>>445,>>447 はダウト。
ということでよろしいか?
0478477NGNG
まちがえた。
>>445,>>467 はダウト。
ということでよろしいか?
0479デフォルトの名無しさんNGNG
class A;  クラス宣言
class A{}; クラス定義

でいいんだよね?
0480デフォルトの名無しさんNGNG
class A;  クラス前方宣言
class A{}; クラス宣言&定義

じゃねーの。
0481デフォルトの名無しさんNGNG
>>479
クラスの場合、I/Fだけでなくその挙動まで定義して初めて完全な定義な気がするから
class A{};
は(全てインラインでない限り) 不完全な定義 とでも呼ぶべきかと
0482479NGNG
ううむ、なるほど。
0483デフォルトの名無しさんNGNG
定義は宣言の一種っていうのは嘘?
0484デフォルトの名無しさんNGNG
class A;  プロトタイプ宣言
class A{}; クラス宣言

じゃねーの。
0485デフォルトの名無しさんNGNG
一種って言い方はびみょーだなー

定義は宣言も兼ねる
常に成り立つわけじゃないけどさ
0486デフォルトの名無しさんNGNG
プロトタイプなしの関数定義がそうですね。<宣言も兼ねる
0487デフォルトの名無しさんNGNG
VC++の場合(エラーメッセージより)

class A; 宣言
class A{}; 定義
A::A(); 関数定義
0488デフォルトの名無しさんNGNG
すごくくだらない質問で申し訳ないのですが
void Func()
{
char* sBuf=new char[256};
}
deleteしてないので256Byte開放されないわけですが、
スコープ抜けるのでsBufは消えちゃいますよね。
そうなるとこの256Byteはどうなるのでしょうか。
sBuf がないので見えなくなってメモリに
ごみとして残るのでしょうか?
プログラム終了時には消えると思うんですが
実行中はどうなるのかよくわからないんで。。
私以外の人はご存知と思いますので
教えてもらえないでしょうか?
よろしくお願いします。

0489デフォルトの名無しさんNGNG
>>488
覗き穴の亡くなった箱。
ロープが切れた舟。
子供が手を離した風船。
0490デフォルトの名無しさんNGNG
ハァハァ(;´Д`)=○)'3')←>>488
0491デフォルトの名無しさんNGNG
ありがとうございます。
やっぱりそうだったんですね。
胸のつかえが取れました。
0492デフォルトの名無しさんNGNG
一般にメモリリークという
0493デフォルトの名無しさんNGNG
>>442
えー、3.1 だとそんな warning が出るわけ? 俺も同じようなことを
やってるから、ちと鬱だな。明日にでも 3.0.4 から 3.1 にしようかと
思っているのに。
0494デフォルトの名無しさんNGNG
template<typename T>
class A {
public:
  virtual const T method() = 0;
};

class B : public A<char *> {
public:
  [  (a)  ] method() {
    return 0;
  }
};

int main() {
  return 0;
}

みんな,この [ (a) ] に入れるべきものが自然に分かるですか?
私はさっき無茶苦茶はまったんで鬱です
しかもまだ理屈が分かってないし
0495デフォルトの名無しさんNGNG
今まで怖くて触れてこなかったtemplateをいざ使ってみようと思ったのですが、
次のコードがコンパイルできません。。。


#include <iostream>

using namespace std;

template <class T = char, class C = basic_string<T> >
T test(const C& str)
{
  return str[0];
}

int main(void)
{
  cout << test(basic_string<char>("Hello, world!")) << endl;
}

どこが間違ってるのか分からないのですが、
出来れば、ご教授願います。環境はVC6+SP5です。
初心者質問ですいません。。。
0496デフォルトの名無しさんNGNG
>>494
なるほど。char * const って書かないとだめか。
理屈としては、テンプレートを解析した時点で、「T は const」
ってことに決まっちゃうからかな。const char * は、
const な「char *」じゃないっしょ。
0497デフォルトの名無しさんNGNG
T は char* なんだから、
const T は char* const になるですよ
0498デフォルトの名無しさんNGNG
>>495
関数テンプレートでデフォルトパラメータは使えたっけ
テンプレート宣言終了の;がない
テンプレートは型が完全に一致しないと実体化しないから
多分君のもくろみは外れている

とか
0499デフォルトの名無しさんNGNG
>>495
テンプレートの引数を省略できなかった,ていうことらしいんで
cout << test<char>(basic_string<char>("Hello, world!")) << endl;
とすれば,うまく動いているっぽいっすね

>>496-497
あー,どうもっす。そういう考えがスッと出て納得できるなんて,うらやますぃ・・・
今日ついに「プログラミング言語C++」買ってきたんで,これから
ワッシワシ勉強するですよ
0500495NGNG
>>499
出来ました…でも、関数テンプレートのデフォルト引数の例が、
Stroustrup本の13.4.1に載ってるんですけど…
例が悪いみたいですね…。すいません。
0501498NGNG
ごめんよく見てなかった&&勘違い。
問題はデフォルトパラメータは使えないこととと>>499だけだね
0502495NGNG
例が悪いというのは上の例が悪いってことです…。
誤解を招きそうな発言をして申し訳ありません。。。
0503デフォルトの名無しさんNGNG
関数テンプレートのデフォルト引数が使えるのか…
VCは謎が多いな
0504デフォルトの名無しさんNGNG
>>498
わかるよ。
0505デフォルトの名無しさんNGNG
cont char *とchar const *は同じ意味なのですか?
0506デフォルトの名無しさんNGNG
>>505
違う。constは直後の要素に掛かる。
0507495NGNG
>>503
あ、あと、BCCでもデフォルト引数が使えないみたいです。。。
一次クラステンプレートのみに使用できますとか言われて…
弱った。。。手持ちのコンパイラじゃ出来ないのか。。。(汗)
0508デフォルトの名無しさんNGNG
>>505
関数の仮引数では同じだったはず
他は違う
0509デフォルトの名無しさんNGNG
>>506
サンクス
0510デフォルトの名無しさんNGNG
>>507
ん?
出来ないのが標準仕様(ISO)だけども何が問題?
0511デフォルトの名無しさんNGNG
const char* と char const* は一緒じゃないの?
0512デフォルトの名無しさんNGNG
だから違うというとるに
0513495NGNG
>>510
そうなんですか?
Stroustrup本のは…間違いなんですか?
0514デフォルトの名無しさんNGNG
> 出来ないのが標準仕様(ISO)

ダセエな。
0515デフォルトの名無しさんNGNG
>>495 & その他
関数テンプレートでもデフォルト引数は使える。
495 がダメなのは、2番目のテンプレート引数 C は関数引数から推測できるのに
1番目の引数 T の指定がないからじゃないのか。だから 499 が正解だと思う。
普通の関数のデフォルト引数だって、1番目はデフォルトにして2番目の引数だけ
指定するなんてことはできないだろう。
0516デフォルトの名無しさんNGNG
>>506 通るけど。

class A {
public:
virtual const char *func() { return 0; }
};

class B : public A {
public:
virtual char const *func() { return 0; }
};

int main()
{
A a;
a.func();

B b;
b.func();
}
0517デフォルトの名無しさんNGNG
まったまった、今酔ってて怪しいが、これはさすがに同じだろ
const char * str
char const * str

この辺と混同してないか?
char * str const
const char * const str
0518495NGNG
>>515
ふむ…。
では、引数から推測できないようにすると出来るのでしょうか?
ちょっと試してみます。
0519デフォルトの名無しさんNGNG
511
同じ結果になるんですが・・・。

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

int main()
{
 char const* p1 = "hoge";
 const char* p2 = "hoge";
 cout << typeid(p1).name() << endl;
 cout << typeid(p2).name() << endl;
 return 0;
}
0520517NGNG
わり、3番目の例はこう書きたかった
×char * str const
○char * const str
0521499NGNG
早速 Stroustrap 本読んでます (´ー`)
p.133 に書いてたんですが,"const *" は存在しないから基本形の一部と
見なされるらしくて,つまり "char const *" は "const char *" と
同等だということでした

# だんだん const の使い方が分かってきたかも
0522515NGNG
スマソ。いま ISO の規格書確認したら、
A default template-argument shall not be specified
in a function template declaration or a function template definition
って書いてあった。
0523デフォルトの名無しさんNGNG
>>515
>関数テンプレートでもデフォルト引数は使える。
ここでの問題はデフォルトテンプレート引数だぞ
これは使えないだろ
0524デフォルトの名無しさんNGNG
>規格書確認したら

持ってんのかよ!Σ(゚□゚=)
イイナァ
0525523NGNG
ごめん。読んでたら遅れた
0526japh ◆J.5V8ta6 NGNG
「*を挟んでconstが右にあるか、左にあるかで見分けろ」
というようなことを何かで読んだよ。
(プログラミング言語C++だったかな…或いはEffective C++だったかもしれない)
0527515NGNG
>>524
たしか、20ドルくらいで買った。まあ、ふだんは
http://www.kuzbass.ru/docs/isocpp/
を見に行ってるけどね (w

>>525
いや、うっかり C++3rd を信じちまったおれが悪かった。
0528495NGNG
>>522
結局、ISO標準では関数テンプレートのデフォルト引数を使うことは無理なんですね。
Stroustrup本に書いてあるのは次のようなものです。

template<class T, class C = Cmp<T> >
int compare(const String<T>& str1, const String<T>& str2){
  for (int i=0; i<str1.length() && i<str2.length(); i++)
    if (!C::eq(str1[i], str2[i])) return C::lt(str1[i], str2[i]) ? -1 : 1;
  return str1.length()-str2.length();
}
0529デフォルトの名無しさんNGNG
BCC5.6では、関数テンプレートにデフォルト引数を書いただけで
通らなくなりまっす。下のように書くしかありまっせん。

#include <iostream>

using namespace std;

template <class T, class C>
T test(const C& str)
{
return str[0];
}

int main(void)
{
cout << test<char>(basic_string<char>("Hello, world!")) << endl;
}
0530495NGNG
すいません。
ぐえ…。Stroustrup本が標準だとばかり思っていました…。
今度から>>527を見に言ってから発言するようにしたいと思います。

色々ありがとうございましたm(_ _)m
0531デフォルトの名無しさんNGNG
>>527
ありがとう!
0532デフォルトの名無しさんNGNG
手元になぜか refman.pdf という 2,860,601バイトの規格書があるが、
なぜだろう?いつの間に?
0533デフォルトの名無しさんNGNG
検索してみたらcpp3rd.zipなんてのも出てくるな
0534デフォルトの名無しさんNGNG
某所で出てから、一気に普及したんじゃないかな>refman
0535デフォルトの名無しさんNGNG
ここのは無茶苦茶鯖が重いけど、今でも落とせるね。

http://mxlab.com:8080/ftp/docs/c++/?s
0536デフォルトの名無しさんNGNG
527 のリンク先は、draft だからさらしてても OK なのか?
それともやっぱり違法?
0537デフォルトの名無しさんNGNG
>>527のヂレクトリをいっこ登ると・・・(゚ε゚)キニシナイ!!
0538デフォルトの名無しさんNGNG
constに関しては、>>526が正解。参考文献は、Effective C++ の21項。
あと、Exceptional C++ の43項も読んだら、constの正しい使い方が理解できるよ。
0539デフォルトの名無しさんNGNG
うほほ
0540デフォルトの名無しさんNGNG
激重(汗 ようやく落ちた
0541デフォルトの名無しさんNGNG
const char* str なんつーダサい書き方は速く卒業してホスィ・・・
常に char* const str なら何も迷うこと無いでしょ
0542デフォルトの名無しさんNGNG
char const* の間違い?
0543デフォルトの名無しさんNGNG
>>542
あ、サンクス
0544デフォルトの名無しさんNGNG
>何も迷うこと無いでしょ

つーか間違えてるなら、迷ったってことでわ?
0545エキセントリック541NGNG
>>544
絶対ゆわれるとオモタYO(恥
const の位置を間違ったんじゃなくて、
1行目でconstなcharへのポインタのことを考えていながら、
2行目でcharへのconst なポインタのことしか考えてなかった。

const char* const str なんつー・・・
char const* const str なら何も迷・・・
って書けばよかたよ

0546デフォルトの名無しさんNGNG
実際問題、ポインタ自体をconstにすることなんてほとんどねーんだし、
そうするくらいなら、参照渡せよ、って感じだし。
(使用頻度において、T const * >> T * const ,T const *const)
ポインタのポインタも、ポインタへの参照とか、vector<vector<T> >つかえば
いいわけだから、ポインタでconst使うのは、実質 T const * ptr だけっしょ。
だったら、迷うもなにも、 const T *ptrってやっとけばいいんでないかい?
0547デフォルトの名無しさんNGNG
漏れはバリバリ使う、9割方const
配列のときとかNULLのときとか参照使えないし
0548デフォルトの名無しさんNGNG
>> 461
>> 当たり前のことにも名前ついてて少しワラタ。

若干オソレスだが

その当たり前ってやつを他人に説明するには、名前があったほうが便利だろ〜。

デザインパターンの目的のひとつは、そういうことだぞ。

だいたい、Gof本に書いてあることなんざ、ハッカーレベルじゃ全部当たり前。
0549デフォルトの名無しさんNGNG
>>548
取りあえずこれ抽象クラスにしたら継承するだけでいろんな事に使えるやろ?
おお。確かに。

取りあえずこのクラスでFactoryMethodやるから。
はぁ?

日本的にあの名前達は有害かと。
0550デフォルトの名無しさんNGNG
しかし、参照は便利だねえ。
NULL渡しチェックの必要がなくなるのは嬉しい。
今までCOMに毒されてたから気が付かなかったよ。
0551デフォルトの名無しさんNGNG
>>550
逆にNULLが渡したくても渡せない罠。
0552デフォルトの名無しさんNGNG
>>551
NULLを渡すって事は、前提とする状況ががらっと違うわけだから。
オーバーロードさせとくのが正しい、と俺は思う。

// ポインタ渡し
void Foo(RECT* pRect){
  if (pRect == NULL){
    SetRect(rect_);// メンバ変数
  } else {
    SetRect(*pRect);
  }
}

// 参照渡し
void Foo(RECT& rect){
  SetRect(rect);
}
void Foo(void){
  SetRect(rect_);// メンバ変数
}

こんな感じで。
0553デフォルトの名無しさんNGNG
>>552
結局参照はPascalのvar以上の使い方はすべきでないですか?
0554デフォルトの名無しさんNGNG
派生クラスを定義するときに
継承もとのクラスのコンストラクタをそのまま使いたいんだけど
良くわかりません。

継承もとのクラスのコンストラクタを派生クラスにコピペするのもあんまりだし・・・


0555デフォルトの名無しさんNGNG
Class a{
a( int c );
};

Class b : public a {
b( int c );
};

b::b( int c ) : a( c )
{
}

こういうこと?
それとも、class b のコンストラクタの定義は無しで
class a のコンストラクタを流用したいってこと?
それは俺も知りたい、誰か教えてプリーズ。
0556デフォルトの名無しさんNGNG
multimap<int, string> aaa;
として

  aaa.insert(make_pair(3, "abcdefg"));
としたらエラーがでました。なんか2番目の引数が問題らしいので
適当に

  aaa.insert(make_pair(3, string("abcdefg")));

としたらokになりますた。
これって一時的なオブジェクトstringを"abcdefg"で初期化して渡したって事ですよね?
CPUとメモリ消費しながら・・

この修正で正しいですか?間違ってますか?
0557デフォルトの名無しさんNGNG
いいんじゃないの?
0558デフォルトの名無しさんNGNG
そうでしたか。どうもです。
C++標準ライブラリ〜って本では文字列を渡してますが
VC++の癖ですかね〜
0559デフォルトの名無しさんNGNG
char const *からstringへの変換は存在するが、
pair<int, char const * const>からpair<int, string>への変換は存在しない。
0560japh ◆J.5V8ta6 NGNG
>>557
つまりmake_pair()じゃなくて単にpair<>のコンストラクタを使いなさいってこった。

aaa.insert(make_pair(3, string("abcdefg")));
↓
aaa.insert( std::pair<int, std::string>(3, "abcdefg") );
0561デフォルトの名無しさんNGNG
書くのはvalue_typeにしとけ
0562561NGNG
と思ったけどちょっと長いな
std::multimap<int,std::string>::value_type
0563japh ◆J.5V8ta6 NGNG
>>561
うい、そっちの方が望ましいね。
長いのはtypedefで何とかすればよし。

0564デフォルトの名無しさんNGNG
C++のソースで、cstdioじゃなくstdio.hをincludeすると、なにか問題ある?
stdio.hに愛着があるんで。
0565デフォルトの名無しさんNGNG
>>564
名前空間がstdに包まれなくなる。つまり通常のCのようになる。
0566デフォルトの名無しさんNGNG
おまえ死ねと言う気になる
グローバルネームスペースを汚すなと。
0567デフォルトの名無しさんNGNG
>>564
これだからプロジェクトに加齢臭のするドキュソが入ってくるとロクなことにならねえ
と若い連中に思われる。
0568デフォルトの名無しさんNGNG
.cpp で使う分には問題は少ないでしょ。
0569564NGNG
うわぁレスの早さからしてとてもだめなことを聞いたね。> 俺
今日から改めます。
0570デフォルトの名無しさんNGNG
569は神。ジジイのカガミ。
0571デフォルトの名無しさんNGNG
名前空間についておさらいだッ
0572デフォルトの名無しさんNGNG
friendってどういう目的で使うのですか
0573デフォルトの名無しさんNGNG
クラスのprivateなメンバにアクセスしたり。
0574デフォルトの名無しさんNGNG
g++の2.95で、std::basic_string<unsigned char>のc_str()で
エラーが出たりしますか?
0575デフォルトの名無しさんNGNG
cppってstdio.hインクルードすると良くないのかぁ・・・。
ストラップさんの本、読み直してみよう・・・。
0576128NGNG
>572
引きこもりは全部friendにしてしまう傾向があるから注意・・
0577デフォルトの名無しさんNGNG
>>572
operatorを定義する時に便利。乱用は禁物。
0578デフォルトの名無しさんNGNG
これってなんでエラーになるの?

class Test
{
public:
static int nHoge ;
};

int main()
{
Test::nHoge = 0;

return 0;
}

0579デフォルトの名無しさんNGNG
nHogeの実体がないから。
0580デフォルトの名無しさんNGNG
こんなの初めて見た(ワラ
0581デフォルトの名無しさんNGNG
ワラウコトナイジャナイ...
0582デフォルトの名無しさんNGNG
>>578 とにかく覚えなさい。

class Test
{
public:
static int nHoge;
};

int Test::nHoge;

int main()
{
Test::nHoge = 0;

return 0;
}
0583デフォルトの名無しさんNGNG
クラス内の性的変数の定義の詳細を見ればどうにかなるんじゃない
0584デフォルトの名無しさんNGNG
>>582
int Test::nHoge; ←これが実体なの?

うーん謎。
0585デフォルトの名無しさんNGNG
>>584
class変数を複数作っても、staticメンバ変数は実体が一つしか
存在しない事に伴う特殊な書き方らしい。誰か詳細キボンヌ。
0586デフォルトの名無しさんNGNG
>>584
それが実体。初期化する場合もそこで。
0587デフォルトの名無しさんNGNG
>>585
class変数 を staticメンバ変数 と言い替えている罠

0588デフォルトの名無しさんNGNG
アヒャヒャ!
0589デフォルトの名無しさんNGNG
>>584
staticメンバはクラスに固有なもの
インスタンスをいくつ作っても、staticメンバは複数作られない
それは、概念的にstaticメンバが、インスタンスの外にあるから。
0590デフォルトの名無しさんNGNG
>>587
わりィとちった。インスタンスだね。
0591デフォルトの名無しさんNGNG
>>589
なるほど。わかりやすいです。
staticメンバの宣言は、
各インスタンスの外にある1つの実体を指すための
ポインタ的(Cで使う意味じゃなく)なものだということだすね。
だからいくつインスタンスを生成しても指す場所は同じってことで、
値はいっしょということだと。
0592デフォルトの名無しさんNGNG
>>587
静的嫌がらせ
0593デフォルトの名無しさんNGNG
ちょっと質問!
EnumWindowsとかで取得したHANDLEからそのアプリケーションが
あるパスを取得する方法を教えて下さい。
0594デフォルトの名無しさんNGNG
無理っぽいが、
http://pc.2ch.net/test/read.cgi/tech/1023361418/l50
0595デフォルトの名無しさんNGNG
>>594
サンクス、とりあえず、向こう逝きます、
0596デフォルトの名無しさんNGNG
ここのみんなでさC++の入門書書かない?HTMLとかで
大勢で思考錯誤したり分担したりすればかなりいいものが作れる気がするんだが
痒い所に手が届くような大規模なFAQとかさ、、
学んでる最中の人のがいればどこがわからないとかが指摘できたりするわけで
ここには勉強中の人もかなりいるだろうからそう言うのも大丈夫だとおもう
0597デフォルトの名無しさんNGNG
>>596
俺も似たようなことは考えてた。
0598デフォルトの名無しさんNGNG
>>596
俺はハナからあきらめてた
0599デフォルトの名無しさんNGNG
class a{
friend class b;
}

class c : public b{
}

この class c にも class b に対して行ったfriend宣言の効力を
効かせたいんですけど無理ですかね?
やっぱり class c のfriend宣言をあらためて加えないと駄目ですか?
0600デフォルトの名無しさんNGNG
>>599
はい。
0601デフォルトの名無しさんNGNG
>>600
あなたヤホーの掲示板に居たでしょ?
0602デフォルトの名無しさんNGNG
>>599
なんでそんなことをしたいのよ?
0603ななしあたNGNG
>>602
いいじゃない、別になんだってさ
0604599NGNG
そうですか、残念。

>>599
class b の派生クラスを作る度に
class a の宣言を改定しなければならないのがイヤだったんです。
class b の能力としては class a のプライベートメンバにアクセス権を持つ
というのが含まれているんで、継承でそれを派生クラスに持ち越せないって
なんか変な感じがしますね。これはちょと不満かも。
0605599NGNG
>>602の間違いでした。
0606デフォルトの名無しさんNGNG
>>599
激しくお勧めできないが


class A
{
protected:
int i;
friend class B;
};

class friendlyA: public A { friend class C; };

class C
{
C()
{
A a;
static_cast< friendlyA* >( &a )->i = 10;
}
};
0607599NGNG
>>606
それはまたトリッキーで・・。
でも class friendlyA は class C の内部クラスにしてしまえば
それなりに綺麗に書けそうかも。どうも参考になりました。
それか、今思ったんですがfriend宣言のところだけマクロにして
切り離すってのもアリかも。
0608デフォルトの名無しさんNGNG
>>596
いまにそれが有名になってこの板が2chの看板に!
0609デフォルトの名無しさんNGNG
日本語で specialization を表すのに何を使ってますか?
「特殊化」や「専門化」は instantiation の訳に用いるほうがふさわしいし、
C++3rd の「特殊バージョン」は間違いではないにしろ、すわりが悪く感じます。
0610デフォルトの名無しさんNGNG
特別化
0611デフォルトの名無しさんNGNG
>>596
>>608
あれだけいってもC FAQ/C++ FAQすらよまねえ連中だらけなのにさらにゴミ文書増やすのかヨ

0612デフォルトの名無しさんNGNG
>>610
ふむ、それも「専門化」とかと同じで、意味があってないんだよね
0613デフォルトの名無しさんNGNG
>>612
何がしたいわけ?
0614デフォルトの名無しさんNGNG
>>612
限定化
0615デフォルトの名無しさんNGNG
>> 614
いろいろと「〜化」って挙げてくれてるけど、それって「操作」を意味する「サ変名詞」でしょ
だから、正しくない。
specailization は「操作」じゃなくて、クラスや関数でしょ。
0616デフォルトの名無しさんNGNG
○○化物
0617デフォルトの名無しさんNGNG
>>613
単に、specialization を日本語で "正しく" 表記したいだけだよ。
いつもは「スペシャライゼーション」って書いてるけど、長ったらしいしね
0618デフォルトの名無しさんNGNG
言語のままspecializationと表記することに問題が?
0619デフォルトの名無しさんNGNG
原語
0620デフォルトの名無しさんNGNG
>>616
クラスや関数って「物」なんだろうか?
0621デフォルトの名無しさんNGNG
>>618-619
うん、問題ない。めんどくさいけどね。
読みやすいかといわれると、疑問もあるけど。
0622デフォルトの名無しさんNGNG
>>621
気持ちは分からんでもないが、戦時中じゃないんだから、
むりやり日本語にすることもあるまい。
0623デフォルトの名無しさんNGNG
>>622
政府の見解は違うようだけどね(w
字面が場所とるのが嫌なんだが、現行どおり「スペシャライゼーション」で当面いきます。
おつきあい、ありがとう。
0624デフォルトの名無しさんNGNG
政府を窓から投げ捨てろ!
0625デフォルトの名無しさんNGNG
>>624
燃えるゴミの日に出したよ。政府
0626デフォルトの名無しさんNGNG
templateは言うなればクラスの特殊な物なの?
具体的な型を指定してあげればクラスと同様に扱えますか?
つまり、基底クラスにして派生させてみたり、
その他いろいろ文法上はクラスと同等の扱いですか?
0627デフォルトの名無しさんNGNG
>>626
>>templateは言うなればクラスの特殊な物なの?
逆、クラステンプレートは普通のクラスを型に対して一般化したもの。
同様に、関数テンプレートは関数を一般化したもの。

>>具体的な型を指定してあげれば、クラスと同様に扱えますか?
そのとおり、テンプレート引数を与えてやれば、コンパイラは
テンプレートをそれでインスタンス化してクラス定義を作成し、翻訳単位に挿入する。
そうやって作られたクラスは、通常のクラスとまったく同じように使用できる。
0628デフォルトの名無しさんNGNG
>627
ありがとうございます
0629デフォルトの名無しさんNGNG
2次元配列の要素数を取得するにはどうすればよいですか?
0630デフォルトの名無しさんNGNG
vector?
0631デフォルトの名無しさんNGNG
string に数値を文字列にしていれるのに一番すっきりした方法はなんでしょう?
sprintf を使ったりしてみたのですが、なんかカッコ悪いような……
0632デフォルトの名無しさんNGNG
>>631
boost::lexical_cast<>
ちょい重いけど
0633デフォルトの名無しさんNGNG
int x = 10;
string s = static_cast<ostringstream&>((ostringstream() << x)).str();
とか。
0634デフォルトの名無しさんNGNG
itoa
0635デフォルトの名無しさんNGNG
>>633
それだったらboost::lexical_cast<>でいいじゃねぇか。
どうせあれも内部でstringstream使ってるし。
0636デフォルトの名無しさんNGNG
sprintfつかっとけ。
0637デフォルトの名無しさんNGNG
stringオブジェクトの中身を編集したいのでstring::c_str()
で得られたconst char*をchar*にキャストして
そこがさす文字を置き換えたりとかしても平気ですか?
0638デフォルトの名無しさんNGNG
自分が確保した領域にstrcpyしてからのほうがええんじゃないか?
エエジャナイカ、エエジャナイカヽ(・∀・)ノ
0639デフォルトの名無しさんNGNG
>637
基本的にやってはいけない。
もしやるとしても、以下の出力の理由が理解できてから。

#include<string>
#include<iostream>
int main()
{
 using namespace std;
 string s1("abcde");
 string s2 = s1;

 char *p = (char *)s1.c_str();
 *p = 'A';

 cout << "s1 = " << s1 << endl;
 cout << "s2 = " << s2 << endl;
 return 0;
}
0640デフォルトの名無しさんNGNG
基本的じゃなくて、絶対にやってはいけない。
内部文字列のコピーを返している場合もあるから。
0641デフォルトの名無しさんNGNG
なるほど。よくわかりました。
0642デフォルトの名無しさんNGNG
const_cast<>を使う時って、なんかいけないことをやってる気がするよ。
0643デフォルトの名無しさんNGNG
うん。
0644デフォルトの名無しさんNGNG
コンソールアプリケーションの実行ファイルサイズを抑えるために、
なにか心がけるといいことはありますか?C++で
0645デフォルトの名無しさんNGNG
>>644
iostreamなどの標準ライブラリを使ったらすぐ大きくなる。
0646644NGNG
>>645
そうですよね。特にg++ 3.1なんかでは半端じゃないですよね。
0647デフォルトの名無しさんNGNG
SGI STLのiostreamがでかいだけ。
0648デフォルトの名無しさんNGNG
gcc-2.95.3とかでは割と小さかったのにな。残念だな。
0649デフォルトの名無しさんNGNG
locale周りのサポートが入ったんだから、
でかくなるのは避けようがないでしょ
0650デフォルトの名無しさんNGNG
stringstreamを使うだけででかくなるのはいただけない。
どうしてもsprintfの誘惑に負けちゃうよな
0651デフォルトの名無しさんNGNG
だれかー初心者ですが

致命的エラー F1003 D:\borland\bcc55\Include\stdcomp.h 5: error 指令: Must use C++ for STDCOMP.H

ってでるんですけどなんでー(;_;)
0652デフォルトの名無しさんNGNG
DirectX関係なんですが、クラス構造の問題なのでこっちで聞いてみます。

アクションゲームで人間クラス、背景クラス、Direct3Dラッパークラスがあるのですが
人間クラスのメンバ関数にDraw()を定義して
p人間クラス->Draw();
p背景クラス->Draw();
でDirect3Dを使って描画させたいのですが、この場合Direct3Dクラスから人間クラスと背景クラスを
継承させるのが正しいのでしょうか?ただし、Direct3Dクラスが複数できるのは問題があります。
0653デフォルトの名無しさんNGNG
素朴な疑問なんですが、なぜ ++x は左辺値なのに
x++ は右辺値なんでしょうか。
0654デフォルトの名無しさんNGNG
>>651
F1003は#error指令が出すメッセージです。
拡張子を.cppにしませう。
0655japh ◆J.5V8ta6 NGNG
>>653
++xが左辺値なのは効率の為で、x++が右辺値なのはそうせざるをえないから、かな。
実装してみればわかるよ。
0656デフォルトの名無しさんNGNG
むきー、x++しか使っていない
俺はまるで非効率な男みたいではないか!!
0657デフォルトの名無しさんNGNG
>>652
描画インターフェースを定義して(IDrawable3D::Draw()とか)、
人間クラス、背景クラスがそれを "内部クラスで" 実装し、
そのインスタンスをD3D描画管理クラスに登録するというのはどうかな。
このやりかたなら、対象となるクラスが何であろうと、描画に持ち込むことができる。

デザインパターンでいうところの・・・何だっけ
0658 NGNG
>>656
普通にプログラミングすれば、x++と--xだけあればいい。
++xやx--は使う前にアルゴリズムを見直してみることを勧める。
0659デフォルトの名無しさんNGNG
++は右っ側、--は左っ側にするのか?
0660652NGNG
>>654
ありがとうございまする
動きました!!GCCなら動いてたんだけどなぁ
BCCは動かないのね…

0661デフォルトの名無しさんNGNG
>アルゴリズムを見直してみることを勧める

そ、そんなに重大なことなのか!?
0662デフォルトの名無しさんNGNG
>>658
++xとx++は、コピーコンストラクタ云々で効率が違うんだと。
詳しくは知らん。
0663japh ◆J.5V8ta6 NGNG
>>658
ん〜む。何故にx++と--xのみ…
よければ理由を教えてもらえないかな?
0664デフォルトの名無しさんNGNG
>x++が右辺値なのはそうせざるをえないから、かな。
x++が左辺値だったら、なんかまずいワケ?納得いかん。
0665デフォルトの名無しさんNGNG
>>662
演算子の多重定義の事を考えてみると、前置++は参照値を返すように
書けるが、後置++はできない。関数内で一時変数を作成して、その値
を返すようにしなければならない。

それで、参照値が返せるというのは、すなわち左辺値になりうる、という
説明ではダメ?
0666japh ◆J.5V8ta6 NGNG
そもそもxの通常の動作は
xをインクリメントし、インクリメントする前の古い値を返す
というもの。
「xをインクリメントする前の古い値」がxそのものであるはずがない…
つまり一時オブジェクトであるということだよ。

ちなみに、ユーザー定義型ではx++に代入させることも可能だよ。
俺はそんな型扱いたくないけどね。

0667デフォルトの名無しさんNGNG
>>664
前置/後置で左辺値/右辺値でバランス取れてるじゃん!
右辺値だけ使いたい時も在るさ、多分
0668664NGNG
>>665
なるほど、納得しますた。
>>667
納得いくかっ!
0669662NGNG
>>665
さんくす。
しかし、それでも後置を使いたいんだなぁぁ。
前置は気持ち悪いのよね。
0670デフォルトの名無しさんNGNG
>>669
気持ちが悪いという理由で演算子を使い分けられないのなら、プログラマは
向いてないと思われ……。

(それは仕様ですで何でも済ませるヤツもアレだが、仕様を納得できんのも
アレだ)
0671デフォルトの名無しさんNGNG
プログラマはというか、C++は絶対に向いてないね
0672デフォルトの名無しさんNGNG
しかしC++は後置だったりする
0673662NGNG
>>671
確かに向いてないかも。
templateとかあんまり好きじゃないしね。
ヘッダにずらずらと、なんだか汚く感じるんだなぁ。
0674デフォルトの名無しさんNGNG
>>673
C++は他の言語のいい点をたくさん取り入れたが、汚い所もたくさん
取り入れてしまったね。
0675デフォルトの名無しさんNGNG
ヘッダに書いた方が良いと思うが。
セパレーションは運用楽だしコンパイル速度も遅くならないが、管理が面倒。
0676デフォルトの名無しさんNGNG
>>673
それは同意。
資源の浪費だし、テンプレートを使ったコードの最適化は信用できないし。

でも C++ は嫌いじゃないけど?
0677デフォルトの名無しさんNGNG
どの言語が一番好きかといわれたらダントツでC++だな・・・
0678デフォルトの名無しさんNGNG
んだんだ。
0679デフォルトの名無しさんNGNG
仕事には私情を挟むつもりは無いが
同じく俺もだ。
0680652NGNG
>>657
ありがとうございます。
でもレスが少ないところを見ると、ゲーム分野でオブジェクト指向を取り入れてる人って少なそう。
私もラッパー程度の使い方にとどめておきます。
0681デフォルトの名無しさんNGNG
>>680
オレはOOだよ。
シーンやシナリオはステートパターンで。
スプライトとかオブジェクトにしとけば便利。
0682デフォルトの名無しさんNGNG
ゲームってOO使えそうじゃない
0683デフォルトの名無しさんNGNG
例外処理が有効な時とか RTTI が有効な時に定義されるマクロって
何かありましたっけ?
__CPLUSPLUS みたいな感じの。

CodeWarrior と VC++ の場合を知りたいです。
0684デフォルトの名無しさんNGNG
VC++はヘルプにあった。
0685デフォルトの名無しさんNGNG
オブジェクトの何等かの状態を知りたい場合、intやdouble,booleanなどのメンバーに
アクセスする時にC++の教科書ではメソッドを介してアクセスされてますがなぜですか?

FieldやPropertyなど、メソッドを介さずに直接Publicなメンバーを用意して
値のやり取りも出来ると思うのですが。
0686デフォルトの名無しさんNGNG
>685 その理由を説明していない教科書は捨てろ。
0687デフォルトの名無しさんNGNG
(自分だけが)十分承知使うなら別にそれでもかまわんぞ
0688デフォルトの名無しさんNGNG
>>685
#define class struct
#define private:
#define protected:
とでもして使えばいい罠。
0689デフォルトの名無しさんNGNG
>>686
その理由に付いては何となく分かるんですが。(配列、ポインタ、インデクス
範囲、そんなキーワード思い付いたんですが)
教科書探して見ます。

>>687
わかりました。どうもです。
0690デフォルトの名無しさんNGNG
#define private public
#define protected public
だわな。
0691デフォルトの名無しさんNGNG
>>688>>690
極悪(w
0692デフォルトの名無しさんNGNG
>>688-690
ワラタ
0693デフォルトの名無しさんNGNG
>>680
> ゲーム分野でオブジェクト指向を取り入れてる人って少なそう。
絶対数は知らんが、俺は OO だよ。今度、転職する先のゲームメーカーでも
開発の主力言語は C++ だそうだ。

(別のトコロで C 主流ですって会社もあったけど、そっちは断った。言語が理由
じゃないけどね)
0694デフォルトの名無しさんNGNG
>>688
ANSI C++ の規格では、private, protected, public の中ではメンバ変数のメモリ
配置順序は決まってるが、それをまたがった場合には実装依存になっている。
たとえば

private:
 x;
public:
 y;
private:
 z;

だと x, y, z ではなく x, z, y の順に配置されるかも知れんわけで、そのマクロを定義
すると既存のオブジェクトとバイナリ互換性を崩す可能性があるぞ。

まぁ、ネタニマジレス だけどさ(w
0695デフォルトの名無しさんNGNG
シングルトンなクラスのgetInstance()とかでnewしたやつは
どこでdeleteすべきですか?
0696デフォルトの名無しさんNGNG
mainの最後とか
0697デフォルトの名無しさんNGNG
static Singleton* pinstance = NULL;
if (pinstance == NULL) {
 lock();
 if (pinstance == NULL) {
  static Singleton instance;
  pinstance = &instance;
 }
 unlock();
}
return pinstance;

こうすればいい
0698695NGNG
>>696,697
ども。697を見てて思ったんですけど、
Singleton* Singleton::getInstance()//staticなメンバ
{
 static Singleton inst;
 return &inst;
}
なんてするとヤヴァイですか?
0699デフォルトの名無しさんNGNG
>>694
なるほど、そうすると、privateなメンバを持つクラスのヘッダファイルを
書き換えて、privateメンバをいじくって楽しむというのは危険な行為な
のですね。

まあもともとC++のカプセル化機構は、いくらでも壊すことができるから、
使う人に全責任があるわけですが。
0700695NGNG
>>698
むりですた
0701デフォルトの名無しさんNGNG
>699
危険なヤシが居ます
0702695NGNG
ガーン。二重deleteしてるだけだった。
とりあえず>>698でよさげなのですが、697さんのように
いちいちチェックしたほうがよいですか?
0703デフォルトの名無しさんNGNG
697のはマルチスレッドで間違って2つのインスタンスが生成されるのを防ぐ方法
0704デフォルトの名無しさんNGNG
#include<stdio.h>
#include<stdlib.h>
typedef struct cell{
eki[20];
struct cell *next;
} CELL;
CELL *link(char *eki,CELL *p){
char *q,*r;
q=(CELL *)malloc(sizeof(CELL));
strcpy(q->eki,eki);
if(p==NULL){
q->next=NULL;
return q;
}
r=p;
while(r->next!=NULL){
r=r->next;
}
r->next=q;
q->next=NULL;
return p;
}
main(){
CELL *start=NULL;
char eki[20];
while(scanf("%s",eki)!=EOF){
start=link(eki,start);
}
連結リストの簡単なプログラムですがリナックスならこれで通りVCでは通りません。
ポインターの所にエラーがきます。どう直せばいいのでしょうか?
0705デフォルトの名無しさんNGNG
ぜんぜんC++じゃないじゃん。
0706デフォルトの名無しさんNGNG
> 連結リストの簡単なプログラムですがリナックスならこれで通りVCでは通りません。

このソースが通るコンパイラってあるのでしょうか…
0707デフォルトの名無しさんNGNG
>>704
通るように修正したよ。(動作確認はしてない)

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

typedef struct cell{
char eki[20];
struct cell *next;
} CELL;

CELL *link(char *eki,CELL *p){
CELL *q,*r;
q=(CELL *)malloc(sizeof(CELL));
strcpy(q->eki,eki);
if(p==NULL){
q->next=NULL;
return q;
}
r=p;
while(r->next!=NULL){
r=r->next;
}
r->next=q;
q->next=NULL;
return p;
}

main(){
CELL *start=NULL;
char eki[20];
while(scanf("%s",eki)!=EOF){
start=link(eki,start);
}
}
0708デフォルトの名無しさんNGNG
>>704
VCとunixとでは仕様が全然違う。きをつけろ
0709デフォルトの名無しさんNGNG
eki[20];
何型?
0710デフォルトの名無しさんNGNG
とおりましたありがとう。
ちなみに出力関数忘れてましたw。
0711デフォルトの名無しさんNGNG
>>709
コピーするときに間違えたと思われ
0712てすとちゅぅNGNG
Σ(´д`;)

なんで仮想関数の方が呼び出しが早いんだろう・・・
おかしいな
0713デフォルト名無しさんNGNG
Vicual C++で、

int main()
{

char ss[5];
cin >> ss;

cout << ss << '\n' ;

return 0;
}

を実行すると、8文字まで打ち込んでも返してくれます。
9文字目でエラー発生。

どうして???
0714デフォルトの名無しさんNGNG
>>713
char ss[5];
0715デフォルトの名無しさんNGNG
ふざけてんの?
0716713NGNG
>714
だからさ、5文字って指定しているのにどうして
8文字までOKなのかってことさ。
0717デフォルトの名無しさんNGNG
>>704
C++でmallocなんて化石は使うな。
と言ってみる。
0718デフォルトの名無しさんNGNG
>>716
あんたの環境ではたまたま大丈夫だったってだけだろ?
0719713NGNG
そんなもんなの???
0720デフォルトの名無しさんNGNG
>>719
ss[4]以降もメモリーは続く。
0721720NGNG
s/ss[4]/s+4/
0722721NGNG
違う、ss+4だ・・
0723 NGNG
ss/ss[4]/ss+4 ?
0724デフォルトの名無しさんNGNG
>>723
何気におもろかった。
0725デフォルトの名無しさんNGNG
>>716
OKじゃなかったらバッファオーバーフロウの心配なんてしねーよ。
0726723NGNG
?
0727デフォルトの名無しさんNGNG
s/じゃなかったら/なら
0728 ◆JAPH9PWA NGNG
つまり幅を制御したければstd::setwを使え、と。
0729デフォルトの名無しさんNGNG
alignment …ああ、ネタにマジレスしちまった。
0730デフォルトの名無しさんNGNG
例外をthrowする時いろいろ情報を渡したいので
MyException:クラスを作ってコンストラクタを
MyException::MyException(const、char* sourceFile, int sourceLine, const char* format, ...)
と定義して
throw MyException("HOGE(%d) %s", a , b);
等として使っているのですが、
これだとCのヘッダ <stdarg.h> をインクルードしないと巧く行きません。

iostreamとか使ってもっと、C++風にかっこよくするにはどうしたら良いのでしょう?
0731デフォルトの名無しさんNGNG
まちがった!
throw MyException("HOGE(%d) %s", a , b);
↓
throw MyException(__FILE__, __LINE__, "HOGE(%d) %s", a , b);
です
0732デフォルトの名無しさんNGNG
無い
0733デフォルトの名無しさんNGNG
vectorとかに格納してみるとか。
0734デフォルトの名無しさんNGNG
「newしたものをdeleteしわすれる」以外に
メモリーリークすることってありますか?
0735デフォルトの名無しさんNGNG
mallocしたものをfreeしわすれる
0736デフォルトの名無しさんNGNG
配列のdeleteに[]を付け忘れる。
0737デフォルトの名無しさんNGNG
>>735 >>736
以外でありますかね?
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
したらなぞのメモリーリーク検出するんですよねぇ。。
newもmallocもつかってないのに。。
0738デフォルトの名無しさんNGNG
Winの場合だけども、リソースを解放し忘れてるとか。
0739デフォルトの名無しさんNGNG
>>730
可変個引数はあきらめて、引数を1個、2個、3個、…持つ
テンプレート関数としてコンストラクタを定義する。
0740734=737NGNG
どうも。コメントアウトしながらつきつめていったら、
どうやらstd::stringのつかいかたをあやまっていたようです。

std::string str;
str = "";
ってだめコードですか?
0741デフォルトの名無しさんNGNG
>>730

確か、operator,()ってオーバーロードできたよなぁ…
それ使って、

template <class T>
class variable_arg : public T {
  variable_arg(T);

  template <class T2>
  operator,(T2);
};


template <class T>
MyException(int,int,string,variable_arg<T>)

とかって定義してやるのは無理かなぁ…。。。
C++初心者なのでわかりませぬ…。。。
0742741NGNG
関係ないところを訂正

MyException(const string&, int, const string&, variable_arg<T>);

ちょっと試してみよう。。。
0743デフォルトの名無しさんNGNG
>>740
駄目ではないと思う。
str.clear() だとリークは起こらないの?
0744740NGNG
stringに関することはstlすれかな?微妙だけどとりあえずここで。
stlport(4.5.3=今の最新)はメモリリークが発生します。
SGIのアローケーターがよろしくないらしいので、
$stlport\stl\_site_config.hの
#define _STLP_USE_NEWALLOC 1
をコメントアウトするといいようです。
ってがいしゅつ?(だろうな)
0745デフォルトの名無しさんNGNG
ちゃいます。
普通はNode Allocatorが使われるので、
#define _STLP_USE_NEWALLOC 1
か
#define _STLP_USE_MALLOC 1
どちらかを定義します
0746740NGNG
thx.
自分のソースで定義しろってことですよね?
0747デフォルトの名無しさんNGNG
違う
〜\stlport\stl_user_config.h
に書き加える。iostreamも使っている場合、
ビルドし直さないと原因不明のバグの元になる。
0748デフォルトの名無しさんNGNG
>730
proxyクラスのインスタンスを作って、そいつをコンストラクタに渡すのはどうよ?

proxyとしてstd::ostringstreamがそのままつかえるかと思ったけど、
operator << が返すのはostream型なので
コンストラクタはostringstream型ではなくostream型にしなければいけない。
だから、そのまま使うとダウンキャストが必要で、
使い方によってはここで例外が出る(動作はしらん)。
その場合はこんな感じ。
class MyException {
 std::string str;
public:
 MyException(const std::ostream& s): str(dynamic_cast<const std::ostringstream&>(s).str()) {}
 const std::string& what() const { return str; }
};
void f()
{
 throw MyException(std::ostringstream() << " file: " << __FILE__ << " line: " << __LINE__ << " hoge");
}
int main()
{
 try {
  f();
 } catch (MyException& e) {
  std::cout << "Exception: " << e.what() << std::endl;
 }
 return 0;
}
0749デフォルトの名無しさんNGNG
>>734
STLport使ってるとか?
0750デフォルトの名無しさんNGNG
この不具合ってSTLportについてだけ報告されてるの?
0751デフォルトの名無しさんNGNG
ostringstream() << 〜ってできないよ
0752デフォルトの名無しさんNGNG
>>750
不具合じゃないよ
パフォーマンスを上げるために一部をプールしてるだけ。
0753デフォルトの名無しさんNGNG
そうだったんだ。でも何時の間にかリークしてるっていうのは嫌だな。
0754デフォルトの名無しさんNGNG
>>753
リークはリークだけど、どれだけ運用してもリーク量は増加しないよ
0755デフォルトの名無しさんNGNG
「プール」は「リーク」じゃない
と、Effective C++に書いてありますが
0756デフォルトの名無しさんNGNG
>>750
sgiからおとしたほうも同じく起こります。
>>754
ってことはこのリークは気にしなくてもいいのですかな?
0757デフォルトの名無しさんNGNG
リークとは、それを指すポインタが失われて、解放する手段がなくなった
時。
0758デフォルトの名無しさんNGNG
>>730,748
これでどう?
#include <iostream>
#include <sstream>

using namespace std;

class ErrorMessage {
ostringstream os;
public:
ErrorMessage( const char *file, int line ) {
os << file << "(" << line << "): ";
}

template<class T>
ErrorMessage& operator+( T x ) {
os << x;
return *this;
}

operator const string () const {
return os.str();
}
};

void foo( const string& s )
{
cout << s << endl;
}

int main()
{
int a = 10;
char b[] = "hogehoge";

foo( ErrorMessage(__FILE__, __LINE__) + "HOGE(" + a + ") " + b);
return 0;
}
0759デフォルトの名無しさんNGNG
>>758
(・∀・)カコイイ!!
0760デフォルトの名無しさんNGNG
カコワルイ
std::string(__FILE__) + __LINE__ + "HOGE(" + lexical_cast<string>(a) + ")" + lexical_cast<string>(b);
0761デフォルトの名無しさんNGNG
>>757
(・∀・)イイ!!
0762デフォルトの名無しさんNGNG
>>760を見てまたC++が俺の知らない間にトランスフォームしちまったのかと
焦った。Boostかあ、ちょっと見てみるかなあ。
0763デフォルトの名無しさんNGNG
>>760
それだけ見ると lexical_cast って、あまり使い勝手よいとは
思えないんだが、どういうインタフェースなの?
0764デフォルトの名無しさんNGNG
int a = lexical_cast<int>("100");
int b = lexical_cast<int>(a);
float c = lexical_cast<float>("1.234");
std::string d = lexical_cast<std::string>(a);

こんな感じで。
0765デフォルトの名無しさんNGNG
>>763
10行程度だからソース見れ。
http://www.boost.org/boost/lexical_cast.hpp
0766デフォルトの名無しさんNGNG

たとえは、"%04d"とか、書式使うには
int n = 10;
ostringstream os;
os << "id(" << setw(4) << setfill('0') << n;
ってやるしかないんじゃないの?
0767デフォルトの名無しさんNGNG
os.width(4);
os.fill('0');
0768デフォルトの名無しさんNGNG
スマタ。ostringstreamか
0769デフォルトの名無しさんNGNG
printfの方がいいな。
0770デフォルトの名無しさんNGNG
つまり、>>758の方法では、>>730のやりたい事を完全に置き換えられないmmじゃない?
0771デフォルトの名無しさんNGNG
os << setwidth(4) << setfill('0') << n;
0772デフォルトの名無しさんNGNG
STLも改訂してCの書式出力をサポートしてくんないかな・・
0773デフォルトの名無しさんNGNG
>>772
自作の道がある。
0774デフォルトの名無しさんNGNG
>>771は間違いですから無視してくださいスマソ。
0775デフォルトの名無しさんNGNG
>>756
STLport が STL コンテナで使ってる node allocator の仕様だ。

いやなら _STLP_MALLOC_ALLOC (だったかな? マニュアル参照してくれ)
あたりのマクロを定義すると、node allocator 使わずに malloc / free するよ
うになるから、その手のリークチェッカに引っかからなくなる。

ただし、致命的にパフォーマンスが落ちるから、リリースビルドでは標準の
アロケータを使った方が良いと思う。
0776デフォルトの名無しさんNGNG
やっぱり>>730の方法が一番シンプルで良いと思う
0777デフォルトの名無しさんNGNG
>>770
#include <iomanip>
して、771 のように
ErrorMessage() + "setw(4) + setfill('0') + n;
でいける。
0778デフォルトの名無しさんNGNG
そんなわけわからん記述してまで・・>730がシンプルでいいじゃん。
0779デフォルトの名無しさんNGNG
まあまあ、半分ネタと思いつつやってるんだから (w
で、オレとしては、setfmt みたいなマニピュレータを定義して、
os << setfmt("04d")
とかだったら、
os.width(4);
os.fill('0');
とやってくれるようなのを作ればいいんじゃないかと。
078016メロミックス ◆/ECTibn. NGNG
パンピーより質問です。

日韓翻訳掲示板を作りたいのですが、
協力してもらう事は可能でしょうか?
0781デフォルトの名無しさんNGNG
ここは技術板で、制作板じゃない
078216メロミックス ◆/ECTibn. NGNG
>>781
スマソ
0783デフォルトの名無しさんNGNG
exit();で終了するとメモリーリークが起きました。
exitの代わりになる物はないですか?
0784デフォルトの名無しさんNGNG
終了時のメモリリークは気にするな
リソースリークは気にしないとだめだが
0785デフォルトの名無しさんNGNG
>784
どうも。ってことは代替物はない?
メモリーリークはどうも気持ち悪くて・・
0786デフォルトの名無しさんNGNG
それを潰してもプログラムの性能も安定性もまったく向上しないと思うが...
0787デフォルトの名無しさんNGNG
windowsはリソースへっていかないの?
0788デフォルトの名無しさんNGNG
終了時の無駄な解法の分だけパフォーマンスが落ちるね
0789デフォルトの名無しさんNGNG
ちゃんと80-20の法則守れよな。
0790デフォルトの名無しさんNGNG
>789
なんすか?それ
0791デフォルトの名無しさんNGNG
>>790
お前知らないのか??
バカだな〜
0792デフォルトの名無しさんNGNG
どうでもいいよ。
0793デフォルトの名無しさんNGNG
>>791
おまえ知ってるっちうか実行してるのか?
バカだな〜
0794デフォルトの名無しさんNGNG
仕方ねえな教えてやるよ
80才まで20本の歯を保とうだぞ?
世間の常識だから覚えとけよ。
0795デフォルトの名無しさんNGNG
>>793
俺は0-100だ。
たとえ重要じゃないところでもみっともないコードは残せない
0796デフォルトの名無しさんNGNG
Windowsの場合プロセス終了してもメモリ解放してくれないんじゃなかったっけ?
0797デフォルトの名無しさんNGNG
>>795
えーと、あれだな。
たとえスライム一匹でもフルパワーを持って倒しに行くタイプ。
0798デフォルトの名無しさんNGNG
スライムが居るので議論が進みません。
0799デフォルトの名無しさんNGNG
0-100 ではないがスライムに対しては全力で挑む。
0800デフォルトの名無しさんNGNG
スライムはほっといてメモリーリークはどうしますか?
全部潰す派ですか?
0801デフォルトの名無しさんNGNG
>>796
んなこたぁない。
解放されないのはリソース。
0802デフォルトの名無しさんNGNG
リークが怖いヤシはassert入れるなよ
0803デフォルトの名無しさんNGNG
解放忘れさえしてなければリークは気にしない派。
0804デフォルトの名無しさんNGNG
win32ならリソースも解放されるよ・・・
0805デフォルトの名無しさんNGNG
じゃあ終了時のメモリリークはバグじゃないって事でいいですね?
0806デフォルトの名無しさんNGNG
>>804
9x系でDCにオブジェクトを選択したままプロセスが死ぬと
GDIリソースは解放されません。
0807デフォルトの名無しさんNGNG
>>806
「9x系で」ってことは、OSのバグってことでいいですね?
0808デフォルトの名無しさんNGNG
メモリリークは命がけで怪傑汁
0809デフォルトの名無しさんNGNG
>>807
バグじゃなくて仕様だって。
気に入らない動作=すべてバグ って厨房じゃないんだから。
0810デフォルトの名無しさんNGNG
全て仕様ってことで押し通す気ですね:-)
0811デフォルトの名無しさんNGNG
numeric_limits の max/min が関数になってるのは何故ですか?
0812デフォルトの名無しさんNGNG
浮動小数点型とかだと、is_bound というメンバが true じゃないと
max/min が裕子にならないから、みたいだよ。
0813811NGNG
>>812
その理由だと、 digits も関数になってるはず。
やっぱりわからん。
0814デフォルトの名無しさんNGNG
データメンバだと値を設定しないといけないじゃない
0815812NGNG
そうか、整数型以外はクラス定義での static const な変数の
初期化はできなかったね。
0816811NGNG
>>815
あー。それですな、きっと。理解しました。
ありがと。>>812,>>814
0817デフォルトの名無しさんNGNG
static でメンバ関数を宣言した時とそうでない場合の違いを教えてください。
static 関数で定義された関数を class :: 関数 で呼び出す時、
一時的にクラスは作成されるのか教えてください。
0818デフォルトの名無しさんNGNG
呼ばれるときにthisが漏れなく付いてくる(非static)か、
付いてこない(static)か。
0819プログラマ・ペレNGNG
>>817
C++ third editionを買ってください。
私ならそうします。
0820デフォルトの名無しさんNGNG
C++ は他のオブジェクト指向言語とは違い、動的にクラスを生成したり
することはできない。クラスはコンパイル時に静的に生成される。
0821817NGNG
>>818〜820
速レスさんくす
0822デフォルトの名無しさんNGNG
Javaも動的にクラスを生成できないが?
0823デフォルトの名無しさんNGNG
たしか BSF 使えばできるよ。
0824デフォルトの名無しさんNGNG
BSFって?
0825デフォルトの名無しさんNGNG
Binary Sex Fucking
(両性どちらとでもOKです)
0826 ◆JAPH9PWA NGNG
numeric_limits<>は全部関数だったらいいのに、と思ってしまうのは俺だけだろうか。
static constと入り混じってわかり難いよ…。
0827デフォルトの名無しさんNGNG
さっき発見したんだけど、C++ではifのなかで変数宣言できるんだね。
こりゃ便利。
0828デフォルトの名無しさんNGNG
>>827
式が書ける所ならどこでも宣言できる。
0829デフォルトの名無しさんNGNG
>>828
Test(class : public Base{}());とか出来ればいいのになぁ…。
0830デフォルトの名無しさんNGNG
C++ではポインタはあまり使わずに参照をしたほうが良いのですか?
0831デフォルトの名無しさんNGNG
>>830
場合による。
0832デフォルトの名無しさんNGNG
>>830
正直、勉強不足。
0833デフォルトの名無しさんNGNG
たかぎのMM (C++講座)
http://www.melonpan.net/melonpa/mag-detail.php?mag_id=000211
ここの人がそういってます。
C++の特徴を始めのほうで羅列しておりますがめちゃくちゃのような気がします。
ほとんど間違っていると思うのですがどうでしょうか?
0834デフォルトの名無しさんNGNG
↑このメールマガジンは参考になりますか?
0835デフォルトの名無しさんNGNG
>>827,828
でも、
if (int i = foo())
みたいに代入式しか書けないよね?
if ((int i = foo()) == 2)
みたいに条件判断も書けるといいんだけど。
0836デフォルトの名無しさんNGNG
プログラム言語で信じられるのはANSI/ISOとかのドキュメン
トと有名図書ぐらいでそれ以外の解説ははっきりいって役に
立たない。役に立たないどころか有害でさえある。
0837デフォルトの名無しさんNGNG
K&Rっていう遺物は有害だな。
0838デフォルトの名無しさんNGNG
cygwinのgccでc++プログラムコンパイルしたら
テンプレートの定義が見つからないのかなんなのかやたらエラーがでました。
設定に問題があるのかサポート外なのか。。どっちですか?
0839デフォルトの名無しさんNGNG
バージョンは?
0840デフォルトの名無しさんNGNG
すんません。
自分で書いててあれ?gccだっけ
と思いg++でやったらできますた。。
0841デフォルトの名無しさんNGNG
あのう 自分forにつかうiとかjも事前に、
int i,j;
というふうにしとるんですけども。
やっぱりだめどすかね。
すまあとじゃねえどすかいね。
0842デフォルトの名無しさんNGNG
変数のスコープは最小限にしませう。
0843デフォルトの名無しさんNGNG
for内でi宣言すると
forからでたら、i無くなっちゃうんどすか?

初心者でスマソ
0844デフォルトの名無しさんNGNG
>>843
最近はそのとおり。昔は違った。
0845843NGNG
844…あうーサンクスコですー
そうか最近は消えるのか…やっぱり年はとりたくないもんだなーって
それくらい実験すればわかったな…
なんでもきいてスマソ
0846デフォルトの名無しさんNGNG
いいんじゃない?相談室だし。
0847843NGNG
#include<iostream>
using namespace std;
int main()
{
for(int i=0;i<2;i++){
for(int i=3;i>0;i--){
cout <<"ahhhh\n";
}
}
}

あーうーほんとだーうごいたー なるー さんくすこ 
int j;がいらなくなった!
あれ?前段のiを後段で呼び出すのはどうすればいいんだ?
0848デフォルトの名無しさんNGNG
>>847
普通そんなこと考えない
0849843NGNG
848
ごもっとも!
0850848NGNG
俺は遊ばれたのですか?
0851843NGNG
いやー方法あるなら聞きたいと思っただけです
遊んでおりません。
なんか this.i みたいなかんじであるのかなと…
逝ってきます
0852デフォルトの名無しさんNGNG
>>851
this.i?
0853843NGNG
そんな夢のある方法を使えば
変数ひとつでプログラムがかけてしまう!とか何とか
思ったりしたと思われ…
0854デフォルトの名無しさんNGNG
>>853
環境依存、動作補償なし(九九表)
int main(){
for(int i=1;i<10;i++){
for(int i=1;i<10;i++)
std::cout << std::setw(2) << i* *(&i+1) << " " ;
std::cout << "\n" ;
}
}
0855デフォルトの名無しさんNGNG
せめてthis->iって書いて欲しかった。
0856843NGNG
>>852
変数のスコープも和歌ランぐらい初心者なので
ウル覚えですが…自分自身のクラスだったっけ???
グーぐる先生に聞きに逝ってきます
0857843NGNG
>>854
>エラー E2316 a.cpp 6: 'setw' は 'std' のメンバーではない(関数 main() )
しくしく63

>>855
そうでした スンマソン
0858デフォルトの名無しさんNGNG
VC6 との互換性を考えて

{ for(int i; i < 10; i++){} }

と書くけど、やっぱダサい!
0859デフォルトの名無しさんNGNG
>>857
#include <iomanip>
0860デフォルトの名無しさんNGNG
if(0)else forよりカコイイ
0861デフォルトの名無しさんNGNG
#define for if(0); else for
0862861NGNG
ぐあああ、俺だせぇ
0863843NGNG
>>858
VC6ではそうしないといけないのか…大変だな
>>859
隊長!動きました…けどやっぱりダメみたいですね。
結果は無残だった。
0864デフォルトの名無しさんNGNG
足して駄目なら引いてみるとか?
0865843NGNG
>>862
なるほどと思ったりなんかして…
#define for {for
あ、閉じる括弧は無理ジャン…
なるほどね
0866843NGNG
たした
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008
1245112 2490224 3735336 4980448 6225560 7470672 8715784 9960896 11206008

ひいた
256 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
2 4 6 8 10 12 14 16 18
0867854NGNG
いや別に試さんでも…
冗談だし。しかし866のメモリレイアウトはどうなっているのだろう。
0868843NGNG
あ、うまくいく場合もあるようですね
当然だが…
ポインタの差を求めてそれをたし元に戻すと…
ポインタの差が変わってて しょんぼりって…
これじゃ使えないジャンか!!
0869デフォルトの名無しさんNGNG
boostでGUIプログラミングは作れないんですか?
だとするとあんまり役に立たないような・・やっぱ
MFCで逝くしかないのか・・
0870デフォルトの名無しさんNGNG
べつに作れるんじゃないの?
0871843NGNG
-2 1 -2 2 -2 3 -2 4 -2 5 -2 6 -2 7 -2 8 -2 9
-2 2 -2 4 -2 6 -2 8 -2 10 -2 12 -2 14 -2 16 -2 18
-2 3 -2 6 -2 9 -2 12 -2 15 -2 18 -2 21 -2 24 -2 27
-2 4 -2 8 -2 12 -2 16 -2 20 -2 24 -2 28 -2 32 -2 36
-2 5 -2 10 -2 15 -2 20 -2 25 -2 30 -2 35 -2 40 -2 45
-2 6 -2 12 -2 18 -2 24 -2 30 -2 36 -2 42 -2 48 -2 54
-2 7 -2 14 -2 21 -2 28 -2 35 -2 42 -2 49 -2 56 -2 63
-2 8 -2 16 -2 24 -2 32 -2 40 -2 48 -2 56 -2 64 -2 72
-2 9 -2 18 -2 27 -2 36 -2 45 -2 54 -2 63 -2 72 -2 81

−2を無視すると動いているようには見える
0872デフォルトの名無しさんNGNG
クラステンプレートって
メンバ関数の実装も全部ヘッダファイルに書かないとダメ
なんでしょうか?
0873デフォルトの名無しさんNGNG
>>872
分けることもできるけど、
その分けた実装がコンパイルされるときに
明示的なインスタンス化をやっとかないと
リンクエラーになるよん
0874デフォルトの名無しさんNGNG
>873
ありがとうございました、なんとかうまくいきました
0875デフォルトの名無しさんNGNG
>for(int i=1;i<10;i++){
>for(int i=1;i<10;i++)
正直これは改悪だと思われ。

0876デフォルトの名無しさんNGNG
forやifの後に命令ひとつでも{}してしまいたくなる症候群なのですが
コンパイル時に実害はありますか?
0877デフォルトの名無しさんNGNG
>>876
最近のコンパイラはすごいです。
0878デフォルトの名無しさんNGNG
>>876
わしも
0879デフォルトの名無しさんNGNG
>>877
どうすごいの?
0880デフォルトの名無しさんNGNG
コンパイラvs{}
   ↓
コンパイラwin
0881デフォルトの名無しさんNGNG
>>879
脱いでもすごいです
0882デフォルトの名無しさんNGNG
なんか実害はなさげですかな?
コンパイラはそんなにあほではないのね。
>>878
やっぱりいるんだ。うれしいような
0883デフォルトの名無しさんNGNG
>>876
最近やめますた&1行だったらforの中に突っ込んですまいます。
0884デフォルトの名無しさんNGNG
>>876
いいと思う
if(i>=0) if(i>=1) if(i>=2) ;
else std::cout << i ;
こんなのあったら何がなんだか分からんし
0885デフォルトの名無しさんNGNG
そんな風にしちゃうのと、{} でくくらないのは別問題。
0886デフォルトの名無しさんNGNG
乗り遅れた。。
チィッ
0887デフォルトの名無しさんNGNG
メンバ関数内にstatic変数を使うくらいなら
その変数はメンバ変数にしてしまった方がいいのでしょうか?
0888デフォルトの名無しさんNGNG
>>887
意味的には×かと。
他からアクセスする気がない変数なら敢えてそうする必要はないかと。
0889デフォルトの名無しさんNGNG
>>887
時と場合によりけり。
その変数をほかの関数からつかう可能性があればメンバ変数。
ほかの関数からは絶対呼ばないようなときは関数内static。
ま、「変数のスコープは最小限に」っつーことです。
でもその変数がそのクラスにとって重要ならメンバ変数でもよい。
0890887NGNG
>>888-889
レスありがとうございます。

>時と場合によりけり。
とりあえず、迷ったらメンバ変数にする方向でいきます。
なんか、上司がstatic変数にブチギレしてたので。
本人曰く「staticアレルギー」らしいです…(藁?
0891デフォルトの名無しさんNGNG
マルチスレッドとかで痛い目にあったんだろうな。
0892デフォルトの名無しさんNGNG
つぅか出来る限りstaticを使わないと言うのが・・・
0893デフォルトの名無しさんNGNG
メンバ関数の中の静的変数ってそのクラスの全部のインスタンスから
参照されてしまうからね。メンバにするのとは意味が違ってくる。
0894デフォルトの名無しさんNGNG
staticにするかしないかで迷うことなんてある?
0895デフォルトの名無しさんNGNG
通常のメンバ関数とstaticメンバ関数の違いがいまだによくわからない。
0896デフォルトの名無しさんNGNG
>>895
staticメンバ関数なら
ClassName::function();
と呼べる。
0897 NGNG
>>895
staticメンバ関数なら、>>896 のようにインスタンスを作成せずに呼べる。
通常のメンバ関数だと、foo.function()のように
わざわざインスタンスを作成しなければならない。
0898デフォルトの名無しさんNGNG
あげ
0899デフォルトの名無しさんNGNG
all right.
0900デフォルトの名無しさんNGNG
>>896>>897
サンクス。
0901デフォルトの名無しさんNGNG
0902デフォルトの名無しさんNGNG
静的メンバ関数からは静的メンバ変数しかアクセスできない。
インスタンスがあろうと無かろうと。(無い場合を考慮すれば当然だが)
コールバックなんかには静的メンバ関数であれば渡すことができる。
0903デフォルトの名無しさんNGNG
C++でデータベースにアクセスするとしたらどんなライブラリが一般的ですか?
0904デフォルトの名無しさんNGNG
DBごとにアクセス用のライブラリが用意されてると思うけど
Win上ならODBC経由だろうねー
0905デフォルトの名無しさんNGNG
unixなら何でしょう??
0906デフォルトの名無しさんNGNG
標準は無いと思った。蛇足だけどJavaならJDBCだのー
つかスレ違いっぽいから他スレ行けよ。
0907デフォルトの名無しさんNGNG
そうすか。すんまそ。でわでわ
0908デフォルトの名無しさんNGNG
クラスの宣言をヘッダに定義をcppファイルに書いています。
ここでこのクラスのオブジェクトを操作するようなグローバルな関数
(例えばswap(class T, class T)みたいな)ですが
プロトタイプはヘッダ、実装はcppに書く、というのが一般的な記述ですか?
0909デフォルトの名無しさんNGNG
>>908
疑問点が明確でない。どゆこと?
0910デフォルトの名無しさんNGNG
つまり
このクラスを扱うグローバルな関数をこのクラスとセットで提供したいのです。
この場合関数をcppファイルに書いたのですが、プロトタイプはどこに書こうかなぁ、、と思いまして。
externキーワードつければcppファイルに書いても他のファイルから参照できるんでしたっけ??
0911デフォルトの名無しさんNGNG
>>908
もっとちゃんと句読点を入れて書けよ。

テンプレートを作りたいなら、全部丸ごとヘッダに書け。
そうじゃないなら、ヘッダには宣言だけを、*.c/*.cpp に定義を書け。
0912デフォルトの名無しさんNGNG
そのグローバル関数のプロトタイプを、クラスのヘッダに買いときゃ
いいんじゃないの?externつけるまでも無く
0913デフォルトの名無しさんNGNG
>912
そうですか。そうします。ありがとうございます。
0914デフォルトの名無しさんNGNG
関数はデフォルトでexternだから付けなくてもヨシ。
0915デフォルトの名無しさんNGNG
>>911
普通のクラスのメソッドの定義はヘッダじゃマズイっすか?
0916デフォルトの名無しさんNGNG
>>915
inlineじゃない場合、まずいんじゃない?リンク時にぶつかりそう
0917デフォルトの名無しさんNGNG
>>916
サンクス♪
0918デフォルトの名無しさんNGNG
MSDNより引用
>ローカル タイプを使ってテンプレート関数 (関数テンプレートから作る関数) を作ろうとしています。テンプレート>のインスタンス化では、外部リンケージを持つ型だけが使用できます。
>
>以下のコードではこのエラーが発生します。
>
>template<class T> class X{};
>
>void f()
>{
>struct Y{};
>
>X<Y> x; // エラー
>}

この制限は何のためにあるのですか?
0919デフォルトの名無しさんNGNG
C++仕様が"何の為"にあるかを知る本はD&EかARMのどちらかだ。

# ?(・∀・)? ソウダッケ?
0920デフォルトの名無しさんNGNG
プログラマの給料の為だろ
0921デフォルトの名無しさんNGNG
>>918
テンプレートのインスタンス生成は関数やクラスの外で行われるから。
(C++ 3rd, C.13.8.3)
これは仕様だが、なぜそういう仕様になっているかは知らない。
それを許すとあまりにもコンパイラを作るのが面倒になるからかなぁ?
0922デフォルトの名無しさんNGNG
bool Get() { return m_bBool; } を
bool * Get(){ return &m_bBool; } とやる利点を教えてください

0923デフォルトの名無しさんNGNG
VC++でお勉強がてらコンソールアプリ作っているんですけど
画面をクリアする方法はないのですか?
0924デフォルトの名無しさんNGNG
system("cls");
0925デフォルトの名無しさんNGNG
>>918
テンプレート使いまくったプログラムのマップファイルを見れば、
少しは納得がいくと思うよ。
0926デフォルトの名無しさんNGNG
>>924
サンクス、systemでdosコマンド呼ぶんですね。
0927デフォルトの名無しさんNGNG
>>922
あえていうなら
・レジスタに乗らないようなサイズならば、参照するのに効率がよい
 (でも普通はconst参照にするんでは)
・ポインタ経由で値を変更できる

boolじゃあんまり利点ないと思うけど...
0928デフォルトの名無しさんNGNG
>>924
cls なんて外部コマンドはねーよ。
0929デフォルトの名無しさんNGNG
>>927
> ・ポインタ経由で値を変更できる
そんなことするぐらいなら素直に m_bBool をパブリックにした方がいいと
思うぞ。
普通に考えたら、とても変なことなので >>922 はそういうことしてる奴に
真意を確認した方がいいよ。普通はやらない。と言うか、やっちゃいけな
い。
0930デフォルトの名無しさんNGNG
>>928
systemはshellを呼び出す関数で、shellの内部コマンドも使えるのを知らないのか
0931デフォルトの名無しさんNGNG
漏れはboolだったら、↓の様にするけど。。。

class Hoge{
  bool m_isChanged;
public :
  Hoge() : m_isChanged(false) {}

  IsChanged() { return m_isChanged; }
  SetChanged() { m_isChanged = true; }
  ClearChanged() { m_isChanged = false; }
};
0932デフォルトの名無しさんNGNG
931
bool変数をわざわざintで返すのですか?
0933931NGNG
型付け忘れてたよ。。。スマソ
0934デフォルトの名無しさんNGNG
C++ Cording Standard
http://homepage1.nifty.com/fujiwo/develop/xp/cplusstd.html

0935デフォルトの名無しさんNGNG
( ´∀`)69%モナー
0936デフォルトの名無しさんNGNG
あのー Win32 スレッド環境で質問なんですが・・。

仮想関数の中でオブジェクトの宣言の順番を変えたり、最適化したり(-Ox)
するとページ違反エラーが発生するので困っております。

次のように書くと A のデストラクト時に ページ違反 (ランタイム)
A a; B b; (-O3 でコンパイル) [シングルスレッドでは問題ないのですが・・]

エラーなし
A a; B b; (-O0 で OK)
B b; A a; (-O3 で OK)
{ A a; } B b; (-O3 で OK)

ちなみに A と B の継承関係は以下のような感じになっているのですが・・
C はオブジェクトの ID を変数に登録しているだけで、お互いは特に関係はありません
(A ← C), ( B ← E ← D ← C ) [ ← ... public 継承 ]

一日中さがしても原因がわからないのでこれはコンパイラのバグなんじゃないかと
思い始めているのですが・・バグのほかに何か考えられますでしょうか・・?

コンパイラは mingw + gcc 2.95.3-6 です
0937デフォルトの名無しさんNGNG
シングルスレッドで問題ないなら、
同期まわりのバグのほうを疑うべきじゃないのか?
0938デフォルトの名無しさんNGNG
どこかでメモリ破壊をしている。
具体的なソースを上げられないなら、手の施しようがないと思うが。
0939936NGNG
>>937,938
アドバイスに添って調べてみたら微妙なミスを発見しました。
解決できました。ありがとうございました!
0940デフォルトの名無しさんNGNG
windowsでdllとアプリの間に共通の自作クラスを使用する場合は
どこで宣言するのが吉?
vector <myClass *> classes
みたいなオブジェクトをdllとメインプロジェクトの間でやりとりしたくて
迷っています
0941デフォルトの名無しさんNGNG
宣言は必要なところすべて
インスタンスの作成は所有者
0942940NGNG
>941
そうですかやっぱりメインプロジェクトの方でも宣言しないとダメですかね。
どうもdllとlibの関係がわからない・・・
0943デフォルトの名無しさんNGNG
>>942
だめというか、そのクラスを使うところで
使いたい対象を知らなかったら使えないでしょ?
0944940NGNG
なるほどそういわれてみればそうですね。
VisualC使ってるのですが
別プロジェクトで平行してdllを作っているので
#include "../dllProj/***.h"
このようにして常に最新のdllヘッダをincludeするようにしました
これであとはlibとdllをdllProjの方から呼び出せればいいのですが・・
設定のところでincludeファイルにdllProjを含めてもうまくいかない・・・
0945デフォルトの名無しさんNGNG
boost のshared_ptrって普通に参照回数を数えているのとは違うらしい
んだけど、それは普通に参照回数を数えるのに比べて何がどう違って
いて、どうメリットがあるんでしょうか?
ドキュメント見たけど書いていないっぽいのでどなたか教えて頂けないでしょうか。
0946940NGNG
すみませんもう一つだけ質問させてください。

メインプロジェクトで
myclass *test;
init(test);
としてdllの方のinit関数で
test = new myclass
などすることは可能なのでしょうか?
どうもここがうまくいきません。
0947940NGNG
つまりdllの方で
動的にメモリ領域を確保してメインプロジェクトで使うことは可能かどうかということです
ちなみに
warning C4700: 値が割り当てられていないローカルな変数 'test' に対して参照が行われました。
という警告がでてはしまうのですが・・・・
0948デフォルトの名無しさんNGNG
>>940
メインで確保したメモリはメインで開放、
DLLで確保したメモリはDLLで開放する。
Windowsの力を借りれば、どっちで開放してもいいようにもできる。

その前に引数とはどういうものかを知れ。
0949デフォルトの名無しさんNGNG
>>945
use_count_ と weak_count_ を分けているので weak_ptr<> が作れるぞ、
ってゆーか、別に普通に数えているのと大差ないと思うけど。
0950デフォルトの名無しさんNGNG
つか、
myclass *test;
dll_init( &test );
  @dll
*test = new myclass
ダロ。ポインタわかってるか?
0951945NGNG
>>949
ほほぅ、そうなんですか。それってパフォーマンス下がるんですかねぇ、やっぱり。
サイズ大きくなりそうだし・・・
0952デフォルトの名無しさんNGNG
srand((unsigned)time(NULL));

この、unsigned っていうのはなんでしょうか?
C or C++自体初心者なので、頭についているのも理解できません。
0953デフォルトの名無しさんNGNG
>>951
局所的な、パフォーマンスが要求されるポインタには、scoped_ptrを使えって。
shared_ptrは、たとえばSingletonだったり、木構造だったり、
複数の参照元を管理するためにつかうもんだろ。
0954デフォルトの名無しさんNGNG
今、VC6.0で音声認識を行うランチャーを作っています。
Microsoft Speech SDK5.1をダウンして、付属の音声認識サンプルプログラムcoffees0
をコンパイルしようとするとcofgram.hが見つからずエラーが出てしまいます。
ハードディスク内を全検索かけても、googleで検索かけても何も見つかりませんでした。
confgram.hはどーすれば手に入りますか?よろしくお願いします。
0955名無しさん@カラアゲうまうまNGNG
>>954
まるち は しね
0956デフォルトの名無しさんNGNG
新スレいりますか?
0957デフォルトの名無しさんNGNG
いらないっつーに
0958デフォルトの名無しさんNGNG
保守あげ
0959デフォルトの名無しさんNGNG
勃てますた。ヨロスク。
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/
0960945=951NGNG
>>953
いやぁ、vector に突っ込む時とかの事を考えてのつもりです。
scoped_ptr は使えないっすよね。で、shared_ptr を増産すると
普通の counted_ptr(とでも言うのかな?)と比べて weak_count_
の分よろしくないかなぁと思っただけでして・・・
0961旧スレなのでsageでNGNG
>>960
カウントが2種類あるからと言って sizeof( shared_ptr<T> ) は増えたりはせんから、
同じオブジェクトを指す shared_ptr の増産なら問題は皆無だぞ、念のため。

1オブジェクトにつき4Byte程度…のメモリ消費が気になるなら
独自のカウンタを書いて intrusive_ptr<> を使うべきかと。
0962デフォルトの名無しさんNGNG
2つのカウンタをインクリメント・デクリメントするコストが無駄だというんじゃないの?
0963945=951=960NGNG
>>961
サイズの問題を考えるとすれば、そうです。つまり、
counted_base::use_count_ と counted_base::weak_count_
の二つを持つ shared_ptr は、フツーに count数を数えるようなの
と比べて weak_count_ の分大きくなるなぁという風に思っただけです。
あんまり weak_count のメリットを僕が分かってないせいもありますが、
「そんなのイラナイから余計なサイズ食わないで欲しいなぁ」
ってのが一つ。
それと、>>962 の言うように、「余計なカウントしなくていいのになぁ」
というのも一つ。

まぁぶっちゃけ「参照回数のみを数える余計な事はしない軽いsmart_ptrも欲
しいなぁ」とちょっと思ったっていうその程度です。なんかお騒がせしちゃっ
たみたいでスマソ

ちなみに intrusive_ptr なる物は始めて知りました。確かにありますねぇ。
ちょっと見てみます。
0964デフォルトの名無しさんNGNG
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0965デフォルトの名無しさんNGNG
















0966デフォルトの名無しさんNGNG







0967デフォルトの名無しさんNGNG



0968デフォルトの名無しさんNGNG
















0969デフォルトの名無しさんNGNG
埋め立て
0970デフォルトの名無しさんNGNG
埋め立て!!
0971デフォルトの名無しさんNGNG
埋め立て!!
埋め立て!!
0972デフォルトの名無しさんNGNG
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50



0973デフォルトの名無しさんNGNG
埋め立て
0974デフォルトの名無しさんNGNG
埋立て
0975デフォルトの名無しさんNGNG
埋立
0976デフォルトの名無しさんNGNG
埋め立て

C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0977デフォルトの名無しさんNGNG
埋立て

C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0978デフォルトの名無しさんNGNG
埋立

C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0979デフォルトの名無しさんNGNG
埋め立て
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0980デフォルトの名無しさんNGNG
埋立て
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0981デフォルトの名無しさんNGNG
埋立
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0982デフォルトの名無しさんNGNG
埋め立て


C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0983デフォルトの名無しさんNGNG
埋立


C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0984デフォルトの名無しさんNGNG
埋立て


C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0985デフォルトの名無しさんNGNG
埋立
0986デフォルトの名無しさんNGNG
埋
め
立
て
0987デフォルトの名無しさんNGNG
埋
立
て
0988デフォルトの名無しさんNGNG
埋
立
0989デフォルトの名無しさんNGNG
埋
め
立
て
!
!
0990デフォルトの名無しさんNGNG
埋め立て
め
立
て
0991デフォルトの名無しさんNGNG


0992デフォルトの名無しさんNGNG
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50

C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50

C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0993デフォルトの名無しさんNGNG
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50

C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0994デフォルトの名無しさんNGNG
u
m
e
t
a
t
e
0995デフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0996 ◆itdn3QI6 NGNG
1000!!
0997 ◆itdn3QI6 NGNG
1
0
0
0
0998 ◆itdn3QI6 NGNG
1000
GET



0999 ◆itdn3QI6 NGNG
999




1000 ◆itdn3QI6 NGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。