C++相談室 part8
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG0002デフォルトの名無しさん
NGNG0003v(^▽^)v
NGNGhttp://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デフォルトの名無しさん
NGNGGeneric 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デフォルトの名無しさん
NGNGVisualC++相談室 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デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG過去ログとか書き終わるまで、まてよ
0008v(^・^)v
NGNG0009shige
NGNG0010デフォルトの名無しさん
NGNG0011デフォルトの名無しさん
NGNG何で立てるんだよ?
0012デフォルトの名無しさん
NGNG俺の顔
0014デフォルトの名無しさん
NGNGお前が見なけりゃいいだけ
0015デフォルトの名無しさん
NGNGfstream系のコンストラクタってなんでワイド文字バージョンが
ないのだろう。変換が面倒くさい。
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGreject();
0019デフォルトの名無しさん
NGNG>>11->deallocate();
0020デフォルトの名無しさん
NGNG0021デフォルトの名無しさん
NGNG{
for (;;)
new >>11;
}
0022デフォルトの名無しさん
NGNG{
this->execute("マンキン.exe");
}
0023デフォルトの名無しさん
NGNGSyntax error
0024デフォルトの名無しさん
NGNGたしかに>>22はvoidが不要だった。コンストラクタのつもり。
オブジェクトを生成しようとすると、マンキン.exeが実行され、
HDDがあぼ〜んする。
0025デフォルトの名無しさん
NGNGLokiをリンクに入れるのならここもリンクに入れてくれ。
LokiをVC7に移植したLokiPort
http://www.geocities.com/rani_sharoni/LokiPort.html
0026デフォルトの名無しさん
NGNGvoid A(char **a,char **b){
*a="a";
*b="b";
}
main(){
char *a,*b;
A(&a,&b)
というように、2つの値を返したい関数があるのですが、
これを参照を使おうと思って、
void A(char &*a,char &*b)
としてみましたが、
エラー:参照型へのポインタあるいは参照は定義できない
と言われてしまいました。やりたいのは参照型へのポインタではなく、ポインタへの参照
だと思うんですけど、どう書いたらいいのか教えてください。
0027デフォルトの名無しさん
NGNG0028デフォルトの名無しさん
NGNGistream_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勘だが、その教科書の前のほうにそのファイルが定義されている
0031デフォルトの名無しさん
NGNG0032助けてください
NGNG0033デフォルトの名無しさん
NGNG先に近所を読む
0034助けてください
NGNG0035デフォルトの名無しさん
NGNG0036デフォルトの名無しさん
NGNGできました!
ありがとうございます。
0037デフォルトの名無しさん
NGNG0038助けてください
NGNG0039助けてください
NGNG0040デフォルトの名無しさん
NGNGファイル自作してエラーメッセージを見れば、あるいは内容を推測
出来るかも知れん。
0041デフォルトの名無しさん
NGNGディレクトリを探すってこと。たいてい標準的なのは<>で囲み、
自分たちがつくったファイルをインクルードするときは""で
囲む
0042デフォルトの名無しさん
NGNG0043助けてください
NGNG0044デフォルトの名無しさん
NGNGinput iteratorからcopyでは無理。素直にforループを書く。
と思う
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNGまだスレの初めだからいいだろう。
0047助けてください
NGNG#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{
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助けてください
NGNGwhile (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助けてください
NGNGfor(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助けてください
NGNGprintf("%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助けてください
NGNG0053デフォルトの名無しさん
NGNGイテレータとかのoperator->() は普通ポインタを返すようになってますが
なんでこれでメンバの参照ができるのですか?
そのまま単純に考えると
(イテレータ)->(メンバ名) は (Tのポインタ) (メンバ名) となるように思われ意味をなさないですよね。
Bjarneは
> p->m = 7; // (p.operator->())->m = 7
てますが、つまりoperator->()は特別扱いってこと?
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG0056デフォルトの名無しさん
NGNGぽいね。なんとかなりそうじゃん
0057デフォルトの名無しさん
NGNG0058助けてください
NGNG0059デフォルトの名無しさん
NGNG>void main(void)
ここだけでワラタ。
0060デフォルトの名無しさん
NGNG0061デフォルトの名無しさん
NGNGのかわりに
#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 ;}
とでもすればよい
006362
NGNG006461
NGNGすまん。
0065デフォルトの名無しさん
NGNG0066デフォルトの名無しさん
NGNG0067助けてください
NGNG0068デフォルトの名無しさん
NGNG0069デフォルトの名無しさん
NGNG0070助けてください
NGNG0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG中身についてはがんばってくれよ
0073デフォルトの名無しさん
NGNGここから先は宿題の範疇
0074助けてください
NGNGっていうかマジありがとうございました!
これで胸張ってあした免許の試験受けにいけます!
0075デフォルトの名無しさん
NGNGT_ENDの単位はわからないけど、いつか止まりそう。
0076デフォルトの名無しさん
NGNG0077助けてください
NGNG0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG#define T_END 10000.0 /*シミュレーションを終える時刻*/
好きにかえればいい。このままだと20000行
0080デフォルトの名無しさん
NGNGなんかいいひとっぽい。
0081助けてくださってありがとうございました
NGNGどうやったらそんなにCできるようになるんですか?
0082デフォルトの名無しさん
NGNG俺は大学4年だよ。Cをはじめたのは9年前だが。
0083デフォルトの名無しさん
NGNG試験があるならさっさと寝とけ
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/ ←>>81
(_フ彡 /
0084助けてくださってありがとうございました
NGNG0085デフォルトの名無しさん
NGNG(>>53).。oO(氏にたい…)
/ \
⌒| /⌒
ノ_ノ
0086デフォルトの名無しさん
NGNGイテレータがポインタを返すようになってるから、->演算子はメンバを返す
ように(通常の構造体のアロー演算子のように)オーバーロードされてる
だけの話では?
0087デフォルトの名無しさん
NGNG自分でスマートポインタ書いてみたらわかるんじゃない?
0088デフォルトの名無しさん
NGNGpublic:
void f(){
puts("A::f");
}
};
class B :public A{
public:
void f(){
puts("B");
A::f();// ここ
}
};
ここで、クラス名を指定せずに自動的に継承元のメンバ関数を呼ぶことはできないのでしょうか。
perlだとSUPER::を付けると検索してくれるんですけど。
0089デフォルトの名無しさん
NGNGauto
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多重継承が可能な言語では無理じゃないの?
0091デフォルトの名無しさん
NGNGreinterpret_cast
0092デフォルトの名無しさん
NGNGしかも呼び方が違う
0093デフォルトの名無しさん
NGNGoperator->()が返すの自体はポインタではないですか・・・
>>87
ただ単に保持しているポインタを返すだけで期待通り動くので何も新しいことは
わからなかったです・・・
0094デフォルトの名無しさん
NGNGそれから、xorは予約語じゃないぞ
0095デフォルトの名無しさん
NGNGあと
import
extends
implements
abstract
native
があります
009689
NGNGそうだった(..;)どうも
0097デフォルトの名無しさん
NGNGなかなかアグレッシブな人物だな。
009889
NGNG0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNGperlは多重継承を可能にするために@ISAが配列になってると思ってたんだけど。
0101デフォルトの名無しさん
NGNGorとかandはいいのですか・・・
0102デフォルトの名無しさん
NGNGなんか、要るのがなくて、要らんのがあるね
0103デフォルトの名無しさん
NGNGtry,catch もある。
0104デフォルトの名無しさん
NGNGbreak
0105デフォルトの名無しさん
NGNGhttp://www.kuzbass.ru/docs/isocpp/lex.html
0106デフォルトの名無しさん
NGNG0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNG0109デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNGつーか、プリプロセッサディレクティブもありなのか?
0112デフォルトの名無しさん
NGNGスキャナでも作る気?
0113デフォルトの名無しさん
NGNG0114デフォルトの名無しさん
NGNGそれ、ありそう。
0115デフォルトの名無しさん
NGNG0116デフォルトの名無しさん
NGNGなんて言うんでしたっけ?
検索キーワードが思いつかず、具体的な表記も分からないので検索のしようがないです
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG0119デフォルトの名無しさん
NGNG良くないと言われたんだけど、本当ですか?
なんでも、VC標準のSTLやSTLPortではCopy On Writeになっていないから、だそうで。
0120デフォルトの名無しさん
NGNGstring の値渡しは、const string& で渡す場合にくらべると、
百害あって一利なしって話だと思う。
あ、一利あった。
渡した先で const_cast されて、呼び出し元のデータが壊される危険性を回避できるな。
そんな理由で効率を落とす気には、普通は、ならんと思うけど。
0121デフォルトの名無しさん
NGNGVCのstringはリファレンスカウントしてるよ。
0122デフォルトの名無しさん
NGNGあったら教えてください
0124122
NGNG0125デフォルトの名無しさん
NGNGoperetor new, operator delete を自前で定義すれば、処理系に依らず GC を
使えるけど。BoehmGC とか。
(ただし最適化しすぎると、動作がおかしくなったりする)
0126デフォルトの名無しさん
NGNGポインタについて学び、使い方は分かったのですが、これを使う理由が
つかめません。どういった場面で必要になるのか、どなたか教えて下さい。
0127デフォルトの名無しさん
NGNG文字列の操作、リストの実装、グラフの実装など。
ほとんどの場面で有効。
0129デフォルトの名無しさん
NGNG誰もasmキーワードに触れなかったのは何故だろう(w
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNG規格書を引くと 2.11 Keywords に書いてあるよ。
0132デフォルトの名無しさん
NGNG何も考えてない>>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指定したノード以下の要素すべて列挙できる物が欲しいのですが。
0134デフォルトの名無しさん
NGNG0135132
NGNG以下のコードが、正常にコンパイルされることがわかった!
(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そんな興奮せんでも仕様に書いてあるがな。
An expression x->m is interpreted as (x.operator->())->m for a class object…
013853
NGNGというのが結局>>53の意図するところであったわけで・・・
漏れは「そうだよ」と言ってほしかっただけちゃうんかと・・・
ありがとう>>135・・・
ARMには>>136のように書いてあったようだね・・・
0139デフォルトの名無しさん
NGNGもしかしてホントにそうなの?
014053
NGNGTHE C++ PROGRAMMING LANGUAGE(=プロ言?)にあったのが
> p->m = 7; // (p.operator->())->m = 7
です・・・
0141デフォルトの名無しさん
NGNGこれ本当にフルネームで言うのが大変。何かいい呼び名つけようか。
0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNG0144デフォルトの名無しさん
NGNG0145デフォルトの名無しさん
NGNG著者から・・・K&R、GoF、Petzold
う〜ん、表紙は各国で違ってるし特徴ないし、著者の名前も呼びにくいし・・・
0146デフォルトの名無しさん
NGNG表紙の特徴から・・・東映
0147146
NGNG0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNG決定!
0150デフォルトの名無しさん
NGNGだからC++3edで十分。つーか既に古い。
0151デフォルトの名無しさん
NGNGDev-C++
http://www.bloodshed.net/dev/devcpp.html
0152デフォルトの名無しさん
NGNGgcc 3.x 系列、そろそろ安定した? 3.0.x の頃は、ちまちまとしたバグが出てた
みたいだけど。
(そろそろ乗り換え時か)
0153デフォルトの名無しさん
NGNGかなりいいみたいだよ。もっともDev-C++はまだβ版だけどね。
MinGWは実行ファイルのサイズが小さくて幸せ。
0154デフォルトの名無しさん
NGNGンなこたぁない
0155デフォルトの名無しさん
NGNGそ・・・・それは、、VCとかと比べるとあまり変わらンけど、BCよりは
小さいかなと。msvcrt使ってるから。
でも、gcc3.1になってから、実行ファイルのサイズが大きくなった
ようだし。。。取り敢えずサイズが小さいという言葉は取り下げます。
0156デフォルトの名無しさん
NGNGこのメッセージから始まっているスレッドで、
コンストラクタから例外を出さない方が良いとなっているんだけど
読んでもイマイチ理解できません。
class A {
char* buf;
public:
A():buf(new char[100]{}
~A(){delete buf;}
};
たとえばこんなクラスで、newが例外をthrowしても、
クラス構築失敗で問題無いと思うんですが。
0157初心者以前
NGNGつくったもの(exeファイル)をネット上で実行ってできるのでしょうか?
ダウンロードして、実行というものはみたことあるのですが
クリックして、ネット上で実行するものをみたことありません。
どうなのでしょうか
0158名無しさん@カラアゲうまうま
NGNGchar** all_line = new char*[n];
for(int i=0;i<n;i++)
all_line[i] = new char[100];
0159デフォルトの名無しさん
NGNG0160名無しさん@カラアゲうまうま
NGNGごめんまだ入門者だから勉強してないんだ
0161デフォルトの名無しさん
NGNG「ネット上で実行」の定義を述べて下さい。
0162デフォルトの名無しさん
NGNG多分だけど、CGIプログラムのことじゃないかな?
0163デフォルトの名無しさん
NGNGいいけど100文字が分かっているなら
char (*p)[100] = new char[n][100] ;
のほうがいいと思う
0164名無しさん@カラアゲうまうま
NGNGありがとうございました。
0165デフォルトの名無しさん
NGNGTerrariumとか「ネットで実行」にぴったしダネ
0166デフォルトの名無しさん
NGNG俺も頑張ろう...
0167デフォルトの名無しさん
NGNG0168デフォルトの名無しさん
NGNGallocator・・・・・・
0169166
NGNG0170デフォルトの名無しさん
NGNG(最終的にはOutputDebugString()で出力する)
これって、ガリガリ書くしか方法は無いのでしょうか?
なんかSTL辺りに含まれてそうな気がするのですが(継承して使うとか)...
又、ソースを公開されているページでも良いので、ご存知でしたらお教えください。
trace << "エラー 変数=" << tmp << endl;
みたいに出来ないでしょうか...
0171デフォルトの名無しさん
NGNGhttp://www.jah.ne.jp/~naoyuki/Writings/ExtIos.html
ふぉらよ。あとは自力でなんとかしな。(勝手に引用失礼)
>>166
漏れもやってるよ。気にすんな。
でもインターフェースが気に入らずに結局vectorも自作したがな。
オラ不毛って言えよ!
0172170
NGNGどうもありがとうございます。
0173デフォルトの名無しさん
NGNGている人のどこまでの個人情報を知る事ができるの?あっipから住所等の個人情報が解る
なんてこという低レベルの回答は無しね。っていうか、ここには低レベルな人はいないとはおもうけど。
0174デフォルトの名無しさん
NGNGWeb制作板にいけ。
0175デフォルトの名無しさん
NGNGその日にしたオナニーの回数や昨日食べた朝飯、
尻の使用回数などまでバッチリ分かりますが。
0176デフォルトの名無しさん
NGNGclass 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デフォルトの名無しさん
NGNG0178176
NGNGclass a {
private:
static int m_value;
public:
static int Get() { return m_value; };
};
int a::m_value = 0;
0179デフォルトの名無しさん
NGNGすみません、そっちにいきます
0180デフォルトの名無しさん
NGNGconstは関数の中などで軽く定数を持たせたいときに使う事でよいですか?
0181デフォルトの名無しさん
NGNGEffective C++を買って読もう。君の質問の回答はそこにある。
ついで、将来君が疑問に思うであろう問題の回答の3割ぐらいはそこにあるはずだ。
0183デフォルトの名無しさん
NGNGby effective C++
0185デフォルトの名無しさん
NGNG読み込んだのですが、Moreの方の評価はどんなもんでしょうか?
どちらかを購入したいのですが、間違いなく良書なれど既読の前者か、
立ち読みした感じ、ちょっと重箱の隅っぽい気がした未読の後者か…。
3800円を出せぬ貧乏人に、せめて知識をお与え下されば幸いです。
0186デフォルトの名無しさん
NGNGEffective C++, More Effective C++, Effective STL 三部作は、食費を削っても
買うべき。
0187デフォルトの名無しさん
NGNG0188185
NGNGスマートポインタや例外処理の解説くらいならとりあえずいいかな
…と思って他のですが、前作に劣らぬ良書なんですねぇ。レスサンクスです。
食費\400/dayか………………(;´Д`)つ�I アト380ニチ…
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNG俺の脳内で自動翻訳済みの物がある
0193デフォルトの名無しさん
NGNGGoF のデザパタ本で良いと思うが。後は 190 も挙げてるけど Modern C++ Desgin
が template 使ってデザパタしてる。
0194デフォルトの名無しさん
NGNG_φ(。。_) GoFは著者名でしたっけ。ミョウニチ本屋へ足を運んでみます。
ありがとうです。
0195デフォルトの名無しさん
NGNG+ C++sardで6冊か(w
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGInside the C++ Object Model も入れとく。コンパイラの内部動作について理解を
深めるのに最適。STL 使うなら Generic Programming - STL による汎用プログ
ラミングも必読。あとは C++ only の本ではないが Linkers & Loaders も読んで
おいて損はない。
>>196
あれも良い本だよな。OO がらみだと、デザパタ本に憂鬱本、それからリファク
タリングあたりか。
(とりあえず、こんなもんじゃない?)
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG『憂鬱なプログラマのための オブジェクト指向開発講座』
C++というよりはオブジェクト指向についての本だが。
わりと具体的に話を勧めていくので分かりやすい。
//しかし、必読書のレベルですらいくらかかるんだ?
0200デフォルトの名無しさん
NGNGこれらの本を理解しているかのテストをするセクションが欲しいね。
クリアしないと絶対にインストールできないの。
0202デフォルトの名無しさん
NGNG実際にやってみながら学ぶことができない罠。
0203デフォルトの名無しさん
NGNGネタにマジレスするのもなんだが、そりゃ辛すぎだわ。コンパイラで
実験してみないとわからん、みたいなこともあるんだし。
>>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『Generic Programming ―』は、体系的・抽象的に書かれているので、
ある程度 STL が分かってから読むべき本のように思う。でも、読んでおくと
視野が広がるし、思考の経済というか、他方面への応用も利くと思う。
『Inside the C++ Object Model』は、以前トッパンから訳書が出ていたんだが、
同社の出版事業撤退により絶版状態のようだ。C++ を究めたいという酔狂もの
には必読。
0205203
NGNG0206デフォルトの名無しさん
NGNG下記ソースをコンパイルすると
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デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNGテンプレート引数に依存した不明な型Bakaを引数にとった関数は
その特殊化よりも不明な引数の一致を優先して判断されているように
見受けられる。バグかな・・。
0209デフォルトの名無しさん
NGNGとりあえず gcc 2.95.3 でも Borland C++ Compiler 5.5.1 でもコンパイルエラー
になることは確認したけど。
0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNGするとC++として不正だって事?
なにがダメなんだろ・・・。
0212デフォルトの名無しさん
NGNGtypedef typename T::Baka Baka;
じゃない?
0213デフォルトの名無しさん
NGNGだめですた・・
0214デフォルトの名無しさん
NGNGCを一通りできるとして
C++を業務レベルまでマスターするには
どれくらいかかるんですか?
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNGtypedef T::Baka Baka;
の意味を考えたらよくわかるはず.
当然,class T ではすでに T::Baka が typedef されている必要がある訳で.
あとは >>212 のいうとおり,
typedef typename T::Baka Baka;
は必須の気が.
0217デフォルトの名無しさん
NGNGいや、結果は変わらないんですよ・・。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だ か ら
具体的にどんなインスタンス作ってるか教えれ
答えるのはそれからだ
0219デフォルトの名無しさん
NGNG宣言しただけ。
インスタンスは作らない状態でエラーが出ます。
0220デフォルトの名無しさん
NGNGVC6 だと何事もなく通るけど。
0221デフォルトの名無しさん
NGNG・・本当だ。
つまりVC7のヴァグってことでOK?
ゲイツ氏ね
0222デフォルトの名無しさん
NGNG・TにBakaを持っていないクラスを渡しているんじゃないか?
・VC6で通って、VC7で通らないことってあるの?
0223デフォルトの名無しさん
NGNG今試せないけどソースは上に上げたあれのみです。
typedef Aho<ほにゃらら>
もしてないし、ましてインスタンスの作成もしてないです。
0224デフォルトの名無しさん
NGNG基本クラスのポインタに派生クラスのオブジェクトをもたせている場合、
基本クラスのポインタをdeleteしただけでは派生クラスのデストラクタは
呼んでくれないのでしょうか?今書いているソースでそうなっていて
メモリリークを起こして困っているのですが・・・。
0225デフォルトの名無しさん
NGNG基底クラスのデストラクタを virtual にする必要があります。
0226デフォルトの名無しさん
NGNGあ、一応やってみています。当然ながらクラスと同名なので、デストラクタの
名前は変わってくるのですが、それでもオーバーライドしてくれるんですか?
やってみても呼んでくれてないようなんですが・・・
0227デフォルトの名無しさん
NGNG> 名前は変わってくるのですが、それでもオーバーライドしてくれるんですか?
もちろん。っつか、大抵の実装では名前なんか見てなくて vptr->vtbl に書き
込まれたポインタを参照するだけだし。
ダメだというそのプログラム、簡略化してテスト用のコードを張ってくれ。
0228デフォルトの名無しさん
NGNGちょっと今取り込んでいるので、もし良かったら夜に張るので
お願いできますか?
0229アポストロフィーS
NGNGJPEG画像を縮小して保存するプログラムを作りたいんですが、自分でバイナリ読み取ってピクセル圧縮して色とかも平均出して・・・とかってやらないと駄目でしょうか。
かなり大変そうなんですが・・・ なんか簡単にできるライブラリとかありませんか?
0230廻し者
NGNGIntel Image Libary と Intel JPEG Library なんか使ってみては
どうでしょうか。
ttp://www.intel.com/software/products/perflib/
0231デフォルトの名無しさん
NGNGパパこれを探すのに5000ファイルくらい調べちゃったよ
0232デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNG単なる手前のボケでした。平身低頭、申し訳ありません。
一応顛末を書いておくと、基底クラスや派生クラスが親子構造で混在するような
システムを作っていて、deleteする時はデストラクタで子供を次々deleteしていく
ようにして、一変に消せるようにしていたのですが、条件判定に変なものを使って
失敗していたようです。お騒がせしました。
直したら立派に呼んでくれて安心しました。
0234デフォルトの名無しさん
NGNGlocate ios_base で一発じゃないのか?
0235234
NGNGlocate '*/ios'
とでもしてくれ。
0236デフォルトの名無しさん
NGNGどうもです。しかし・・・英語がむずい・・・;
なんか無理そうだ・・・とりあえず落としてみます。
0237229
NGNG0238デフォルトの名無しさん
NGNG0239
NGNGできますか?
むりなら代わりとなる方法を教えてください
0240デフォルトの名無しさん
NGNG0241デフォルトの名無しさん
NGNGvoid A::foo(int array[], int count)
{
for (int i = 0; i < count; i++) cout << array[i];
}
で何か不満でも?
0242デフォルトの名無しさん
NGNGの N を変数にしたいってことなのかな。飛躍し過ぎ?
0243デフォルトの名無しさん
NGNGvector
0244デフォルトの名無しさん
NGNGvoid A::foo(vector<int> ints)
{
for (vector<int>::iterator i = ints.begin(); i != ints.end(); ++i) {
hanatanhalahala(i);
}
}
0245デフォルトの名無しさん
NGNGchar a[256];
f(a);
0246デフォルトの名無しさん
NGNG動的なサイズ変更に対応できないのでアウト
0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG配列は動的ではない
0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNGスレ違いを指摘するんなら、もっとスレ違いらしさを出したコードにしとけよ。
void A::foo(vector<int>& ints)
{
for_each(ints.begin(),ints.end(),hanatanhalahala);
}
0252デフォルトの名無しさん
NGNG0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNGへぇ〜。面白いね。配列渡しは通らないけども
#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デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNG{
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高いからじゃないの?
0265デフォルトの名無しさん
NGNGこうやったら「曖昧」と叱られたよ。
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
NGNG0267263
NGNGvoid 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わからなかったので、もう少し易しいtemplateテクニックを満載した本を
誰か出版して欲しい。
0269デフォルトの名無しさん
NGNGそーゆー路線だと、結城さんあたりかねぇ。
0270デフォルトの名無しさん
NGNG式の評価ではchar*になってこちらが優先されるようだ。
ためしにf(&x)とすれば配列バージョンが呼ばれる
0271デフォルトの名無しさん
NGNGC Magazineに寄稿している人だよね?ホームページを見てみたんだが、
C++関連の内容はまだうpしてないようだ。
0272デフォルトの名無しさん
NGNG本当だね。この実行結果は実に興味深い。
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プログラム側に何を期待するかによる。
スタンドアロンの VB 出すまでもなく Access VBA や Web がらみだと VBScript で
間に合うことも多いし、逆に VC でなければやっとれん、という事もある。
0275274
NGNG0276デフォルトの名無しさん
NGNGうちの会社の基幹業務はAccessのVBAでやっとるよ。
最初のうちはスイスイ動いていたが、最近データの量が肥大して、
検索にだんだんと時間がかかるようになってきた。この先不安。
0278278
NGNG呼ぶことにする。コマンドライン指定されたC++のソース
ファイルを読み込みながら、単語ごとにその出現回数を
カウントしておく。すべての単語が読み込み終わったら、
まずアルファベット順に単語とその出現回数を表示し、
その後、出現回数の多い順に単語を表示するようなプロ
グラムを作成せよ。
ただし、単語にはアルファベットの大文字や小文字が
混じっていてもよいものとし、その場合大文字小文字の
区別なく、アルファベット順になるようにせよ。
また、ソートする部分については、この問題に合うソ
ート用の関数を独立させて作ること。ソートの方法は何
でもよいものとする。
-----<
わかります?
0279デフォルトの名無しさん
NGNG宿題スレ逝け
0280デフォルトの名無しさん
NGNGわかります。
0281デフォルトの名無しさん
NGNG0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNGスタンダードアイオーでもイオストリームでもいいんだが、リファレンスっちゅうのはどこにあるんですか?
0284デフォルトの名無しさん
NGNGオレモマダマダダダシノウ...(-_-)
0285デフォルトの名無しさん
NGNGFILE*&
std::iostream&
0286よっし〜
NGNG3DSMAXのプラグインSDKの仕様が、コンパイラのバージョンを指定しているけど、
そのバージョンを持っていないので、C言語でクラスのレイアウトに何とか整合してやって、
リンク可能な状態に持っていけないかなぁって・・・
0287デフォルトの名無しさん
NGNG0288よっし〜
NGNGえっ? コンストラクタとデストラクタ駄目ですか?
基底クラスのデストラクタがvirtual宣言されてマス。
0289デフォルトの名無しさん
NGNG派生(自作)クラスのデストラクタは呼ばれない。
それから、思いっきり実装依存になるよ。
CでCOMクラスを実装するのと同じ方法でやる。
0290デフォルトの名無しさん
NGNG・・・・
わかってるってば!
0291デフォルトの名無しさん
NGNG(...・.・.) ?
0292デフォルトの名無しさん
NGNG0293デフォルトの名無しさん
NGNG(...・.・.) ?
0294デフォルトの名無しさん
NGNGバージョン指定があるってことは、クラス名の mangling があってないと
ダメってことではないの?
0295よっし〜
NGNGそれは致し方無い事です。そもそも「3DSMAXのプラグイン」という事自体が実装依存なので。
> 派生(自作)クラスのデストラクタは呼ばれない。
これが問題だなー。でもなんで呼ばれないんだろう?
実装依存で、むちゃくちゃやって、何でも出来そうな気がするのだけど・・・
デストラクタが呼ばれるしくみが良く解ってないカモ
> クラス名の mangling があってないと
これも実装依存で、何とか実現できないものでしょうか?
ふむー。そもそもVCって、CとC++を区別しちゃってて、CからC++のクラスにアクセスするのって無理なのかなぁ?
0297デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNG(゚o゚)<持ってなくて悪かったなハゲー
(ー)ー
))
0299デフォルトの名無しさん
NGNGclass 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デフォルトの名無しさん
NGNG0301あきら
NGNG0302デフォルトの名無しさん
NGNGすみません。うつし間違えました。仰せのとおり;がpの後ろに必要です。
0303あきら
NGNG0304ゆたか
NGNGまったくわかりません。誰か作っていただけませんか?
0305デフォルトの名無しさん
NGNG0306デフォルトの名無しさん
NGNGはい、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コンストラクタでの処理がおかしいと予想。
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNGassignでなにがしたかったんだ?
0310デフォルトの名無しさん
NGNGすみません。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コンストラクタは
A(){
x=0;
y=0;
p=0;
}
となっています。
0312デフォルトの名無しさん
NGNGpublic:
& 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今いろいろやっていて気づきました。
a.resize(10)
だったら大丈夫なのですが
a.resize(100)だと落ちます。
メモリは192MB積んでいるのでメモリが足りないはずはないのですが・・・
タスクマネージャで調べても利用可能領域は40000KBありました。
0314デフォルトの名無しさん
NGNG0315デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNG3でした。
0318デフォルトの名無しさん
NGNGした方がよい。
0319デフォルトの名無しさん
NGNGaという変数が別ファイルなりで別の型として宣言されてたりしないかな
0320デフォルトの名無しさん
NGNG0321デフォルトの名無しさん
NGNGclass 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デフォルトの名無しさん
NGNG0324デフォルトの名無しさん
NGNGクラスの便利さがわかりません。
どなたか噛み砕いて教えてください
0325デフォルトの名無しさん
NGNG・メンバを非公開にできる。
・メンバ関数を持てる。
・継承が使える。
・仮想関数を使ってポリモーフィズムが実現できる。
などなど。
0326デフォルトの名無しさん
NGNG0327324
NGNGなんか構造体と違いがあまりわかりませぬ(´・ω・`)
0328デフォルトの名無しさん
NGNG0329デフォルトの名無しさん
NGNG>>326サソも言っておられるが、こればかりは口で説明してもなかなか
わかってもらえますまい。
簡単なクラスとそれを使ったサンプルをいくつか作ってみれば自然に
理解できるよ。
0330324
NGNG今の仕事で、作ってます。
クラスだけえんえんと…
実際業務でクラスなんか作っても
使う部分の作業に当たらせてもらえません。
そこで、こんな仕様のプログラムでここを
クラスにするとクラスのありがたみがわかる!!
なんて、仕様書どなたかもっていませんか?
皆様レスアリガトウございます
0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNGすごく「例えば」の話になるけど、リスト構造を扱う時、ポインタの付け替えを
すべてメンバ関数に任せればよいようになる。
あまりキチキチに非公開にしてしまうと効率が落ちることがあるが、バグは
どんどん出にくくなる。
0334デフォルトの名無しさん
NGNG関係ないかもしれないがMapDataにコピーコンストラクタを自分で作っても同じ?
vectorはresizeとかのときコピーコンストラクタよんでるとおもうけど。
0335324
NGNG確かにクラスの中だったらメモリは消えないですからね。
ポインタを頭に入れてみると確かに便利かもしれませんね。。。
0336デフォルトの名無しさん
NGNGんー、そうですね、クラスの中だからメモリが消えないというより、
リスト構造の細かいちまちまとした部分まで見ずに済むようになり、
プログラムの設計に専念できるようになると言ったらいいかな?
その代わり今までみたいに構造体のポインタを持って関数を
コールして操作するということはしなくなる(やろうと思えばいくら
でもできるが敢えてしない)ので、カナーリ感覚が違うんですよ。
0337デフォルトの名無しさん
NGNG連結や比較なんかは演算子で出来るし、バッファのことは何も考えなくても
よきにはからってくれる。
0338デフォルトの名無しさん
NGNGWidth と Height に値を、resize に渡す前に確認してみたらどうか?
0339デフォルトの名無しさん
NGNG#include <new>
int new_nh(size_t)
{
throw std::bad_alloc();
return 0;
}
_set_new_handler(new_nh);
これをプログラムエントリで実行して、例外を投げるようにしてみな。
vector<>内でメモリが確保できないと、通常はリカバリできないけど
例外を投げるとどうなっているかが分かる。
0340デフォルトの名無しさん
NGNG_com_dispatch_raw_propget(IDispatch*, DISPID, VARTYPE, void*) throw();
このように関数のプロトタイプ宣言に throw() と書いてあるものがありますが
これはどういう効果があるのですか?
この関数が呼ばれた瞬間に例外をスローするのですか?
0341デフォルトの名無しさん
NGNG逆です。この関数は例外を投げないという意味です。
0342デフォルトの名無しさん
NGNG#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デフォルトの名無しさん
NGNG0344デフォルトの名無しさん
NGNG0345デフォルトの名無しさん
NGNG関数を呼ぶだけじゃないの?
0346344
NGNG関数呼びたくないの。
その関数内でしか持ってない、必要な変数多いし。
0347デフォルトの名無しさん
NGNGDQNですか?
0348デフォルトの名無しさん
NGNG0350デフォルトの名無しさん
NGNGcatch(std::bad_alloc&)で捕まえてみて。
0351デフォルトの名無しさん
NGNGインラインアセンブラで入り口と出口を作って、その間にサブルーチンを書く。
0352デフォルトの名無しさん
NGNG必要な変数はクラスにまとめておいて、
引数を少なくしたメソッド呼び出しにするのがC++流。
つか、gotoか。
0353344
NGNGとりあえず351の方法使うです。
(俺も無作法だとは思うんだけど。)
あともう一つだけ。
デバッグウィンドウに数字を表示したい時ってどうしてるの?
0354デフォルトの名無しさん
NGNG関数呼び出しはVBのGoSubより何倍も早いから気にするな。
どうしても気になるならインライン関数にするなりご自由に。
>秒間何万回も使うからオーバーヘッドが大きいってのもあるんよ。
なんかムカつく言い方だな。
そんなに速度が気になるんじゃアセンブラで最適化しろ
0355デフォルトの名無しさん
NGNGC++にそんなもんねーぞ
0356デフォルトの名無しさん
NGNGBCB厨のDQNに認定
0357356
NGNGBCB厨だからDQNなんじゃないぞ、
そんなことDQNだと言うんだ
0358デフォルトの名無しさん
NGNG0359デフォルトの名無しさん
NGNGでしょう。
要件があるなら、それを列挙した上で質問すべき。無条件で質問しておいて、
出てきた方法に対して煽りを返すのは、
細かいことは書かなくても、
みんな超能力者だから、
俺のことは分かってるはずだ
という思い込みがあるから。
>>349
場合によっては inline 関数が使えるかもな。ただし、ゲーム作ろうとしてる
ならムダだぞ。
0360デフォルトの名無しさん
NGNGこれどこ?
0361デフォルトの名無しさん
NGNGまたハンドルされていない例外になってしまいました。
ためしにvector < vector<double> > data2;
data2.resize(100)でやってみても、やはり同じように落ちました。
0362デフォルトの名無しさん
NGNG349
0363デフォルトの名無しさん
NGNG>>346
煽り返してるとまでは思わないが
0364デフォルトの名無しさん
NGNGいま、Releaseでビルドすると落ちませんでした。Debugだと落ちます。なぜでしょう?
0365デフォルトの名無しさん
NGNG一応、俺も馬路レス。
関数呼び出し自体より、変数を引き渡す方を考慮しているものと思われ
10個とか引数あったらさすがに差が出る。
0366デフォルトの名無しさん
NGNGサブルーチンは呼ばれる回数が多いので変数を一個一個渡すのはイヤ。
と彼は質問すればよかったのかな?
こういう場合はやっぱ>>352か強引に>>351のようにするのかな。
0367デフォルトの名無しさん
NGNG下のソースで落ちる?
#include <vector>
#include <iostream>
main()
{
std::vector< std::vector<double> > data;
data.resize(100);
}
0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNGむしろ推奨。
0371デフォルトの名無しさん
NGNG構造体名が付くのがうざいけど仕方ないか。
0372344
NGNGgotoがあるならgosubもあるかな、と思ってたから。
なんか荒らしたみたいでスマソ。
0373デフォルトの名無しさん
NGNGダメ。const参照で渡せ
0374デフォルトの名無しさん
NGNGそれだけのソースなら落ちません。
0375デフォルトの名無しさん
NGNGソース全部上げられるか?
たぶん余所でメモリ壊してるんだと思う
0376デフォルトの名無しさん
NGNG0377デフォルトの名無しさん
NGNG前にこれで関係のないところのメモリ壊されてハマった記憶あり。
0378デフォルトの名無しさん
NGNG定義してみたら落ちませんでした。これは、なぜですか?
0380デフォルトの名無しさん
NGNGなるほど。おかげで助かりました。どうもありがとうございました。
0381デフォルトの名無しさん
NGNG別に荒らしだとは思わなかったけど、
見事に定番通りのDQNぶりが見ていて微笑ましかった。
いつか「あのときあんな恥ずかしい書き込みしちゃった…」って思えるくらいに
スキルが上がるといいね。
0382デフォルトの名無しさん
NGNG0383デフォルトの名無しさん
NGNGregexのビルドって
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デフォルトの名無しさん
NGNG0385デフォルトの名無しさん
NGNGレスどうもです。#pragmaでリンクされるのは後者なので、
bjamで生成した物は不要だから破棄しても良いということですか?
0386_
NGNGclass 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デフォルトの名無しさん
NGNGCはIAやIBをインプリメントしているので、ちゃんとポインタで
受けられる。
0388デフォルトの名無しさん
NGNGvoid*から直接キャストした物だと
class D : public IB{};と区別が出来ないからしょうがない。
0389_
NGNGでも、多重継承って思ったより強力ですね。ちょっとC++見直しまひた。
(って強力すぎるから問題がでるのか・・・)
0390デフォルトの名無しさん
NGNG気になるならとっとけば?
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デフォルトの名無しさん
NGNGhttp://pc.2ch.net/tech/kako/996/996640937.html
0393デフォルトの名無しさん
NGNGGood Job!!
0394デフォルトの名無しさん
NGNGhttp://www.bloodshed.net/dev/devcpp.html
0395
NGNGvoid main(void)
{
static char *b[]={"Akira", "Mitsuo", "Chiaki"};
b[1][1]='d';
*(*(b+1)+1)='g';
cout << b[1][1]<<endl;
}
これをコンパイルすると
〜〜の命令が〜〜を参照しましたが、メモリが"written"になることはできませんでした。
ってエラーが出るのですがなぜでしょう?
0396デフォルトの名無しさん
NGNGとやるのと同じ問題では。
0397
NGNG型が違うということですか???
0398デフォルトの名無しさん
NGNG「文字列リテラルの値を変更している場合、その動作は未定義」
であることが規定されてゐます。
0399デフォルトの名無しさん
NGNGスタティックライブラリを作っているんですが、
これのヘッダとLIBファイルのみでインライン展開をさせることは出来るんでしょうか?
やっぱりソースもないと駄目ですか?
0400デフォルトの名無しさん
NGNG.hファイルに実装を書く、ということになります。
libファイルは基本的に全く関係有りません。
答えは「これのヘッダ」が何を意味するかによりますが
その後の「ソースもないと」をみると、"駄目です"と
いうのが正解でしょう。
0401デフォルトの名無しさん
NGNGそうですか。
わかりました、ありがとうございました。
0402
NGNGなるほど、、、そうでしたかよくわかりませんが調べてみます
ありがとうございました
0403デフォルトの名無しさん
NGNGつまり
char*p="ABC";みたいなのはプログラマがいじっちゃいけない
ところに文字列"ABC"が用意されてそのアドレスがpにセットされるので
参照する分には良いの。でも書き換えるとダメなの。
書き換えたいなら変数として領域を確保する必要があるの。
つまり
char str[10]="ABC";みたいな。
あるいは
char str[10];
strcpy(str, "ABC");
とか
0404デフォルトの名無しさん
NGNG未定義にするくらいなら禁止しちゃえばいいのに
0405デフォルトの名無しさん
NGNG0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNGって言うかアクセスできないメンバあるのか?
0408デフォルトの名無しさん
NGNGたとえばコンストラクタで所有者のアドレスを受け取るメンバがあったとして
ClassName() : member( this ){}
とかやると怒られる
漏れもなんでなのかよく分からん・・・
0409デフォルトの名無しさん
NGNGClass *member;
public:
Class(): member(this) {}
};
問題ないけど
0410
NGNGご親切にどうもありがとうございます
つまりポインタの宣言だけでは配列を確保していないってことですね
0411デフォルトの名無しさん
NGNG違う。「リテラル」ってのが何なのか理解しなさい。
0412デフォルトの名無しさん
NGNGVC++では出るけど、この警告はM$の言語拡張らしい?
言語拡張をオフにすると出なくなる(この警告の警告レベルが下がる)
thisの中身が初期化されてないからとりあえず警告出しとくよって感じかと
thisの値(アドレス)自体は別段問題無いと思われ
0413デフォルトの名無しさん
NGNG言葉のあやじゃないかな・・>配列を確保していない
char *p="ABC";
char str[]="ABC";
の差に気が付けばいいのでは?
0414デフォルトの名無しさん
NGNG元々は>>395、つまり文字列リテラルを書き換えようとしてのエラーで、>410はその理由をわかってないってこと
0416
NGNGリテラルの意味さっき調べて知ったもので、、、
0417デフォルトの名無しさん
NGNGchar *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どうもありがとうございます
わかりました
0419デフォルトの名無しさん
NGNG今、エディットボックス3つと四則演算ボタンを配置しただけの簡単な電卓を作ろうとしていて、
�@ed1と2に値を入力
�A「+」とか「-」とかを押す
�Bed3に答え(浮動小数点型)が表示
という風にしたいのですが、
出だしはCString ssでは駄目なのかとか、
またm_ed1を1項、2を2項と定義付けるにはどう記述するのかからして分りません。
ヘルプや言語リファレンス本で調べてもいまいち・・(あまりに初歩だから載ってない?)。
学校の一室にしかソフトが入ってないので(自前で買うには高い)直接いじれる日時が限られてるし・・どなたか教えて頂けないでしょうか。
0420デフォルトの名無しさん
NGNGそれはVC++かな?
0421デフォルトの名無しさん
NGNG>>4
0422デフォルトの名無しさん
NGNG0423デフォルトの名無しさん
NGNG>420 はい、VC++の6.0です。
>421 さっき一通り読んだけどやっぱりわかりません(汗
でもある程度まではテンプレートが用意されてるのを知ったのは収穫でした。
明日は半日使えるけど、ヘルプでtemplateから検索していけば辿り着けるだろうか。
0424419
NGNG0425デフォルトの名無しさん
NGNG0426デフォルトの名無しさん
NGNGテンプレートなんか使わなくてもできるよ。
ま、専用スレで聞いてくれ。
0427419
NGNG0428デフォルトの名無しさん
NGNG0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNGstdで囲ってないだけで<iostream>とおんなじなケースと、
両方あるんじゃない?環境によって
0435デフォルトの名無しさん
NGNGただしCライブラリについて、
The ".h" headers dump all their names into the global namespace,
と決まっていることや、古い(namespaceをサポートしない)C++との
互換性から、c++ライブラリについてもそのようにする処理系がある。
0436デフォルトの名無しさん
NGNGtry{}の中でローカル変数をnewした後でthrowした場合、
そのローカル変数はどうなってしまうのですか?
リークになってしまうのですか?
あと、自分でいろいろ関数っを作ってるんですが、catch{}の中に書くことが無くて
例外が起きたら、レポートを作ってシステムにthrowして強制終了させるぐらいにしか
使えません。これって普通ですか?
皆さんはそんなことはないですか?
0437デフォルトの名無しさん
NGNGスタックの巻き戻しの際にデストラクタが呼ばれるから、デストラクタ
を正しく定義しておけばリークしないんじゃない?
0438デフォルトの名無しさん
NGNG>ローカル変数をnewした
意味不明。
0439デフォルトの名無しさん
NGNGauto_ptr
0440デフォルトの名無しさん
NGNGtry{}スコープの中でヒープを確保した場合(LPDWORD a = new DWORDとか)です。
chach{}はスコープが違うので解放出来ません。
マニュアルにはスタックフレームを巻き戻してautoオブジェクトを破棄するとしか
書いていません。
>>436の言うようにauto_ptrを使うか、try{}スコープ外で宣言するしかないのですか?
0441デフォルトの名無しさん
NGNG例外に関しては、Exceptional C++を読むべし。
例外の正しい取り扱いは、君が想像しているよりも、はるかに難しい。
>auto_ptrを使うか、try{}スコープ外で宣言するしかないのですか
そのとおり。auto_ptr使用がお勧め。というか、例外を使い出したら、
「自前でdeleteは書かない」ことを目標にしとかないと失敗するぞ。
0442デフォルトの名無しさん
NGNGstruct 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> 例外の正しい取り扱いは、君が想像しているよりも、はるかに難しい。
オレも痛感いたしますた。
Exceptional は読んどくべきだけど、読んですぐ身になるほど易しい問題じゃないね・・・
0444デフォルトの名無しさん
NGNGメンバ関数の実装はcppに書くのが普通ですか?
0445デフォルトの名無しさん
NGNGtemplate<typename T>
struct S {
typedef typename T U;
};
が正解だったと思う。使ったことないんで、記憶に自信がないけど。
>>444
1.君の言う「クラスの定義」は、正しくは「クラスの宣言」。
2.君の言う「メンバ関数の実装」は、正しくは「クラスの定義」。
用語を思いっきり間違えて使っているけど、1をヘッダに、
2をcppファイルに書くのは、普通。それはあってる。
0446デフォルトの名無しさん
NGNGどうもです。
0447デフォルトの名無しさん
NGNGしかも、それを当たり前とすら思う罠
0448デフォルトの名無しさん
NGNG0449436
NGNGわかりました。そうします。
ありがとうございました。
0450デフォルトの名無しさん
NGNGヘタレ環境だとコンパイルに時間がかかったり
リンク後のサイズが大きくなったりするのかな?
0451デフォルトの名無しさん
NGNG何のために #include があるのか、勉強しなおせ。
0452デフォルトの名無しさん
NGNG0454デフォルトの名無しさん
NGNG漏れ同じくらいかも・・・・
0455デフォルトの名無しさん
NGNGはぁ ?
0456デフォルトの名無しさん
NGNGtypedef typename S<T>::U U;
かなあ
0457デフォルトの名無しさん
NGNG確かにね。
OBJファイルも生のバイドコードじゃなくて
中間コードみたいなのを生成するようにして、
ヘッダとLIBで、テンプレートやインライン展開が可能になればいいのに。
0458442
NGNGありがとうございます。
それは考えたのですが、実際のクラスでは継承が芋ヅル式に
続いています。
これでは全てのクラスに書くことになってしまうので、
避けたいのです。
0459デフォルトの名無しさん
NGNG取りあえずデザインパターンの本読んで目から鱗を落とすことを推奨。
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNG確かに、全面的に同意する気はないけどね。
でも、ああいうやり方もあるんだと。どこかでうまく使えば便利だなと。
中小クラスを継承して後からメソッドを実装するなんて当たり前のことにも名前付いてて少しワラタ。
0462デフォルトの名無しさん
NGNGクラスの「宣言」と「定義」って、そんなに明確にわかれてましたっけ?
class T { ... };
↑これをどっちで呼ぶかって話しなんだけど。
データフィールドとか、インライン関数の「定義」をしてますよね。
中でどれだけ「定義」されていても、全体では「宣言」って呼ぶんですか?
0463デフォルトの名無しさん
NGNG定義 class a{}
実装 a::a(){}
宣言 a *ax = new ax;
0464デフォルトの名無しさん
NGNGflockを使うしかないのでしょうか。
0465デフォルトの名無しさん
NGNGWebProg板が無駄に詳しいけどね。
後はディレクトリがあるかないかとか。
0467デフォルトの名無しさん
NGNGもともと「定義」というのは、コンパイラがそれに出会ったら、
その場でコンパイルされて何らかのオブジェクトコードが生成されるものだ。
それに対して「宣言」というのはあくまでコンパイラに教えるのが目的で、
それ自身はオブジェクトコードが生成されないものだ。
だからたとえ inline とあっても、コンパイラが出会ったその場で
オブジェクトコードが生成されるわけではないので、それは「宣言」。
つまり「関数呼び出しを生成するのではなく、その場でこれを展開してくれ」
という「宣言」なわけだ。
だから「inline 宣言」とはいうけど、「inline 定義」とは言わないよな、フツー。
とはいうものの、「テンプレート」となると話はややこしくなるが...。
0468デフォルトの名無しさん
NGNGなるほろ・・・日常的な「定義」とは意味が異なるのですね
0469464
NGNGなるほどー。サンクスです。
ロックかけるときだけfile descriptor取得して
Cの関数使うのはちょっと気持ち悪いなーと思ったので
質問してみました。
0471デフォルトの名無しさん
NGNG(*゜ー゜)++
0472デフォルトの名無しさん
NGNG0473デフォルトの名無しさん
NGNG以下引用。
> "定義"とは変数が実際につくられ、あるいは記憶が割り当てられた
> ところを指すのに対し、"宣言"とは変数の性質は指定されているが
> 記憶割当てはされていないところを指す。
0474デフォルトの名無しさん
NGNG>>473 の意味で区別するのが正しいとは思えない。
0475デフォルトの名無しさん
NGNG0476デフォルトの名無しさん
NGNGC++3rd(邦訳版)のP.113にも class A{}; が定義であるように
解説されてますね。
0479デフォルトの名無しさん
NGNGclass A{}; クラス定義
でいいんだよね?
0480デフォルトの名無しさん
NGNGclass A{}; クラス宣言&定義
じゃねーの。
0481デフォルトの名無しさん
NGNGクラスの場合、I/Fだけでなくその挙動まで定義して初めて完全な定義な気がするから
class A{};
は(全てインラインでない限り) 不完全な定義 とでも呼ぶべきかと
0482479
NGNG0483デフォルトの名無しさん
NGNG0484デフォルトの名無しさん
NGNGclass A{}; クラス宣言
じゃねーの。
0485デフォルトの名無しさん
NGNG定義は宣言も兼ねる
常に成り立つわけじゃないけどさ
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGclass A; 宣言
class A{}; 定義
A::A(); 関数定義
0488デフォルトの名無しさん
NGNGvoid Func()
{
char* sBuf=new char[256};
}
deleteしてないので256Byte開放されないわけですが、
スコープ抜けるのでsBufは消えちゃいますよね。
そうなるとこの256Byteはどうなるのでしょうか。
sBuf がないので見えなくなってメモリに
ごみとして残るのでしょうか?
プログラム終了時には消えると思うんですが
実行中はどうなるのかよくわからないんで。。
私以外の人はご存知と思いますので
教えてもらえないでしょうか?
よろしくお願いします。
0489デフォルトの名無しさん
NGNG覗き穴の亡くなった箱。
ロープが切れた舟。
子供が手を離した風船。
0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNGやっぱりそうだったんですね。
胸のつかえが取れました。
0492デフォルトの名無しさん
NGNG0493デフォルトの名無しさん
NGNGえー、3.1 だとそんな warning が出るわけ? 俺も同じようなことを
やってるから、ちと鬱だな。明日にでも 3.0.4 から 3.1 にしようかと
思っているのに。
0494デフォルトの名無しさん
NGNGclass A {
public:
virtual const T method() = 0;
};
class B : public A<char *> {
public:
[ (a) ] method() {
return 0;
}
};
int main() {
return 0;
}
みんな,この [ (a) ] に入れるべきものが自然に分かるですか?
私はさっき無茶苦茶はまったんで鬱です
しかもまだ理屈が分かってないし
0495デフォルトの名無しさん
NGNG次のコードがコンパイルできません。。。
#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なるほど。char * const って書かないとだめか。
理屈としては、テンプレートを解析した時点で、「T は const」
ってことに決まっちゃうからかな。const char * は、
const な「char *」じゃないっしょ。
0497デフォルトの名無しさん
NGNGconst T は char* const になるですよ
0498デフォルトの名無しさん
NGNG関数テンプレートでデフォルトパラメータは使えたっけ
テンプレート宣言終了の;がない
テンプレートは型が完全に一致しないと実体化しないから
多分君のもくろみは外れている
とか
0499デフォルトの名無しさん
NGNGテンプレートの引数を省略できなかった,ていうことらしいんで
cout << test<char>(basic_string<char>("Hello, world!")) << endl;
とすれば,うまく動いているっぽいっすね
>>496-497
あー,どうもっす。そういう考えがスッと出て納得できるなんて,うらやますぃ・・・
今日ついに「プログラミング言語C++」買ってきたんで,これから
ワッシワシ勉強するですよ
0500495
NGNG出来ました…でも、関数テンプレートのデフォルト引数の例が、
Stroustrup本の13.4.1に載ってるんですけど…
例が悪いみたいですね…。すいません。
0502495
NGNG誤解を招きそうな発言をして申し訳ありません。。。
0503デフォルトの名無しさん
NGNGVCは謎が多いな
0504デフォルトの名無しさん
NGNGわかるよ。
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNG違う。constは直後の要素に掛かる。
0507495
NGNGあ、あと、BCCでもデフォルト引数が使えないみたいです。。。
一次クラステンプレートのみに使用できますとか言われて…
弱った。。。手持ちのコンパイラじゃ出来ないのか。。。(汗)
0508デフォルトの名無しさん
NGNG関数の仮引数では同じだったはず
他は違う
0509デフォルトの名無しさん
NGNGサンクス
0510デフォルトの名無しさん
NGNGん?
出来ないのが標準仕様(ISO)だけども何が問題?
0511デフォルトの名無しさん
NGNG0512デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNGダセエな。
0515デフォルトの名無しさん
NGNG関数テンプレートでもデフォルト引数は使える。
495 がダメなのは、2番目のテンプレート引数 C は関数引数から推測できるのに
1番目の引数 T の指定がないからじゃないのか。だから 499 が正解だと思う。
普通の関数のデフォルト引数だって、1番目はデフォルトにして2番目の引数だけ
指定するなんてことはできないだろう。
0516デフォルトの名無しさん
NGNGclass 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デフォルトの名無しさん
NGNGconst char * str
char const * str
この辺と混同してないか?
char * str const
const char * const str
0519デフォルトの名無しさん
NGNG同じ結果になるんですが・・・。
#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;
}
0520517
NGNG×char * str const
○char * const str
0521499
NGNGp.133 に書いてたんですが,"const *" は存在しないから基本形の一部と
見なされるらしくて,つまり "char const *" は "const char *" と
同等だということでした
# だんだん const の使い方が分かってきたかも
0522515
NGNGA default template-argument shall not be specified
in a function template declaration or a function template definition
って書いてあった。
0523デフォルトの名無しさん
NGNG>関数テンプレートでもデフォルト引数は使える。
ここでの問題はデフォルトテンプレート引数だぞ
これは使えないだろ
0524デフォルトの名無しさん
NGNG持ってんのかよ!Σ(゚□゚=)
イイナァ
0525523
NGNG0526japh ◆J.5V8ta6
NGNGというようなことを何かで読んだよ。
(プログラミング言語C++だったかな…或いはEffective C++だったかもしれない)
0527515
NGNGたしか、20ドルくらいで買った。まあ、ふだんは
http://www.kuzbass.ru/docs/isocpp/
を見に行ってるけどね (w
>>525
いや、うっかり C++3rd を信じちまったおれが悪かった。
0528495
NGNG結局、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通らなくなりまっす。下のように書くしかありまっせん。
#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;
}
0530495
NGNGぐえ…。Stroustrup本が標準だとばかり思っていました…。
今度から>>527を見に言ってから発言するようにしたいと思います。
色々ありがとうございましたm(_ _)m
0531デフォルトの名無しさん
NGNGありがとう!
0532デフォルトの名無しさん
NGNGなぜだろう?いつの間に?
0533デフォルトの名無しさん
NGNG0534デフォルトの名無しさん
NGNG0535デフォルトの名無しさん
NGNGhttp://mxlab.com:8080/ftp/docs/c++/?s
0536デフォルトの名無しさん
NGNGそれともやっぱり違法?
0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNGあと、Exceptional C++ の43項も読んだら、constの正しい使い方が理解できるよ。
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNG0541デフォルトの名無しさん
NGNG常に char* const str なら何も迷うこと無いでしょ
0542デフォルトの名無しさん
NGNG0543デフォルトの名無しさん
NGNGあ、サンクス
0544デフォルトの名無しさん
NGNGつーか間違えてるなら、迷ったってことでわ?
0545エキセントリック541
NGNG絶対ゆわれるとオモタYO(恥
const の位置を間違ったんじゃなくて、
1行目でconstなcharへのポインタのことを考えていながら、
2行目でcharへのconst なポインタのことしか考えてなかった。
const char* const str なんつー・・・
char const* const str なら何も迷・・・
って書けばよかたよ
0546デフォルトの名無しさん
NGNGそうするくらいなら、参照渡せよ、って感じだし。
(使用頻度において、T const * >> T * const ,T const *const)
ポインタのポインタも、ポインタへの参照とか、vector<vector<T> >つかえば
いいわけだから、ポインタでconst使うのは、実質 T const * ptr だけっしょ。
だったら、迷うもなにも、 const T *ptrってやっとけばいいんでないかい?
0547デフォルトの名無しさん
NGNG配列のときとかNULLのときとか参照使えないし
0548デフォルトの名無しさん
NGNG>> 当たり前のことにも名前ついてて少しワラタ。
若干オソレスだが
その当たり前ってやつを他人に説明するには、名前があったほうが便利だろ〜。
デザインパターンの目的のひとつは、そういうことだぞ。
だいたい、Gof本に書いてあることなんざ、ハッカーレベルじゃ全部当たり前。
0549デフォルトの名無しさん
NGNG取りあえずこれ抽象クラスにしたら継承するだけでいろんな事に使えるやろ?
おお。確かに。
取りあえずこのクラスでFactoryMethodやるから。
はぁ?
日本的にあの名前達は有害かと。
0550デフォルトの名無しさん
NGNGNULL渡しチェックの必要がなくなるのは嬉しい。
今までCOMに毒されてたから気が付かなかったよ。
0551デフォルトの名無しさん
NGNG逆にNULLが渡したくても渡せない罠。
0552デフォルトの名無しさん
NGNGNULLを渡すって事は、前提とする状況ががらっと違うわけだから。
オーバーロードさせとくのが正しい、と俺は思う。
// ポインタ渡し
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結局参照はPascalのvar以上の使い方はすべきでないですか?
0554デフォルトの名無しさん
NGNG継承もとのクラスのコンストラクタをそのまま使いたいんだけど
良くわかりません。
継承もとのクラスのコンストラクタを派生クラスにコピペするのもあんまりだし・・・
0555デフォルトの名無しさん
NGNGa( int c );
};
Class b : public a {
b( int c );
};
b::b( int c ) : a( c )
{
}
こういうこと?
それとも、class b のコンストラクタの定義は無しで
class a のコンストラクタを流用したいってこと?
それは俺も知りたい、誰か教えてプリーズ。
0556デフォルトの名無しさん
NGNGとして
aaa.insert(make_pair(3, "abcdefg"));
としたらエラーがでました。なんか2番目の引数が問題らしいので
適当に
aaa.insert(make_pair(3, string("abcdefg")));
としたらokになりますた。
これって一時的なオブジェクトstringを"abcdefg"で初期化して渡したって事ですよね?
CPUとメモリ消費しながら・・
この修正で正しいですか?間違ってますか?
0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNGC++標準ライブラリ〜って本では文字列を渡してますが
VC++の癖ですかね〜
0559デフォルトの名無しさん
NGNGpair<int, char const * const>からpair<int, string>への変換は存在しない。
0560japh ◆J.5V8ta6
NGNGつまりmake_pair()じゃなくて単にpair<>のコンストラクタを使いなさいってこった。
aaa.insert(make_pair(3, string("abcdefg")));
↓
aaa.insert( std::pair<int, std::string>(3, "abcdefg") );
0561デフォルトの名無しさん
NGNG0562561
NGNGstd::multimap<int,std::string>::value_type
0564デフォルトの名無しさん
NGNGstdio.hに愛着があるんで。
0565デフォルトの名無しさん
NGNG名前空間がstdに包まれなくなる。つまり通常のCのようになる。
0566デフォルトの名無しさん
NGNGグローバルネームスペースを汚すなと。
0567デフォルトの名無しさん
NGNGこれだからプロジェクトに加齢臭のするドキュソが入ってくるとロクなことにならねえ
と若い連中に思われる。
0568デフォルトの名無しさん
NGNG0569564
NGNG今日から改めます。
0570デフォルトの名無しさん
NGNG0571デフォルトの名無しさん
NGNG0572デフォルトの名無しさん
NGNG0573デフォルトの名無しさん
NGNG0574デフォルトの名無しさん
NGNGエラーが出たりしますか?
0575デフォルトの名無しさん
NGNGストラップさんの本、読み直してみよう・・・。
0576128
NGNG引きこもりは全部friendにしてしまう傾向があるから注意・・
0577デフォルトの名無しさん
NGNGoperatorを定義する時に便利。乱用は禁物。
0578デフォルトの名無しさん
NGNGclass Test
{
public:
static int nHoge ;
};
int main()
{
Test::nHoge = 0;
return 0;
}
0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNG0581デフォルトの名無しさん
NGNG0582デフォルトの名無しさん
NGNGclass Test
{
public:
static int nHoge;
};
int Test::nHoge;
int main()
{
Test::nHoge = 0;
return 0;
}
0583デフォルトの名無しさん
NGNG0584デフォルトの名無しさん
NGNGint Test::nHoge; ←これが実体なの?
うーん謎。
0585デフォルトの名無しさん
NGNGclass変数を複数作っても、staticメンバ変数は実体が一つしか
存在しない事に伴う特殊な書き方らしい。誰か詳細キボンヌ。
0586デフォルトの名無しさん
NGNGそれが実体。初期化する場合もそこで。
0587デフォルトの名無しさん
NGNGclass変数 を staticメンバ変数 と言い替えている罠
0588デフォルトの名無しさん
NGNG0589デフォルトの名無しさん
NGNGstaticメンバはクラスに固有なもの
インスタンスをいくつ作っても、staticメンバは複数作られない
それは、概念的にstaticメンバが、インスタンスの外にあるから。
0590デフォルトの名無しさん
NGNGわりィとちった。インスタンスだね。
0591デフォルトの名無しさん
NGNGなるほど。わかりやすいです。
staticメンバの宣言は、
各インスタンスの外にある1つの実体を指すための
ポインタ的(Cで使う意味じゃなく)なものだということだすね。
だからいくつインスタンスを生成しても指す場所は同じってことで、
値はいっしょということだと。
0592デフォルトの名無しさん
NGNG静的嫌がらせ
0593デフォルトの名無しさん
NGNGEnumWindowsとかで取得したHANDLEからそのアプリケーションが
あるパスを取得する方法を教えて下さい。
0594デフォルトの名無しさん
NGNGhttp://pc.2ch.net/test/read.cgi/tech/1023361418/l50
0595デフォルトの名無しさん
NGNGサンクス、とりあえず、向こう逝きます、
0596デフォルトの名無しさん
NGNG大勢で思考錯誤したり分担したりすればかなりいいものが作れる気がするんだが
痒い所に手が届くような大規模なFAQとかさ、、
学んでる最中の人のがいればどこがわからないとかが指摘できたりするわけで
ここには勉強中の人もかなりいるだろうからそう言うのも大丈夫だとおもう
0597デフォルトの名無しさん
NGNG俺も似たようなことは考えてた。
0598デフォルトの名無しさん
NGNG俺はハナからあきらめてた
0599デフォルトの名無しさん
NGNGfriend class b;
}
class c : public b{
}
この class c にも class b に対して行ったfriend宣言の効力を
効かせたいんですけど無理ですかね?
やっぱり class c のfriend宣言をあらためて加えないと駄目ですか?
0600デフォルトの名無しさん
NGNGはい。
0601デフォルトの名無しさん
NGNGあなたヤホーの掲示板に居たでしょ?
0602デフォルトの名無しさん
NGNGなんでそんなことをしたいのよ?
0603ななしあた
NGNGいいじゃない、別になんだってさ
0604599
NGNG>>599
class b の派生クラスを作る度に
class a の宣言を改定しなければならないのがイヤだったんです。
class b の能力としては class a のプライベートメンバにアクセス権を持つ
というのが含まれているんで、継承でそれを派生クラスに持ち越せないって
なんか変な感じがしますね。これはちょと不満かも。
0606デフォルトの名無しさん
NGNG激しくお勧めできないが
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;
}
};
0607599
NGNGそれはまたトリッキーで・・。
でも class friendlyA は class C の内部クラスにしてしまえば
それなりに綺麗に書けそうかも。どうも参考になりました。
それか、今思ったんですがfriend宣言のところだけマクロにして
切り離すってのもアリかも。
0608デフォルトの名無しさん
NGNGいまにそれが有名になってこの板が2chの看板に!
0609デフォルトの名無しさん
NGNG「特殊化」や「専門化」は instantiation の訳に用いるほうがふさわしいし、
C++3rd の「特殊バージョン」は間違いではないにしろ、すわりが悪く感じます。
0610デフォルトの名無しさん
NGNG0611デフォルトの名無しさん
NGNG>>608
あれだけいってもC FAQ/C++ FAQすらよまねえ連中だらけなのにさらにゴミ文書増やすのかヨ
0612デフォルトの名無しさん
NGNGふむ、それも「専門化」とかと同じで、意味があってないんだよね
0613デフォルトの名無しさん
NGNG何がしたいわけ?
0614デフォルトの名無しさん
NGNG限定化
0615デフォルトの名無しさん
NGNGいろいろと「〜化」って挙げてくれてるけど、それって「操作」を意味する「サ変名詞」でしょ
だから、正しくない。
specailization は「操作」じゃなくて、クラスや関数でしょ。
0616デフォルトの名無しさん
NGNG0617デフォルトの名無しさん
NGNG単に、specialization を日本語で "正しく" 表記したいだけだよ。
いつもは「スペシャライゼーション」って書いてるけど、長ったらしいしね
0618デフォルトの名無しさん
NGNG0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNGクラスや関数って「物」なんだろうか?
0621デフォルトの名無しさん
NGNGうん、問題ない。めんどくさいけどね。
読みやすいかといわれると、疑問もあるけど。
0622デフォルトの名無しさん
NGNG気持ちは分からんでもないが、戦時中じゃないんだから、
むりやり日本語にすることもあるまい。
0623デフォルトの名無しさん
NGNG政府の見解は違うようだけどね(w
字面が場所とるのが嫌なんだが、現行どおり「スペシャライゼーション」で当面いきます。
おつきあい、ありがとう。
0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNG燃えるゴミの日に出したよ。政府
0626デフォルトの名無しさん
NGNG具体的な型を指定してあげればクラスと同様に扱えますか?
つまり、基底クラスにして派生させてみたり、
その他いろいろ文法上はクラスと同等の扱いですか?
0627デフォルトの名無しさん
NGNG>>templateは言うなればクラスの特殊な物なの?
逆、クラステンプレートは普通のクラスを型に対して一般化したもの。
同様に、関数テンプレートは関数を一般化したもの。
>>具体的な型を指定してあげれば、クラスと同様に扱えますか?
そのとおり、テンプレート引数を与えてやれば、コンパイラは
テンプレートをそれでインスタンス化してクラス定義を作成し、翻訳単位に挿入する。
そうやって作られたクラスは、通常のクラスとまったく同じように使用できる。
0628デフォルトの名無しさん
NGNGありがとうございます
0629デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNG0631デフォルトの名無しさん
NGNGsprintf を使ったりしてみたのですが、なんかカッコ悪いような……
0632デフォルトの名無しさん
NGNGboost::lexical_cast<>
ちょい重いけど
0633デフォルトの名無しさん
NGNGstring s = static_cast<ostringstream&>((ostringstream() << x)).str();
とか。
0634デフォルトの名無しさん
NGNG0635デフォルトの名無しさん
NGNGそれだったらboost::lexical_cast<>でいいじゃねぇか。
どうせあれも内部でstringstream使ってるし。
0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNGで得られたconst char*をchar*にキャストして
そこがさす文字を置き換えたりとかしても平気ですか?
0638デフォルトの名無しさん
NGNGエエジャナイカ、エエジャナイカヽ(・∀・)ノ
0639デフォルトの名無しさん
NGNG基本的にやってはいけない。
もしやるとしても、以下の出力の理由が理解できてから。
#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デフォルトの名無しさん
NGNG0642デフォルトの名無しさん
NGNG0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNGなにか心がけるといいことはありますか?C++で
0645デフォルトの名無しさん
NGNGiostreamなどの標準ライブラリを使ったらすぐ大きくなる。
0647デフォルトの名無しさん
NGNG0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNGでかくなるのは避けようがないでしょ
0650デフォルトの名無しさん
NGNGどうしてもsprintfの誘惑に負けちゃうよな
0651デフォルトの名無しさん
NGNG致命的エラー F1003 D:\borland\bcc55\Include\stdcomp.h 5: error 指令: Must use C++ for STDCOMP.H
ってでるんですけどなんでー(;_;)
0652デフォルトの名無しさん
NGNGアクションゲームで人間クラス、背景クラス、Direct3Dラッパークラスがあるのですが
人間クラスのメンバ関数にDraw()を定義して
p人間クラス->Draw();
p背景クラス->Draw();
でDirect3Dを使って描画させたいのですが、この場合Direct3Dクラスから人間クラスと背景クラスを
継承させるのが正しいのでしょうか?ただし、Direct3Dクラスが複数できるのは問題があります。
0653デフォルトの名無しさん
NGNGx++ は右辺値なんでしょうか。
0654デフォルトの名無しさん
NGNGF1003は#error指令が出すメッセージです。
拡張子を.cppにしませう。
0656デフォルトの名無しさん
NGNG俺はまるで非効率な男みたいではないか!!
0657デフォルトの名無しさん
NGNG描画インターフェースを定義して(IDrawable3D::Draw()とか)、
人間クラス、背景クラスがそれを "内部クラスで" 実装し、
そのインスタンスをD3D描画管理クラスに登録するというのはどうかな。
このやりかたなら、対象となるクラスが何であろうと、描画に持ち込むことができる。
デザインパターンでいうところの・・・何だっけ
普通にプログラミングすれば、x++と--xだけあればいい。
++xやx--は使う前にアルゴリズムを見直してみることを勧める。
0659デフォルトの名無しさん
NGNG0660652
NGNGありがとうございまする
動きました!!GCCなら動いてたんだけどなぁ
BCCは動かないのね…
0661デフォルトの名無しさん
NGNGそ、そんなに重大なことなのか!?
0662デフォルトの名無しさん
NGNG++xとx++は、コピーコンストラクタ云々で効率が違うんだと。
詳しくは知らん。
0664デフォルトの名無しさん
NGNGx++が左辺値だったら、なんかまずいワケ?納得いかん。
0665デフォルトの名無しさん
NGNG演算子の多重定義の事を考えてみると、前置++は参照値を返すように
書けるが、後置++はできない。関数内で一時変数を作成して、その値
を返すようにしなければならない。
それで、参照値が返せるというのは、すなわち左辺値になりうる、という
説明ではダメ?
0666japh ◆J.5V8ta6
NGNGxをインクリメントし、インクリメントする前の古い値を返す
というもの。
「xをインクリメントする前の古い値」がxそのものであるはずがない…
つまり一時オブジェクトであるということだよ。
ちなみに、ユーザー定義型ではx++に代入させることも可能だよ。
俺はそんな型扱いたくないけどね。
0667デフォルトの名無しさん
NGNG前置/後置で左辺値/右辺値でバランス取れてるじゃん!
右辺値だけ使いたい時も在るさ、多分
0670デフォルトの名無しさん
NGNG気持ちが悪いという理由で演算子を使い分けられないのなら、プログラマは
向いてないと思われ……。
(それは仕様ですで何でも済ませるヤツもアレだが、仕様を納得できんのも
アレだ)
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNGC++は他の言語のいい点をたくさん取り入れたが、汚い所もたくさん
取り入れてしまったね。
0675デフォルトの名無しさん
NGNGセパレーションは運用楽だしコンパイル速度も遅くならないが、管理が面倒。
0676デフォルトの名無しさん
NGNGそれは同意。
資源の浪費だし、テンプレートを使ったコードの最適化は信用できないし。
でも C++ は嫌いじゃないけど?
0677デフォルトの名無しさん
NGNG0678デフォルトの名無しさん
NGNG0679デフォルトの名無しさん
NGNG同じく俺もだ。
0681デフォルトの名無しさん
NGNGオレはOOだよ。
シーンやシナリオはステートパターンで。
スプライトとかオブジェクトにしとけば便利。
0682デフォルトの名無しさん
NGNG0683デフォルトの名無しさん
NGNG何かありましたっけ?
__CPLUSPLUS みたいな感じの。
CodeWarrior と VC++ の場合を知りたいです。
0684デフォルトの名無しさん
NGNG0685デフォルトの名無しさん
NGNGアクセスする時にC++の教科書ではメソッドを介してアクセスされてますがなぜですか?
FieldやPropertyなど、メソッドを介さずに直接Publicなメンバーを用意して
値のやり取りも出来ると思うのですが。
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNG#define class struct
#define private:
#define protected:
とでもして使えばいい罠。
0689デフォルトの名無しさん
NGNGその理由に付いては何となく分かるんですが。(配列、ポインタ、インデクス
範囲、そんなキーワード思い付いたんですが)
教科書探して見ます。
>>687
わかりました。どうもです。
0690デフォルトの名無しさん
NGNG#define protected public
だわな。
0691デフォルトの名無しさん
NGNG極悪(w
0692デフォルトの名無しさん
NGNGワラタ
0693デフォルトの名無しさん
NGNG> ゲーム分野でオブジェクト指向を取り入れてる人って少なそう。
絶対数は知らんが、俺は OO だよ。今度、転職する先のゲームメーカーでも
開発の主力言語は C++ だそうだ。
(別のトコロで C 主流ですって会社もあったけど、そっちは断った。言語が理由
じゃないけどね)
0694デフォルトの名無しさん
NGNGANSI C++ の規格では、private, protected, public の中ではメンバ変数のメモリ
配置順序は決まってるが、それをまたがった場合には実装依存になっている。
たとえば
private:
x;
public:
y;
private:
z;
だと x, y, z ではなく x, z, y の順に配置されるかも知れんわけで、そのマクロを定義
すると既存のオブジェクトとバイナリ互換性を崩す可能性があるぞ。
まぁ、ネタニマジレス だけどさ(w
0695デフォルトの名無しさん
NGNGどこでdeleteすべきですか?
0696デフォルトの名無しさん
NGNG0697デフォルトの名無しさん
NGNGif (pinstance == NULL) {
lock();
if (pinstance == NULL) {
static Singleton instance;
pinstance = &instance;
}
unlock();
}
return pinstance;
こうすればいい
0698695
NGNGども。697を見てて思ったんですけど、
Singleton* Singleton::getInstance()//staticなメンバ
{
static Singleton inst;
return &inst;
}
なんてするとヤヴァイですか?
0699デフォルトの名無しさん
NGNGなるほど、そうすると、privateなメンバを持つクラスのヘッダファイルを
書き換えて、privateメンバをいじくって楽しむというのは危険な行為な
のですね。
まあもともとC++のカプセル化機構は、いくらでも壊すことができるから、
使う人に全責任があるわけですが。
0700695
NGNGむりですた
0701デフォルトの名無しさん
NGNG危険なヤシが居ます
0703デフォルトの名無しさん
NGNG0704デフォルトの名無しさん
NGNG#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デフォルトの名無しさん
NGNG0706デフォルトの名無しさん
NGNGこのソースが通るコンパイラってあるのでしょうか…
0707デフォルトの名無しさん
NGNG通るように修正したよ。(動作確認はしてない)
#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デフォルトの名無しさん
NGNGVCとunixとでは仕様が全然違う。きをつけろ
0709デフォルトの名無しさん
NGNG何型?
0710デフォルトの名無しさん
NGNGちなみに出力関数忘れてましたw。
0711デフォルトの名無しさん
NGNGコピーするときに間違えたと思われ
0712てすとちゅぅ
NGNGなんで仮想関数の方が呼び出しが早いんだろう・・・
おかしいな
0713デフォルト名無しさん
NGNGint main()
{
char ss[5];
cin >> ss;
cout << ss << '\n' ;
return 0;
}
を実行すると、8文字まで打ち込んでも返してくれます。
9文字目でエラー発生。
どうして???
0714デフォルトの名無しさん
NGNGchar ss[5];
0715デフォルトの名無しさん
NGNG0716713
NGNGだからさ、5文字って指定しているのにどうして
8文字までOKなのかってことさ。
0717デフォルトの名無しさん
NGNGC++でmallocなんて化石は使うな。
と言ってみる。
0718デフォルトの名無しさん
NGNGあんたの環境ではたまたま大丈夫だったってだけだろ?
0719713
NGNG0720デフォルトの名無しさん
NGNGss[4]以降もメモリーは続く。
0721720
NGNG0722721
NGNG0723
NGNG0724デフォルトの名無しさん
NGNG何気におもろかった。
0725デフォルトの名無しさん
NGNGOKじゃなかったらバッファオーバーフロウの心配なんてしねーよ。
0726723
NGNG0727デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNGMyException:クラスを作ってコンストラクタを
MyException::MyException(const、char* sourceFile, int sourceLine, const char* format, ...)
と定義して
throw MyException("HOGE(%d) %s", a , b);
等として使っているのですが、
これだとCのヘッダ <stdarg.h> をインクルードしないと巧く行きません。
iostreamとか使ってもっと、C++風にかっこよくするにはどうしたら良いのでしょう?
0731デフォルトの名無しさん
NGNGthrow MyException("HOGE(%d) %s", a , b);
↓
throw MyException(__FILE__, __LINE__, "HOGE(%d) %s", a , b);
です
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNGメモリーリークすることってありますか?
0735デフォルトの名無しさん
NGNG0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNG以外でありますかね?
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
したらなぞのメモリーリーク検出するんですよねぇ。。
newもmallocもつかってないのに。。
0738デフォルトの名無しさん
NGNG0739デフォルトの名無しさん
NGNG可変個引数はあきらめて、引数を1個、2個、3個、…持つ
テンプレート関数としてコンストラクタを定義する。
0740734=737
NGNGどうやらstd::stringのつかいかたをあやまっていたようです。
std::string str;
str = "";
ってだめコードですか?
0741デフォルトの名無しさん
NGNG確か、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++初心者なのでわかりませぬ…。。。
0742741
NGNGMyException(const string&, int, const string&, variable_arg<T>);
ちょっと試してみよう。。。
0743デフォルトの名無しさん
NGNG駄目ではないと思う。
str.clear() だとリークは起こらないの?
0744740
NGNGstlport(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
どちらかを定義します
0746740
NGNG自分のソースで定義しろってことですよね?
0747デフォルトの名無しさん
NGNG〜\stlport\stl_user_config.h
に書き加える。iostreamも使っている場合、
ビルドし直さないと原因不明のバグの元になる。
0748デフォルトの名無しさん
NGNGproxyクラスのインスタンスを作って、そいつをコンストラクタに渡すのはどうよ?
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デフォルトの名無しさん
NGNGSTLport使ってるとか?
0750デフォルトの名無しさん
NGNG0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNG不具合じゃないよ
パフォーマンスを上げるために一部をプールしてるだけ。
0753デフォルトの名無しさん
NGNG0754デフォルトの名無しさん
NGNGリークはリークだけど、どれだけ運用してもリーク量は増加しないよ
0755デフォルトの名無しさん
NGNGと、Effective C++に書いてありますが
0756デフォルトの名無しさん
NGNGsgiからおとしたほうも同じく起こります。
>>754
ってことはこのリークは気にしなくてもいいのですかな?
0757デフォルトの名無しさん
NGNG時。
0758デフォルトの名無しさん
NGNGこれでどう?
#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(・∀・)カコイイ!!
0760デフォルトの名無しさん
NGNGstd::string(__FILE__) + __LINE__ + "HOGE(" + lexical_cast<string>(a) + ")" + lexical_cast<string>(b);
0761デフォルトの名無しさん
NGNG(・∀・)イイ!!
0762デフォルトの名無しさん
NGNG焦った。Boostかあ、ちょっと見てみるかなあ。
0763デフォルトの名無しさん
NGNGそれだけ見ると lexical_cast って、あまり使い勝手よいとは
思えないんだが、どういうインタフェースなの?
0764デフォルトの名無しさん
NGNGint b = lexical_cast<int>(a);
float c = lexical_cast<float>("1.234");
std::string d = lexical_cast<std::string>(a);
こんな感じで。
0765デフォルトの名無しさん
NGNG10行程度だからソース見れ。
http://www.boost.org/boost/lexical_cast.hpp
0766デフォルトの名無しさん
NGNGたとえは、"%04d"とか、書式使うには
int n = 10;
ostringstream os;
os << "id(" << setw(4) << setfill('0') << n;
ってやるしかないんじゃないの?
0767デフォルトの名無しさん
NGNGos.fill('0');
0768デフォルトの名無しさん
NGNG0769デフォルトの名無しさん
NGNG0770デフォルトの名無しさん
NGNG0771デフォルトの名無しさん
NGNG0772デフォルトの名無しさん
NGNG0773デフォルトの名無しさん
NGNG自作の道がある。
0774デフォルトの名無しさん
NGNG0775デフォルトの名無しさん
NGNGSTLport が STL コンテナで使ってる node allocator の仕様だ。
いやなら _STLP_MALLOC_ALLOC (だったかな? マニュアル参照してくれ)
あたりのマクロを定義すると、node allocator 使わずに malloc / free するよ
うになるから、その手のリークチェッカに引っかからなくなる。
ただし、致命的にパフォーマンスが落ちるから、リリースビルドでは標準の
アロケータを使った方が良いと思う。
0776デフォルトの名無しさん
NGNG0777デフォルトの名無しさん
NGNG#include <iomanip>
して、771 のように
ErrorMessage() + "setw(4) + setfill('0') + n;
でいける。
0778デフォルトの名無しさん
NGNG0779デフォルトの名無しさん
NGNGで、オレとしては、setfmt みたいなマニピュレータを定義して、
os << setfmt("04d")
とかだったら、
os.width(4);
os.fill('0');
とやってくれるようなのを作ればいいんじゃないかと。
078016メロミックス ◆/ECTibn.
NGNG日韓翻訳掲示板を作りたいのですが、
協力してもらう事は可能でしょうか?
0781デフォルトの名無しさん
NGNG078216メロミックス ◆/ECTibn.
NGNGスマソ
0783デフォルトの名無しさん
NGNGexitの代わりになる物はないですか?
0784デフォルトの名無しさん
NGNGリソースリークは気にしないとだめだが
0785デフォルトの名無しさん
NGNGどうも。ってことは代替物はない?
メモリーリークはどうも気持ち悪くて・・
0786デフォルトの名無しさん
NGNG0787デフォルトの名無しさん
NGNG0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNG0790デフォルトの名無しさん
NGNGなんすか?それ
0791デフォルトの名無しさん
NGNGお前知らないのか??
バカだな〜
0792デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNGおまえ知ってるっちうか実行してるのか?
バカだな〜
0794デフォルトの名無しさん
NGNG80才まで20本の歯を保とうだぞ?
世間の常識だから覚えとけよ。
0795デフォルトの名無しさん
NGNG俺は0-100だ。
たとえ重要じゃないところでもみっともないコードは残せない
0796デフォルトの名無しさん
NGNG0797デフォルトの名無しさん
NGNGえーと、あれだな。
たとえスライム一匹でもフルパワーを持って倒しに行くタイプ。
0798デフォルトの名無しさん
NGNG0799デフォルトの名無しさん
NGNG0800デフォルトの名無しさん
NGNG全部潰す派ですか?
0801デフォルトの名無しさん
NGNGんなこたぁない。
解放されないのはリソース。
0802デフォルトの名無しさん
NGNG0803デフォルトの名無しさん
NGNG0804デフォルトの名無しさん
NGNG0805デフォルトの名無しさん
NGNG0806デフォルトの名無しさん
NGNG9x系でDCにオブジェクトを選択したままプロセスが死ぬと
GDIリソースは解放されません。
0807デフォルトの名無しさん
NGNG「9x系で」ってことは、OSのバグってことでいいですね?
0808デフォルトの名無しさん
NGNG0809デフォルトの名無しさん
NGNGバグじゃなくて仕様だって。
気に入らない動作=すべてバグ って厨房じゃないんだから。
0810デフォルトの名無しさん
NGNG0811デフォルトの名無しさん
NGNG0812デフォルトの名無しさん
NGNGmax/min が裕子にならないから、みたいだよ。
0813811
NGNGその理由だと、 digits も関数になってるはず。
やっぱりわからん。
0814デフォルトの名無しさん
NGNG0815812
NGNG初期化はできなかったね。
0817デフォルトの名無しさん
NGNGstatic 関数で定義された関数を class :: 関数 で呼び出す時、
一時的にクラスは作成されるのか教えてください。
0818デフォルトの名無しさん
NGNG付いてこない(static)か。
0820デフォルトの名無しさん
NGNGすることはできない。クラスはコンパイル時に静的に生成される。
0822デフォルトの名無しさん
NGNG0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG(両性どちらとでもOKです)
0827デフォルトの名無しさん
NGNGこりゃ便利。
0828デフォルトの名無しさん
NGNG式が書ける所ならどこでも宣言できる。
0829デフォルトの名無しさん
NGNGTest(class : public Base{}());とか出来ればいいのになぁ…。
0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNG場合による。
0832デフォルトの名無しさん
NGNG正直、勉強不足。
0833デフォルトの名無しさん
NGNGhttp://www.melonpan.net/melonpa/mag-detail.php?mag_id=000211
ここの人がそういってます。
C++の特徴を始めのほうで羅列しておりますがめちゃくちゃのような気がします。
ほとんど間違っていると思うのですがどうでしょうか?
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNGでも、
if (int i = foo())
みたいに代入式しか書けないよね?
if ((int i = foo()) == 2)
みたいに条件判断も書けるといいんだけど。
0836デフォルトの名無しさん
NGNGトと有名図書ぐらいでそれ以外の解説ははっきりいって役に
立たない。役に立たないどころか有害でさえある。
0837デフォルトの名無しさん
NGNG0838デフォルトの名無しさん
NGNGテンプレートの定義が見つからないのかなんなのかやたらエラーがでました。
設定に問題があるのかサポート外なのか。。どっちですか?
0839デフォルトの名無しさん
NGNG0840デフォルトの名無しさん
NGNG自分で書いててあれ?gccだっけ
と思いg++でやったらできますた。。
0841デフォルトの名無しさん
NGNGint i,j;
というふうにしとるんですけども。
やっぱりだめどすかね。
すまあとじゃねえどすかいね。
0842デフォルトの名無しさん
NGNG0843デフォルトの名無しさん
NGNGforからでたら、i無くなっちゃうんどすか?
初心者でスマソ
0844デフォルトの名無しさん
NGNG最近はそのとおり。昔は違った。
0845843
NGNGそうか最近は消えるのか…やっぱり年はとりたくないもんだなーって
それくらい実験すればわかったな…
なんでもきいてスマソ
0846デフォルトの名無しさん
NGNG0847843
NGNGusing 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普通そんなこと考えない
0849843
NGNGごもっとも!
0850848
NGNG0851843
NGNG遊んでおりません。
なんか this.i みたいなかんじであるのかなと…
逝ってきます
0852デフォルトの名無しさん
NGNGthis.i?
0853843
NGNG変数ひとつでプログラムがかけてしまう!とか何とか
思ったりしたと思われ…
0854デフォルトの名無しさん
NGNG環境依存、動作補償なし(九九表)
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デフォルトの名無しさん
NGNG0856843
NGNG変数のスコープも和歌ランぐらい初心者なので
ウル覚えですが…自分自身のクラスだったっけ???
グーぐる先生に聞きに逝ってきます
0857843
NGNG>エラー E2316 a.cpp 6: 'setw' は 'std' のメンバーではない(関数 main() )
しくしく63
>>855
そうでした スンマソン
0858デフォルトの名無しさん
NGNG{ for(int i; i < 10; i++){} }
と書くけど、やっぱダサい!
0859デフォルトの名無しさん
NGNG#include <iomanip>
0860デフォルトの名無しさん
NGNG0861デフォルトの名無しさん
NGNG0862861
NGNG0864デフォルトの名無しさん
NGNG0866843
NGNG1245112 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
0867854
NGNG冗談だし。しかし866のメモリレイアウトはどうなっているのだろう。
0868843
NGNG当然だが…
ポインタの差を求めてそれをたし元に戻すと…
ポインタの差が変わってて しょんぼりって…
これじゃ使えないジャンか!!
0869デフォルトの名無しさん
NGNGだとするとあんまり役に立たないような・・やっぱ
MFCで逝くしかないのか・・
0870デフォルトの名無しさん
NGNG0871843
NGNG-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分けることもできるけど、
その分けた実装がコンパイルされるときに
明示的なインスタンス化をやっとかないと
リンクエラーになるよん
0874デフォルトの名無しさん
NGNGありがとうございました、なんとかうまくいきました
0875デフォルトの名無しさん
NGNG>for(int i=1;i<10;i++)
正直これは改悪だと思われ。
0876デフォルトの名無しさん
NGNGコンパイル時に実害はありますか?
0877デフォルトの名無しさん
NGNG最近のコンパイラはすごいです。
0878デフォルトの名無しさん
NGNGわしも
0879デフォルトの名無しさん
NGNGどうすごいの?
0880デフォルトの名無しさん
NGNG↓
コンパイラwin
0881デフォルトの名無しさん
NGNG脱いでもすごいです
0882デフォルトの名無しさん
NGNGコンパイラはそんなにあほではないのね。
>>878
やっぱりいるんだ。うれしいような
0883デフォルトの名無しさん
NGNG最近やめますた&1行だったらforの中に突っ込んですまいます。
0884デフォルトの名無しさん
NGNGいいと思う
if(i>=0) if(i>=1) if(i>=2) ;
else std::cout << i ;
こんなのあったら何がなんだか分からんし
0885デフォルトの名無しさん
NGNG0886デフォルトの名無しさん
NGNGチィッ
0887デフォルトの名無しさん
NGNGその変数はメンバ変数にしてしまった方がいいのでしょうか?
0888デフォルトの名無しさん
NGNG意味的には×かと。
他からアクセスする気がない変数なら敢えてそうする必要はないかと。
0889デフォルトの名無しさん
NGNG時と場合によりけり。
その変数をほかの関数からつかう可能性があればメンバ変数。
ほかの関数からは絶対呼ばないようなときは関数内static。
ま、「変数のスコープは最小限に」っつーことです。
でもその変数がそのクラスにとって重要ならメンバ変数でもよい。
0890887
NGNGレスありがとうございます。
>時と場合によりけり。
とりあえず、迷ったらメンバ変数にする方向でいきます。
なんか、上司がstatic変数にブチギレしてたので。
本人曰く「staticアレルギー」らしいです…(藁?
0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNG参照されてしまうからね。メンバにするのとは意味が違ってくる。
0894デフォルトの名無しさん
NGNG0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNGstaticメンバ関数なら
ClassName::function();
と呼べる。
0897
NGNGstaticメンバ関数なら、>>896 のようにインスタンスを作成せずに呼べる。
通常のメンバ関数だと、foo.function()のように
わざわざインスタンスを作成しなければならない。
0898デフォルトの名無しさん
NGNG0899デフォルトの名無しさん
NGNG0900デフォルトの名無しさん
NGNGサンクス。
0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNGインスタンスがあろうと無かろうと。(無い場合を考慮すれば当然だが)
コールバックなんかには静的メンバ関数であれば渡すことができる。
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNGWin上ならODBC経由だろうねー
0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNGつかスレ違いっぽいから他スレ行けよ。
0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNGここでこのクラスのオブジェクトを操作するようなグローバルな関数
(例えばswap(class T, class T)みたいな)ですが
プロトタイプはヘッダ、実装はcppに書く、というのが一般的な記述ですか?
0909デフォルトの名無しさん
NGNG疑問点が明確でない。どゆこと?
0910デフォルトの名無しさん
NGNGこのクラスを扱うグローバルな関数をこのクラスとセットで提供したいのです。
この場合関数をcppファイルに書いたのですが、プロトタイプはどこに書こうかなぁ、、と思いまして。
externキーワードつければcppファイルに書いても他のファイルから参照できるんでしたっけ??
0911デフォルトの名無しさん
NGNGもっとちゃんと句読点を入れて書けよ。
テンプレートを作りたいなら、全部丸ごとヘッダに書け。
そうじゃないなら、ヘッダには宣言だけを、*.c/*.cpp に定義を書け。
0912デフォルトの名無しさん
NGNGいいんじゃないの?externつけるまでも無く
0913デフォルトの名無しさん
NGNGそうですか。そうします。ありがとうございます。
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNG普通のクラスのメソッドの定義はヘッダじゃマズイっすか?
0916デフォルトの名無しさん
NGNGinlineじゃない場合、まずいんじゃない?リンク時にぶつかりそう
0917デフォルトの名無しさん
NGNGサンクス♪
0918デフォルトの名無しさん
NGNG>ローカル タイプを使ってテンプレート関数 (関数テンプレートから作る関数) を作ろうとしています。テンプレート>のインスタンス化では、外部リンケージを持つ型だけが使用できます。
>
>以下のコードではこのエラーが発生します。
>
>template<class T> class X{};
>
>void f()
>{
>struct Y{};
>
>X<Y> x; // エラー
>}
この制限は何のためにあるのですか?
0919デフォルトの名無しさん
NGNG# ?(・∀・)? ソウダッケ?
0920デフォルトの名無しさん
NGNG0921デフォルトの名無しさん
NGNGテンプレートのインスタンス生成は関数やクラスの外で行われるから。
(C++ 3rd, C.13.8.3)
これは仕様だが、なぜそういう仕様になっているかは知らない。
それを許すとあまりにもコンパイラを作るのが面倒になるからかなぁ?
0922デフォルトの名無しさん
NGNGbool * Get(){ return &m_bBool; } とやる利点を教えてください
0923デフォルトの名無しさん
NGNG画面をクリアする方法はないのですか?
0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNGテンプレート使いまくったプログラムのマップファイルを見れば、
少しは納得がいくと思うよ。
0926デフォルトの名無しさん
NGNGサンクス、systemでdosコマンド呼ぶんですね。
0927デフォルトの名無しさん
NGNGあえていうなら
・レジスタに乗らないようなサイズならば、参照するのに効率がよい
(でも普通はconst参照にするんでは)
・ポインタ経由で値を変更できる
boolじゃあんまり利点ないと思うけど...
0928デフォルトの名無しさん
NGNGcls なんて外部コマンドはねーよ。
0929デフォルトの名無しさん
NGNG> ・ポインタ経由で値を変更できる
そんなことするぐらいなら素直に m_bBool をパブリックにした方がいいと
思うぞ。
普通に考えたら、とても変なことなので >>922 はそういうことしてる奴に
真意を確認した方がいいよ。普通はやらない。と言うか、やっちゃいけな
い。
0930デフォルトの名無しさん
NGNGsystemはshellを呼び出す関数で、shellの内部コマンドも使えるのを知らないのか
0931デフォルトの名無しさん
NGNGclass Hoge{
bool m_isChanged;
public :
Hoge() : m_isChanged(false) {}
IsChanged() { return m_isChanged; }
SetChanged() { m_isChanged = true; }
ClearChanged() { m_isChanged = false; }
};
0932デフォルトの名無しさん
NGNGbool変数をわざわざintで返すのですか?
0933931
NGNG0934デフォルトの名無しさん
NGNGhttp://homepage1.nifty.com/fujiwo/develop/xp/cplusstd.html
0935デフォルトの名無しさん
NGNG0936デフォルトの名無しさん
NGNG仮想関数の中でオブジェクトの宣言の順番を変えたり、最適化したり(-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具体的なソースを上げられないなら、手の施しようがないと思うが。
0939936
NGNGアドバイスに添って調べてみたら微妙なミスを発見しました。
解決できました。ありがとうございました!
0940デフォルトの名無しさん
NGNGどこで宣言するのが吉?
vector <myClass *> classes
みたいなオブジェクトをdllとメインプロジェクトの間でやりとりしたくて
迷っています
0941デフォルトの名無しさん
NGNGインスタンスの作成は所有者
0942940
NGNGそうですかやっぱりメインプロジェクトの方でも宣言しないとダメですかね。
どうもdllとlibの関係がわからない・・・
0943デフォルトの名無しさん
NGNGだめというか、そのクラスを使うところで
使いたい対象を知らなかったら使えないでしょ?
0944940
NGNGVisualC使ってるのですが
別プロジェクトで平行してdllを作っているので
#include "../dllProj/***.h"
このようにして常に最新のdllヘッダをincludeするようにしました
これであとはlibとdllをdllProjの方から呼び出せればいいのですが・・
設定のところでincludeファイルにdllProjを含めてもうまくいかない・・・
0945デフォルトの名無しさん
NGNGんだけど、それは普通に参照回数を数えるのに比べて何がどう違って
いて、どうメリットがあるんでしょうか?
ドキュメント見たけど書いていないっぽいのでどなたか教えて頂けないでしょうか。
0946940
NGNGメインプロジェクトで
myclass *test;
init(test);
としてdllの方のinit関数で
test = new myclass
などすることは可能なのでしょうか?
どうもここがうまくいきません。
0947940
NGNG動的にメモリ領域を確保してメインプロジェクトで使うことは可能かどうかということです
ちなみに
warning C4700: 値が割り当てられていないローカルな変数 'test' に対して参照が行われました。
という警告がでてはしまうのですが・・・・
0948デフォルトの名無しさん
NGNGメインで確保したメモリはメインで開放、
DLLで確保したメモリはDLLで開放する。
Windowsの力を借りれば、どっちで開放してもいいようにもできる。
その前に引数とはどういうものかを知れ。
0949デフォルトの名無しさん
NGNGuse_count_ と weak_count_ を分けているので weak_ptr<> が作れるぞ、
ってゆーか、別に普通に数えているのと大差ないと思うけど。
0950デフォルトの名無しさん
NGNGmyclass *test;
dll_init( &test );
@dll
*test = new myclass
ダロ。ポインタわかってるか?
0952デフォルトの名無しさん
NGNGこの、unsigned っていうのはなんでしょうか?
C or C++自体初心者なので、頭についているのも理解できません。
0953デフォルトの名無しさん
NGNG局所的な、パフォーマンスが要求されるポインタには、scoped_ptrを使えって。
shared_ptrは、たとえばSingletonだったり、木構造だったり、
複数の参照元を管理するためにつかうもんだろ。
0954デフォルトの名無しさん
NGNGMicrosoft Speech SDK5.1をダウンして、付属の音声認識サンプルプログラムcoffees0
をコンパイルしようとするとcofgram.hが見つからずエラーが出てしまいます。
ハードディスク内を全検索かけても、googleで検索かけても何も見つかりませんでした。
confgram.hはどーすれば手に入りますか?よろしくお願いします。
0955名無しさん@カラアゲうまうま
NGNGまるち は しね
0956デフォルトの名無しさん
NGNG0957デフォルトの名無しさん
NGNG0958デフォルトの名無しさん
NGNG0959デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/
0960945=951
NGNGいやぁ、vector に突っ込む時とかの事を考えてのつもりです。
scoped_ptr は使えないっすよね。で、shared_ptr を増産すると
普通の counted_ptr(とでも言うのかな?)と比べて weak_count_
の分よろしくないかなぁと思っただけでして・・・
0961旧スレなのでsageで
NGNGカウントが2種類あるからと言って sizeof( shared_ptr<T> ) は増えたりはせんから、
同じオブジェクトを指す shared_ptr の増産なら問題は皆無だぞ、念のため。
1オブジェクトにつき4Byte程度…のメモリ消費が気になるなら
独自のカウンタを書いて intrusive_ptr<> を使うべきかと。
0962デフォルトの名無しさん
NGNG0963945=951=960
NGNGサイズの問題を考えるとすれば、そうです。つまり、
counted_base::use_count_ と counted_base::weak_count_
の二つを持つ shared_ptr は、フツーに count数を数えるようなの
と比べて weak_count_ の分大きくなるなぁという風に思っただけです。
あんまり weak_count のメリットを僕が分かってないせいもありますが、
「そんなのイラナイから余計なサイズ食わないで欲しいなぁ」
ってのが一つ。
それと、>>962 の言うように、「余計なカウントしなくていいのになぁ」
というのも一つ。
まぁぶっちゃけ「参照回数のみを数える余計な事はしない軽いsmart_ptrも欲
しいなぁ」とちょっと思ったっていうその程度です。なんかお騒がせしちゃっ
たみたいでスマソ
ちなみに intrusive_ptr なる物は始めて知りました。確かにありますねぇ。
ちょっと見てみます。
0964デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNG0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNG0971デフォルトの名無しさん
NGNG埋め立て!!
0972デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0973デフォルトの名無しさん
NGNG0974デフォルトの名無しさん
NGNG0975デフォルトの名無しさん
NGNG0976デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0977デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0978デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0979デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0980デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0981デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0982デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0983デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0984デフォルトの名無しさん
NGNGC++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNGめ
立
て
0987デフォルトの名無しさん
NGNG立
て
0988デフォルトの名無しさん
NGNG立
0989デフォルトの名無しさん
NGNGめ
立
て
!
!
0990デフォルトの名無しさん
NGNGめ
立
て
0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNGhttp://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デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
C++相談室 part9
http://pc3.2ch.net/test/read.cgi/tech/1027347982/l50
0994デフォルトの名無しさん
NGNGm
e
t
a
t
e
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。