C++相談室 part9
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNG(´∀`).。o(関連URLは>>2-5の辺り)
0002デフォルトの名無しさん
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/
Part8
http://pc3.2ch.net/test/read.cgi/tech/1025010364/
0003デフォルトの名無しさん
NGNGhttp://pc.2ch.net/tech/kako/996/996640937.html
0004デフォルトの名無しさん
NGNG0005デフォルトの名無しさん
NGNGhttp://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
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/
C++Builder相談室
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=969458279
新C++Builder相談室(C++Builder相談室 Part2)
http://pc.2ch.net/test/read.cgi/tech/997074601/
C Builder相談室 Part3
http://pc3.2ch.net/test/read.cgi/tech/1016065855/
0009モナ吉
NGNG0010デフォルトの名無しさん
NGNGたまにはセンセーショナルな見出しをと思いました。
0011デフォルトの名無しさん
NGNGぜんぜん最高じゃない
0012デフォルトの名無しさん
NGNG0013デフォルトの名無しさん
NGNG配列のコピーって事?vectorを使えばいいじゃないか。
0014デフォルトの名無しさん
NGNGケコーンしようよ(w
001511
NGNGtypedef int inth[10][19] ;
inth a,b ;
とかやったら
a=bで要素の代入ができるべきだ!!
コピーできない組み込み型があるのは気持ち悪い
0016デフォルトの名無しさん
NGNGそれはC++の配列型が自分自身の大きさに関する情報を持たないため。
C言語との互換性を重視した結果です。
0017デフォルトの名無しさん
NGNGその理由は
↓
0018デフォルトの名無しさん
NGNGそれ同士をコピーすればよい。って、こんなトリッキーなテクニック
はCだけで実行すべき。C++はコンテナがあるんだからそれを
使え。
0019デフォルトの名無しさん
NGNGみたいなことをしたらいいんでは?(C的発想)
ちょっと複雑なクラスになるとdieだけどなー
002011
NGNGそうそうそれが言いたいんだよ
構造体につつめば出来るというのに
そのままだと出来ないのはおかしい!
配列渡しが見た目には値渡しなのに
強制的にポインタ渡しになって気持ち悪すぎ
002111
NGNGC++キモイ
0022>>1さん、センセーショナルな見出しはまずかったかモナー
NGNG0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG0025デフォルトの名無しさん
NGNG002611
NGNGだれ?
わたしはすでにC++&STL&Boostにどっぷり漬かってるから
いまさらC++から抜け出せない
>>22
あれは面白いね。あの初期化リストがふるくさい構文だと気づくまで
ちょっととまどったけど
0027デフォルトの名無しさん
NGNG002811
NGNGコンストラクタ呼び出しの初期化しかしなくなって久しいものだから
boost::array<int,4> a = { { 1, 2, 3 } };
みたいな。(マニュアルより)
0029デフォルトの名無しさん
NGNG> コンストラクタ呼び出しの初期化しかしなくなって久しいものだから
「しか」って、・・・幸せな環境でやってんだな。
003011
NGNG003211
NGNGあの初期化はあるんだから
003329
NGNGトリアエズ、ゼンブアゲデカイテルオマエヨリハオチツイテイル
003411
NGNG(見やすい)プロパティの初期化自体は必要だから
C99の指定初期化子のようなものを導入してほしいなあ
でもコンストラクタも併用できたほうがいいから
c++builderの__propertyみたいのもほしいなあ
C++の気持ち悪いものの一つだなあ
0036デフォルトの名無しさん
NGNGpropertyはtemplateで作れよ
003711
NGNGあ〜なるほど静的な初期化かあ
隙間なく初期化することしかできなくて
簡便なCの構造体初期化がむいてるわけかあ
しかしそういうところでC++を使うのかなあ
>>36
そういうことじゃなくてプロパティとして初期化を…
もしかしてできるのか?ちょっと調べてみる
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGC++コンパイラとCコンパイラ、両方使える環境なら、
Cを選ぶ理由って何かありますか?
チームのスキルとかは、たぶんそれが現実的だけど、とりあえず無視するとしたら?
004011
NGNG当然だけどもpropertyクラスを作っても
プロパティとして振舞ってはくれない…
Bjarneなんとかしろ!!
0041デフォルトの名無しさん
NGNG無いに一票。
0042デフォルトの名無しさん
NGNGたとえば、こんなの。
もう少し変更すれば、うまい具合に使える。
#include <stdio.h>
template<class T>
class property{
private:
void (*m_setter)(const T);
T (*m_getter)();
property(){;}
public:
property(void (*setter)(const T), T (*getter)() ){
m_setter = setter;
m_getter = getter;
}
~property(){;}
operator T(){
T dummy = (T)0;
if(m_getter)
dummy = m_getter();
return dummy;
}
T &operator=(T value){
if(m_setter)
m_setter(value);
return value;
}
T operator=( property<T> obj ){
*this = (T)obj;
return (T)*this;
}
};
int I;
void setI(const int i){
I = i;
}
int getI(){
return I*10;
}
void main(){
property<int> pi(setI, getI);
pi = 10;
pi = pi;
printf("%d", (int)pi );
}
0043デフォルトの名無しさん
NGNG何も無い。
0044nanashin
NGNGVC.netでDLL開発をしています。
DLLのプロジェクトとそれを実行するプロジェクトの二つのプロジェクトを平行して開発しており、
どちらのプロジェクトでもdllのヘッダmydll.hをincludeしているのですが、
小クラスが大クラスのメンバでありかつdllから大クラスへのポインタをインポートしている時に
大クラスから小クラスのオブジェクトは見えるのですが、そこから小クラスのメソッドにアクセスしようとすると
未解決の外部シンボルというエラーが出てしまいます。どなたかアドバイスを・・・
具体的には
---------------mydll.h----------------------
myClass{
vector<mySubClass *> subs;
}
mySubClass{
void submethod()
.........
}
------------myProg.cpp--------------------
#include "mydll.h"
MYDLL_API myClass * class; //MYDLL_APIはvoid _delspec(dllimport) と同じこと
class->subs.at(0)->submethod();//????
submethod
SubClass:submethod()が未解決の外部シンボル・・・
というエラーになってしまいます。
0045nanashin
NGNG大クラス直接クラス内のメソッドを
class->メソッドとしても未解決のシンボルになってしまいますね。
でも良く考えたら関数の中身がどこにあるかわからないので
そういう風になる気がしてきました。
なのでclassか関数かをdllexportすれば良かろうと思ったので
MYDLL_API 小メソッド::submethod
や
MYDLL_API mySubclass{....}
みたいにやって見たのですが、どちらもdllexportが許可されませんでした・・・
0046nanashin
NGNGclass MYDLL_API myClass{ ...}
でいいのですねMYDLL_APIの位置を間違えておりマシたので解決ヽ(´ー`)ノ
0047デフォルトの名無しさん
NGNG選ぶやつ(いるならば)に聞いてみてください
0048デフォルトの名無しさん
NGNG1 移植性を重視する場合。(C++ の処理系、まだ C と比べると処理系間の差が
大きいから)
2 既存のコードが C で書かれている場合。C++ にしても、あまり嬉しくない。
3 OS の API など、多くの環境で使うことを前提とするバイナリインターフェースを
提供する場合。(ただし Windows に限って言えば COM や .NET があるから、
C++ の方が逆に楽)
4 バイナリの大きさや、メモリ使用量の制約が厳しい場合。組込用の C++ 使うと
いう選択肢はアリ。
でも C++ 使わない理由は、年々減ってると思うよ。
0049すみません
NGNGソースの拡張子は cpp で、 __stdcall でエクスポートしています。
VC++でコンソールアプリのプロジェクト(HelloWorldアプリケーション)
を作成して作ったDLLをコールするサンプルプログラムを作りました。
うまくリンク出来ました。
VC++でコンソールアプリのプロジェクト(空のプロジェクト)を
作成して、メインのソースは、拡張子 .c としました。
プロジェクトをビルドすると、リンク時にLINK2001というエラーが
出て、DLL内の関数が見つからないと言われてしまいます。
DLL側がC++でコンパイルされていて、呼び出すメイン側が
Cでコンパイルされている事が原因のような気がするのですが、
解決方法がわかりません。
どなたか判る方いらっしゃいませんか?
0050デフォルトの名無しさん
NGNG0051すみません
NGNGはい。
DLL側で自動作成されたヘッダファイルの中に、
#ifdef XXXXXX
__declspec(dllexport)
#else
__declspec(dllimport)
#endif
という感じのロジックが自動作成されています。
DLLを呼び出す側でもこのインクルードファイルを
インクルードしています。
但し、呼び出す側では、明示的に #define していないので、
__declspec(dllimport) が有効になっていると思います。
ここに何か追加しないといけないんでしょうか?
0052デフォルトの名無しさん
NGNG};
で宣言を囲む
0053nanashin
NGNG};
は入門書にそうなってたのでやってはいるが
良く意味がわからない・・・
C++ではなくCにするという意味なんだろうけど・・・
0054デフォルトの名無しさん
NGNGC++では関数の多重定義などの機能を、リンカの重大な変更無しに実現する
ために、「名前マングリング」を行う。
これは、同一名の関数の名前に異なる名前を付加し、異なった関数として扱う
ための内部的テクニックであって、コンパイラによってその実現方法は異なる
ものの、リンカに変更を加えていない処理系では大同小異である。
どのように「名前マングリング」が行われるのか直に目で見たければ、ソース
のコンパイル結果をアセンブリ出力して、関数にどんなラベルがついているか
見ればよい。
extern "C" キーワードは、そのような「名前マングリング」を行わないことを
コンパイラに指示し、従来のCでコンパイルされたオブジェクトとのリンクを可能
にする。
0055デフォルトの名無しさん
NGNGextern "C" キーワードは、そのような「名前マングリング」を行わないことを
コンパイラに指示し、従来のCでコンパイルされたオブジェクトとのリンクを可能
にする。
どうあがいてもDLLのエクスポート関数には妙なpostfix付いたりするけどね。
0056デフォルトの名無しさん
NGNGそれは呼び出し規約の整合を取るため、
MSのコンパイラが自分で規約を作っているだけ。
Borlandだとまた別だろ。
それから、DEFファイルで好みの名前でエキスポートできるよ
0057デフォルトの名無しさん
NGNGそうそう、それで、VC++とBC++間のリンクが、extern "C"付けてもうまく
いかないことがあるみたい。
0058デフォルトの名無しさん
NGNGそんなことはない。
VC++とBC++の間のリンクで問題があるのは、long doubleを使った場合や、他方の
ランタイムライブラリに依存した処理がある場合だけだと思うけど。
0059デフォルトの名無しさん
NGNGどっちが正しいの?
0060デフォルトの名無しさん
NGNGそうか・・・・実は他スレ
http://pc3.2ch.net/test/read.cgi/tech/1002377328/
で悩んでた奴がいるんだが、答えてやれなかった。
0061デフォルトの名無しさん
NGNGVCはstdcall規約だと名前の後ろに@xって付くけど、
borlandだと付かない
0062デフォルトの名無しさん
NGNGDEFファイルを使えば任意の名前でexportできる。
0063デフォルトの名無しさん
NGNG非常に原始的だがね。
C++をあそこまで拡張したあげくにこのていたらく。
0064デフォルトの名無しさん
NGNGextern "C"だけじゃうまくいかないって話じゃん。
DEFファイルを持ちだせば、__cdeclの関数もVBで使える名前に変えられちゃうし、
望むままにできちゃうじゃないか。
0065デフォルトの名無しさん
NGNG0066すみません
NGNG昨日の夜、出来ました。
具体的には(自動作成されたマクロは展開して書いておきます)、
VisualC++のDLLでexportする関数は、
extern "C" __declspec(dllexport) long __stdcall func(long n);
extern "C" __declspec(dllexport) long __stdcall func(long n)
{
return n;
}
としておいて、DLLを作成し、
これをコールするC側では、
__declspec(dllimport) long __stdcall func(long n);
int main(int argc, char *argv[])
{
func(10);
return 0;
}
とすれば、C++で作成したDLLをCから呼び出すことが出来ました。
皆の衆THX
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNGstruct Base {
void func(void) {}
Base(void) { func(); }
};
struct Derived : public Base {
void func(int) {}
Derived(void) { func(); } // Base::func()と書かないとダメ
};
上のように継承先でメンバ関数をオーバーライドした場合
"基底クラス::関数名"と書かないとコンパイルではじかれますが、
こうなる理由として積極的なものってあるんでしょうか?
というのは、引数から適切なメンバ関数を見つけるとすれば
上の場合はどこにも曖昧な点がない、つまりDerivedのコンストラクタで
指定したfunc()はBaseのfunc()だと一意に判ると思うのですが…。
006911
NGNG同名の基底クラスのメンバは隠蔽される。
さまざまなチェック機構はC++の開発支援の目玉の一つ。
おかげで文法が気持ち悪い。
(純粋仮想の)=0だとか(メンバ関数の)constだとか
0071デフォルトの名無しさん
NGNGFunctionが3つ、まずはget_data functionでarrayに5つ整数をstoreして、
mainに戻り、mainでユーザーに任意の整数を入力してもらい、
その後、findnum functionでその整数がarrayの中にあるかどうか確かめる
というプログラムに四苦八苦してます。
findnumはpointerを使用しなければなりません。
私が思うにfindnumでは、整数がarrayの中に見つかった場合、
arrayの何番目のデータがユーザーの入力した任意の整数と同じなのか
を返さなければならないので、pointerのaddress(&)を返さなきゃいけないと思うのですが、
どうもpointerの概念をちゃんと理解していないらしく、やり方がわかりません。
007271_main
NGNGvoid getdata(int []);
int findnum(int (*));
const int FAIL = 0;
void main(void)
{
int num[5];
cout << "Please input the five numbers\n ";
cout << "to store in the array.\n ";
cout << "After storing them in the array, \n";
cout << "this program will search the number.\n\n";
getdata(num);
int rc = findnum(num);
if(rc!=FAIL)
{
cout << "Found it\n\n";
} // End if
else
cout << "The program could not find the number.\n\n";
} //End of function main
0073デフォルトの名無しさん
NGNGError: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
どうすればいいんですか?教えてください(゚Д゚)ゴルァ!!
0074デフォルトの名無しさん
NGNG-Wオプションをつけなかったから、WinMain()がメイン関数だと見なされて
ないだけだろう(゚Д゚)ゴルァ!!
0075デフォルトの名無しさん
NGNG007671
NGNGvoid getdata(int *Number[])
{
for (int i=0; i<5; i++)
{
cout << "Please input # ";
cout << (i+1) << " number : ";
cin >> (*Number)[i];
} // End of for
} // End of function getdata
int findnum(int (*no))
{
int value = 0;
cout << "Enter the number you search for : ";
cin >> value;
for (int i=0; i<5; i++, no++)
{
if (value == *no)
{
return (i);
} // End of if
return FAIL;
} // End of for
} // End of function findnum
0077デフォルトの名無しさん
NGNGおかスィなあ。そのエラーは、いまだにC++コンパイラがmain()をメイン
関数だと思っちょるエラーだぞい。
007875
NGNGbcc32 test.cpp -Wというようにしてた。
オプションのつけ方間違えた…
鬱打詩嚢
0079デフォルトの名無しさん
NGNG0080デフォルトの名無しさん
NGNGそれやると、ウィンドゥズプログラムとして動かないものが出来上がって
しまう。mainとWinMain両方定義しておけばいいけど。
0081デフォルトの名無しさん
NGNGmain()中でGetModuleHandle(NULL)してインスタンスハンドルを得るらしい。
MozillaのwinEmbedで見た。
ttp://lxr.mozilla.org/mozilla1.0/source/embedding/tests/winEmbed/winEmbed.cpp
0082デフォルトの名無しさん
NGNGスレ違いか?
…逝ってくる。
0083デフォルトの名無しさん
NGNGなかなか面白いですね。スタートアップコードが本来処理する部分を
自分で書くわけですね。それでもまだマルチスレッド動作の時に大丈夫
かという不安は残ります。
>>82
http://pc3.2ch.net/test/read.cgi/tech/1018239290/ 当たりで書くと
喜ばれる話題かもしれません。
0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNG{
main();
return 0;
}
0088デフォルトの名無しさん
NGNGcoutとか使いにくくてしょうがないのですが。
0089デフォルトの名無しさん
NGNGいいんじゃないかな。
0090デフォルトの名無しさん
NGNG慣れれば使いやすいよ それに便利
void Print(std::ostream &os)
{
os << "プリントしたい中身を書く";
}
みたいなの作っておけば
Print(std:cout);はもちろん
std::ofstram of("hoge.txt");
Print(of); もできるし
std::ostringstream os;
Print(os); ともできる
printfとかじゃこんな事するのはめんどくない?
まぁ適材適所だと思いますけど
0091デフォルトの名無しさん
NGNG009288
NGNGまだ勉強中の身で生意気を言ってみたのですが…
適材適所。そうですね。
両方を選んで使えるようになる為、しっかり勉強します。
ただただ、楽な方に逃げるところでした。
0093デフォルトの名無しさん
NGNGfprintf()
どっちかってーとクラスごとにoperator<<を定義してがすがす流すほうが利点じゃないか?
0095デフォルトの名無しさん
NGNG俺は付けない方が正しいと思ってたんだけど、最近付けてるソースよく見る。
Foo& operator =(const Foo &bar);
const Foo& operator =(const Foo &bar);
0096デフォルトの名無しさん
NGNG(a=3)=4;
0097デフォルトの名無しさん
NGNGそう、俺もそれが根拠。
迷った時は組み込み型の真似。
でもじゃあなんでconst付けてる奴がいるの?
0098デフォルトの名無しさん
NGNG逆だよ。組み込みの型なら、96はコンパイルできない
0099デフォルトの名無しさん
NGNG0100デフォルトの名無しさん
NGNGやってみて。
0101デフォルトの名無しさん
NGNG全て通るようですが・・・。
0103デフォルトの名無しさん
NGNG.cppだと通る
.cだと通らない
0104デフォルトの名無しさん
NGNG0105103
NGNG0106デフォルトの名無しさん
NGNGでもこのスレ C++ でしょ。
0107デフォルトの名無しさん
NGNG0108デフォルトの名無しさん
NGNGまあ、C++的にはそれでいいわけだから、C++プログラマとしては
恥じる必要はないのか…?
0109デフォルトの名無しさん
NGNGCの仕様ということでは?
0110デフォルトの名無しさん
NGNG(a=3) が右辺値だから。
それより、>>96 みたいなコードを見て病的だと思わないのは
ヤバいかもしれません。
011111
NGNG前置++とかもそうだね。Cに参照型がないことを考えれば
もっともだけども、C++での参照型のあつかいは
コンパイラへの遠慮のせいか中途半端で気持ち悪い。
どうせ実装はポインタになっちょうのにね
自動的に参照か値か判断されるのもなあ、
かといってref修飾子もエレガントじゃないしなあ
0112デフォルトの名無しさん
NGNGa[4][4]:
のとき、
&a
は何を表すんでしょうか?単に
a
と書くときとの、意味の違いを教えてください。
#ひょっとして、文法的に間違ってるのかな?gccでは通るんだけど。
0113デフォルトの名無しさん
NGNGa[0][0]:
のアドレス。だから一緒かと。
まぁ、偶然の一致な訳だけど。
011411
NGNGT a[4][4]なら式で評価されると
aはT(*)[4]で&aはT(*)[4][4]だから別物だよ。
11でも書いたけど配列の仕様は気持ち悪いよね
0115デフォルトの名無しさん
NGNG俺はそのへん、全然分からん。怖いから、そんなコード書くような状況になったら、
すぐにvectorに逃げるよ。
011611
NGNGほしいね。typeidやsizeofではT[4][4]なんだから。
それでT[4][4]からT(*)[4]のキャストをサポートすれば
いいんだから。気持ち悪いったらありゃしない。
そろそろ嫌われるな、おれ
0117デフォルトの名無しさん
NGNG0118デフォルトの名無しさん
NGNG根本的に・・・。
0119デフォルトの名無しさん
NGNGこれでわかる?
てすとぷろぐらむ
---------------
#include <stdio.h>
int main()
{
int a[2][4];
printf("adr a = %x\n", a);
printf("adr a+1 = %x\n", a+1);
printf("adr &a = %x\n", &a);
printf("adr &a+1 = %x\n", &a+1);
return 0;
}
-------------------
じっこうけっか
-------------------
adr a = 12ff6c
adr a+1 = 12ff7c
adr &a = 12ff6c
adr &a+1 = 12ff8c
0120119
NGNGsizeof(int)は4ね。
0121デフォルトの名無しさん
NGNGaという表記は、int [4]という型の要素を3つ持つ1次元配列。
a は &a[0] と同義なので、今言った1次元配列の先頭要素への
ポインタのこと。つまり、int (*)[4]ということになる。
&a は配列a全体へのポインタという意味になり、int(*)[3][4]
という型になる。
まとめると、
a --> &a[0] --> int (*)[4]
a[i] --> &a[0][0] --> int *
a[i][j] --> int
&a --> int (*)[3][4]
0122デフォルトの名無しさん
NGNGa[i] --> &a[i][0] --> int * でした。
0123デフォルトの名無しさん
NGNGわかりやすい
0124デフォルトの名無しさん
NGNG>>=はC++ではLvalueを返して、CではLvalueを返さないからね。
>>前置++とかもそうだね。
はじめて知りました。試して感激。てっきりC++でも、式の結果は左辺値でなく
値と思ってました。これってストラウストラップの本とか見ても載ってなさそう
なんですが、どこかに説明ありますか?ちなみに後置++は値ですね。何故だろう。。
012511
NGNGそれによると?:もLvalueを返せるようだね
後置++はインクリメント前の値を返すから
これを参照で返す仕様にするとインクリメントのタイミングが
ややこしくなるし、不自然だね
0126デフォルトの名無しさん
NGNGホントだ、載ってました。6.2.1ですね。
どうもです。
by 124
0127デフォルトの名無しさん
NGNG0128デフォルトの名無しさん
NGNG3次元配列の場合はどうなるの?
といってみるテスト
0129121
NGNG配列の配列を要素に持つ配列とかいうふうに考えていけば
良いと思う。結局は1次元配列に帰着されるということ。
ちなみに121の"表記"というのは"配列"のこと。
int a[3][4][5]; とあった場合
aという配列は、int [4][5]という型の要素を3つ持つ1次元配列。
ややこしいけど言葉にすると、「"int型の要素を5つ持つ配列"を要素
として4つ持つ配列」を要素として3つ持つ1次元配列。
プログラム中でaと書くと、それは&a[0]を意味し、直前に言った
1次元配列の先頭要素へのポインタとなり、その型は
int (*)[4][5]となる。
a[i]という配列は、int [5]という型の要素を4つ持つ1次元配列。
言葉にすると、"int型の要素を5つ持つ配列"を要素として4つ持つ
1次元配列。プログラム中でa[i]と書くと、それは&a[i][0]を意味し、
直前に言った1次元配列の先頭要素へのポインタとなり、その型は
int (*)[5]となる。
a[i][j]という配列は、int型の要素を5つ持つ1次元配列。
プログラム中でa[i][j]と書くと、それは&a[i][j][0]を意味し、
直前に言った1次元配列の先頭要素へのポインタとなり、その型は
int *となる。
でもってa[i][j][k]はint。
&a はaという配列全体へのポインタという意味になり、その型は
int (*)[3][4][5] となる。
頭がおかしくなりそうだけど。
0130112
NGNGなんとなく分かったような気がしました。
うちの大学の教授に聞いても分からなかったし、どのポインタ関連の本を
読んでも書いてなかったので質問したんですが、
まさかこんなに丁寧に答えてくれるとは思いませんでした。
ありがとうございました。
0131デフォルトの名無しさん
NGNGBigObj obj; // と一旦作って
obj.hoge = moge;
obj.hoge2 = moge2;
... と色々変更して
最後にpush_backするとコピーの手間が余計な気が済ます
あらかじめ確保されたvectorの領域を直接書き換えられないでしょうか?
array.reserve(適当);
BigObj &obj = array.end();
obj.hoge = moge;
array.resize(array.size()++);
とか、あんま美しくないんですけど、他にやる以外方法ないんでしょうか?
0132デフォルトの名無しさん
NGNGBigObjにデフォルトコンストラクタつくって、std::vectorに
デフォルト値つっこんでから変更したら?
0133デフォルトの名無しさん
NGNGvector使う意味あまりなさそう
0134446
NGNGお願いします。
0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNG実行ってことは、インタプリタが欲しいん?
0137デフォルトの名無しさん
NGNGプラットフォームを書いてくれないと何とも…。
UNIX系だったら最初からコンパイラついてると思うし。
WindowsだったらやっぱりBorland C++ Compilerかねぇ。
0138デフォルトの名無しさん
NGNGとりあえず、gccだな。Windows, Mac(X), UNIXどれででも使える。
0139Rina ◆tI333vNE
NGNGとりあえず, yaccとlexで….
…嘘です, ごめんなさい.
0140デフォルトの名無しさん
NGNGyaccとlexって言いたかったの?
0141Rina ◆tI333vNE
NGNG…よくよく考えたら, 自分で書こうとして放置プレイした
まんまなんで, 人の事言えないなぁとw
0142デフォルトの名無しさん
NGNGでも、コンパイラがないと、yaccやlexだけではコンパイラ作れないよね。
0143Rina ◆tI333vNE
NGNG0144デフォルトの名無しさん
NGNG見たので一番シンプルだったのは operator<< オーバーライトで
BinWriter << メンバ1 << メンバ2 << メンバ3
見たいに書いてるやつ。
でもグローバルに operator<<が大量に発生するんだよね…
基底クラスを工夫すればもっといい書き方あるかなぁ…?
0145
NGNG電話帳というのを作らないといけないのですが、ちょっと
エラーが解決できなくって・・。
バイナリーサーチツリー自体は完成して、で、テンプレートを
使ってどんなオブジェクトでも収納できるようにしたんですよ。
テストしてみるとIntのときは問題なくうごいているんですが、
いざ自分の作ったPersonというクラスを収納しようとすると
コンパイルはできるんですが、ビルドの際に
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/BinaryTreeNode.exe : fatal error LNK1120: 1 unresolved externals
というメッセージがでて実行できません。これは一体
どうすればよいのでしょうか?自分なりに検索してプロジェクト
の設定のところをいじってみたんですが、もう行き詰まってしまい
ました・・。どなたかご存知のかたいらっしゃいますでしょうか。
0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNGPersonをintに直したら通るんか?
別のところもいじったか?
0148デフォルトの名無しさん
NGNGなんでバイナリサーチでわざわざツリーを作るんだ?
バイナリサーチじゃなくて、2分木でデータベースを作る課題か?
0149
NGNGはい。
Person を int に直したらちゃんと動いてくれます。
ためしに乱数を入れてみて表示したらちゃんとソート
されてました。
>>148
うん??なんででしょう?いや、実際よく
わかんないっす・・汗
0150デフォルトの名無しさん
NGNG関数側渡して値を入れさせてますが、どうも反映されません。
構造体の定義を変数の前でやると「NULL」入ってるし
変数の後でやったら「セグメンテーション違反」なるし。
何がおかしいのでしょう…。解る方教えて下さい…。
int main(void){ int i,terms; FORMTERM *term; terms=Get_Form(term); printf("Content-type: text/plain\n\n"); printf("FORM VARIABLE\n"); for(i=0;i
int main(void){ int i,terms; FORMTERM *term; terms=Get_Form(term);
www-cms.phys.s.u-tokyo.ac.jp/%7Enaoki/CIPINTRO/CCGI/SRC/form.cc を参考にしました。
0151デフォルトの名無しさん
NGNG殺人級に読みにくい
0152
NGNGあ!そうそう!それです!
2分木の各ノードにPersonというクラス
を収納したいんですよ。
Personは NameとNumber(共にString)を
持ってるだけの単純なクラスです。
0153デフォルトの名無しさん
NGNGPersonの定義部と、ツリーに格納する周辺のコードを貼ってよ
0154デフォルトの名無しさん
NGNGテンプレート使え。
但し
template <class T> writer& oeprator<<(writer& w, T &t)
と汎用なのは禁句。特別バージョンとあいまいさが解決できないから。
class tを一度ラップして書きましょう
0155デフォルトの名無しさん
NGNGスレ違い。
0156デフォルトの名無しさん
NGNG0158
NGNG逝ってきます
0159デフォルトの名無しさん
NGNG急にエラー起こすようになりました。
ブラウザのバージョンアップについていけないっていうことありますか?
あるとすれば、どんな理由が多いでしょうか
0160デフォルトの名無しさん
NGNG・環境
・使用ライブラリ(WinInet/Winsock)
とか記載しろよ
0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNG0163デフォルトの名無しさん
NGNG0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNGC++関係なくない?
DFAはdeterministic finite automatonだっけか?
0166163
NGNGそうでもないんですね(^∀^;)
0167デフォルトの名無しさん
NGNG使いたいんですが、複数の派生クラスを作ると
"すでに定義されています"というエラーが出てしまいます。
// A.h
class A {
protected :
static int num;
};
// B.h
class B : public A {};
// B.cpp
int B :: num = 1;
// C.h
int C :: num = 2;
// C.cpp
class C : public A {};
numはそれぞれの派生クラスで定義しないといけないんでしょうか?
0168デフォルトの名無しさん
NGNGB::numもC::numも実体はA::numだからエラーが出て当然じゃないの?
0169デフォルトの名無しさん
NGNGstatic int num; の実体は一つしか存在しません。いくら派生しても
同じです。
だから二重定義エラーが出る。
0170デフォルトの名無しさん
NGNG0171デフォルトの名無しさん
NGNGん?どうした?
0172デフォルトの名無しさん
NGNGおくびにも出さない必死なC++厨
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNGしかもそれらを安全に使うためにはより多くの知識が要求される
ライブラリでなんとかするんならVBでもできる罠
つまり費用対効果で見るとVB以下。
0176デフォルトの名無しさん
NGNG0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG〜〜〜〜〜〜〜〜〜〜〜〜終了
〜〜〜〜〜〜〜〜〜〜〜〜終了
〜〜〜〜〜〜〜〜〜〜〜〜終了
〜〜〜〜〜〜〜〜〜〜〜〜終了
0180デフォルトの名無しさん
NGNG(´Д`)
(( ─━OO━─ ))
∪∪
0181デフォルトの名無しさん
NGNGやせたいのかい?
0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNG0184デフォルトの名無しさん
NGNGΣ(゚Д゚) それが核心だったのかー
0185デフォルトの名無しさん
NGNG所詮現実にはCが築いた資産の価値を認める世間とそうせざるを得ない現実。
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
NGNG・C++について言いたいことがあればどうぞ ++
http://pc.2ch.net/test/read.cgi/prog/1017746969/
0190デフォルトの名無しさん
NGNGみなさんはなぜそんなに盲目C++信者なんですか?
いつ絶滅してくれますか?教えてください。よろしくお願いします。
0191Stroustrupは神様です
NGNG0192デフォルトの名無しさん
NGNGおいたが過ぎますぞ。
0193デフォルトの名無しさん
NGNG0194デフォルトの名無しさん
NGNG同意。みんなCに帰ろう
0195デフォルトの名無しさん
NGNG同意。C++は先細って行くだろうな
0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNG同意。C++は自分の重みでつぶれてしまうだろうな
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNG同意。C++厨はC++開発者の自作自演。このスレもその道具。そこまでしてはやらせたいのか・・。
0200デフォルトの名無しさん
NGNG同意。200
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNGCならマシだが。なんつー漏れがヘタレか。
0205デフォルトの名無しさん
NGNG随分簡単な悩みですね。
0206デフォルトの名無しさん
NGNG言語に関わらず、残念なコードをトレースするのはつらい。
0207デフォルトの名無しさん
NGNGC++が糞なのは、例外がたんまり織り込まれた構文で、
言語自体の能力はまともだし、面白いと思うが。
プリプロセッサを引きずったのが最大の敗因と考える。
0208デフォルトの名無しさん
NGNG>C++が糞なのは、例外がたんまり織り込まれた構文で、言語自体の能力はまともだし、面白いと思うが。
文の始まりと終わりが対局だぞ・・・?
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNGPerlはともかくJavaは参照しかないんだからポインタの基本はわかってて然りっしょ。
0213デフォルトの名無しさん
NGNGいやそうでもない・・・ポインタ渡しだというのに、実体渡しであるかのように
書かれたコードを見て激しくウツになったよ。
JavaもPerlもそのレベルのコーダが一人居ると死ねるね。
0214デフォルトの名無しさん
NGNG思いっきり引数に3足してたりとか?w
0215デフォルトの名無しさん
NGNGそれならダメな人ってすぐに分るけど・・・
具体的には、関数にインスタンスを渡してるんだが、
その関数が中身を書き換えるような操作をするのね。
それに気づいてない。
0216デフォルトの名無しさん
NGNG意味不明な情報隠蔽はトレース隠蔽(言葉変)に思えてきて。
トレースというより、ウォーリーを探している感じ。
そのうち、トレースしていた場所が何処だったか分からんように
なったり。
ま、自分の理解力が足らんのだろうと、自戒する。
0217デフォルトの名無しさん
NGNG{
if(p->SomeMethod() != 0)
{
p->SomeField =0;
return;
}
}
これは許容範囲でしょ?
void hoge(SomeClass *p)
{
if(p->SomeMethod() != 0)
{
p = p->GetNextSomeClass();
return;
}
else
{
・
・
・
}
これも問題ない。
引数はポインタのコピーだからそのコピーをいじっても引数のポインタの値は変わらない。
何が問題?
素人でスマソ。
0218デフォルトの名無しさん
NGNGどれほどバカなコードがまかに通ってるのか見てみたい。
0219デフォルトの名無しさん
NGNG>がまかに通ってるのか見てみたい。
ミスタイプにしてはキーの位置が離れすぎてるぞ?w
0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNG0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNGでも>>223と同意。
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNGあー、ほらなんつったっけ、日本語ベースなあれは……
0227デフォルトの名無しさん
NGNG0228デフォルトの名無しさん
NGNGここではIMEの日本語入力方法のことじゃん?
普通ローマ字入力じゃね?
0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNG0231デフォルトの名無しさん
NGNGあの、VC++で、CGIにデータを送りたいんですが
どういう関数を使えばいいんでしょうか?
0232デフォルトの名無しさん
NGNG0233デフォルトの名無しさん
NGNG実際のところはsendだけでいいんでしょうか?
0234デフォルトの名無しさん
NGNG当然sendをするに当たって前準備などをしなければならない。
0235デフォルトの名無しさん
NGNGとりあえずインターネット(つーか、TCP/IP)とのデータのやりとりには
WinSockっつーAPI体系を使うのが普通なのでそれを調べてみては。
っていうか、このスレって処理系依存、環境依存の話もOKなのか?
漏れは最近見始めたからよく知らないんだが。
C++のスレって言うと、言語仕様だとかライブラリだとかの話題
なんじゃないの?とふと思った。
0236デフォルトの名無しさん
NGNG環境に依存していたとしても、C++的な問題の可能性があるなら
ここで振ってもいいのでは?
おしえて君は勘弁だが、なんでもかんでも環境依存うぜえという
わけではないと思うぞ。
0237デフォルトの名無しさん
NGNG> C++のスレって言うと、言語仕様だとかライブラリだとかの話題
原則としてはそうだけど、C++ だと Java や Perl と比較すると標準ライブラリが
全然充実してないし、非標準でも TCP/IP の話などは多くの環境で共通する話
題なので、あまり厳密にやらんでも良いかと。
もし他に適切なスレがあるようなら、やんわりと誘導するって事で。
0238デフォルトの名無しさん
NGNGシリアライズまでは求めません
つか、みんなどうしてんの??
初心者本はfwirte止まりだし、アホかと。
0239デフォルトの名無しさん
NGNG普通はoperator <<をオーバーロードするんじゃないかな。
#include <iostream>
namespace my{
class Foo{};
// この関数はnamespaceの中にあるにもかかわらず、適切に呼ばれる
template <class charT >
std::basic_ostream<charT>&
operator << (std::basic_ostream<charT>& os, Foo&)
{
return os << "Foo";
}
} // namespace my
int main ()
{
my::Foo a;
std::cout << a << std::endl;
std::wcout << a << std::endl;
}
0241デフォルトの名無しさん
NGNGsave対象の全種のオブジェクトに対して書く必要があるでしょ。それはエレガントじゃないと。
基本形 MyObj について書くのはいいけど MyObj をSTLと組み合わせた場合なんかどうするのかと。
template<classT> saver& oeprator<<(saver&, T &t) と
template<classT> saver& operator<<(saver&, vector<T> &t)
はあいまいさが解決できずに共存できない罠…
STLとの組み合わせならfor_each()を使うなりすればいいし。
ていうか
template<class T> saver& oeprator<<(saver&, T &t)
template<class T> saver& operator<<(saver&, vector<T> &t)
これがどう曖昧なのか分からないんですが、私の知識不足?
0244デフォルトの名無しさん
NGNGT::const_iterator i, e;
e = t.end();
for(i=t.begin(); i!=e; ++i) o << *i;
}
template<> ostream& operator<<(ostream &o, const 任意& t){...}
0245デフォルトの名無しさん
NGNGサイズでなく、配列全体のサイズを返すのですが何故ですか?
その他は納得しています。
int main()
{
double d;
int a[2][3];
cout << sizeof(d) << endl; //8と表示
cout << sizeof(&d) << endl; //4と表示
cout << sizeof(int) << endl; //4と表示
cout << sizeof(a) << endl; //24と表示
cout << sizeof(a[0]) << endl;//12と表示
cout << sizeof(&a) << endl; //24と表示??なんで?
}
0246デフォルトの名無しさん
NGNG親切設計
0247デフォルトの名無しさん
NGNG&a[0]と汁
0248デフォルトの名無しさん
NGNGaは存在するでしょ?a[0]とかがシンタックスシュガーでしょ?
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNGvc++: 8 4 4 24 12 24
g++: 8 4 4 24 12 4
0251デフォルトの名無しさん
NGNGポインタと配列勉強しようね。
0252デフォルトの名無しさん
NGNG文法を簡便化するために、作られた記法。
0253デフォルトの名無しさん
NGNGエラーとかならわかるけど
0254デフォルトの名無しさん
NGNGそれについての合理的な説明は今まで聴いたこと無い。
ただ文法としてそう決められているというだけ。
K&Rにもそんな記述は載っていないから
素直にsizeof(a)を使うほうが無難。
0255デフォルトの名無しさん
NGNG様は、2次元配列か、ポインタの1次元配列か区別が出来ないということらしい
int a[2][3];
int *a[2];
int **a;
int (*a)[3];
どれも a[][]でアクセス出きるのが、上の4パターンのどの宣言かわからんらしい
0256デフォルトの名無しさん
NGNG0257デフォルトの名無しさん
NGNG025811
NGNGsizeof(a)==sizeof(&a)だなんて、そんな馬鹿な!!!!
bccで試したらtypeid(a)==typeid(&a)==INT[2][3]だと!そんなアホな!!!
The result of unary & operator is a pointer to its operand.
って書いてあるだろうが。どこにも特例は出てないぞ!!
でてたら誰か教えてくれ!!!
gccが正しいとみた
0259デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNGsizeofの被演算子で配列名指定すると配列全体のサイズ
が返ってくるのは常識だが。その他の文脈ではaは&a[0]
の意味になるはず。
0261デフォルトの名無しさん
NGNG<配列→ポインタの読み換え>
式の中では、配列は「先頭要素へのポインタ」に読み換えられる。
int a[10];
の時、式の中では、a と &a[0]は同じ意味となる。
ただし、以下の個所は例外である。
1、sizeof演算子のオペランド
sizeof演算子は、ポインタのサイズではなく、配列自体のサイズを返す。
2、& 演算子のオペランド
& 演算子は、配列全体のアドレスを返す。
配列から読み換えられたポインタは左辺値を持たないため、
& 演算子のオペランドにはならないはずであるが、この例外規則のため、
& でアドレス(配列の先頭要素のアドレスではなく、配列全体のアドレス)が 取得できる。
この規則は初心者を混乱させることがある
(例えば scanf("%s", buf) でなく、scanf("%s", &buf)と書いても 正常に動いてしまう)が、
メリットは今ひとつわからない。
3、初期化時の文字列リテラル
char の「配列」を初期化する場合の文字列リテラルは、
中括弧内に文字を区切って書く初期化子の省略形である。
char の「ポインタ」を初期化する場合の文字列リテラルとの 違いに注意すること。
0262245
NGNGaは配列オブジェクトですよね。
型でいうとint [2][3]です。つまりサイズは24バイト。
&aは配列全体へのポインタで(ANSI規格より)、型は
int (*)[2][3]ですよね。ポインタなんだから、double d
に対するsizeof(&d)と同じく4バイトが正しいと思うんです。
>>255
なんか正しそう。なんて本ですか?
>>256,257
単なる興味だけです。。どうも気持ち悪くて。
0263デフォルトの名無しさん
NGNG026411
NGNG>&aは配列全体へのポインタで(ANSI規格より)、型は
>int (*)[2][3]ですよね。ポインタなんだから、double d
>に対するsizeof(&d)と同じく4バイトが正しいと思うんです。
よしよし、同志だな。ただdouble*とint(*)[2][3]の
サイズが同じだとはどこにも決まっていないな。
問題はtypeid(a)==typeid(&a)なことだ!!
0265デフォルトの名無しさん
NGNGつくるよね。
静的な配列にも概念的にはこれが存在するが、その実装はコンパイラ依存だし
直接アクセスすることもできないから、Cでは今回の件に関して
このような仕様になっているんじゃないの?
026611
NGNG具体的にアドレスが何なのかは処理系依存だったと思う
0267245
NGNGgccが正しいのかな?それだと何も疑問無いんだけどな。
>>255
int a[2][3]; --> int [2][3]型 -->配列全体のサイズ
int *a[2]; --> int* [2]型 -->ポインタ二つ分のサイズ
int **a; --> int **型 -->int*へのポインタのサイズ
int (*a)[3]; --> int (*)[3]型 -->配列へのポインタのサイズ
cout << sizeof(int [2][3]) << endl;
cout << sizeof(int* [2]) << endl;
cout << sizeof(int **) << endl;
cout << sizeof(int (*)[3]) << endl;
と明示的に型指定すると24,8,4,4と出るなあ。
これは納得。bcc5.5.1です。
0268254
NGNG>...と同じく4バイトが正しいと思うんです。
思うんですとか言われても現実にはsizeof(&a)=24という
腐った仕様が厳然と存在してしまっている。
君の取るべき道は三つだ。
・そういうものかと納得する。
・あきらめてC/C++をやめる。
・憶測や妄想を捨て作者に歴史的経緯を聞いてここで報告する。
0269デフォルトの名無しさん
NGNG0270245
NGNG>ただdouble*とint(*)[2][3]の
>サイズが同じだとはどこにも決まっていないな。
>問題はtypeid(a)==typeid(&a)なことだ!!
そうなんです。
027111
NGNG設計者のミスに違いない!!!
次のバージョンに期待
0273デフォルトの名無しさん
NGNGのですが、なぜでしょうか?
class A {
public:
virtual void print() const { cout << 10 << endl; }
};
class B : public A {
public:
void print() const { cout << 20 << endl; }
};
int main()
{
typedef void (A::*afunc)() const;
cout << "A::print = " << hex << (afunc)A::print << endl;
cout << "B::print = " << hex << (afunc)B::print << endl;
}
0274デフォルトの名無しさん
NGNG言語仕様。
0275デフォルトの名無しさん
NGNGA::printってなによ?非staticでしょ?
027611
NGNGint a[2][3];
について
int (*p)[2][3]=&a;
が可能であるが、
array to pointer conversionではint[2][3]はint(*)[3]へ
変換されるはずだから、typeid(a)==typeid(&a)だとすると
上のはおかしい。つまり変換(standard convertion)は行われていない。
そこで&aはsizeof(&a)でもtypid(&a)でも式でもint(*)[2][3]となるはず。
だから(typeid(a)==typeid(&a)が)ANSIから外れているのはまず間違いない。
0277デフォルトの名無しさん
NGNGうーんメンバ関数のアドレスを表示したいんです。
例えば
A aa;
としておいて、
(aa.*a)(); とすれば、"a"、つまり10が表示されます。関数を呼び出す
のではなく、関数のアドレスを表示したいのです。
0278デフォルトの名無しさん
NGNG((char*)aa + (char*)&A::print)
0279デフォルトの名無しさん
NGNGエラー E2031 virtual.cpp 20: 'void (A::*)() const' から 'char *' へのキャストはできない(関数 main() )
と出てしまいました。
0280245
NGNG確かに、
int (*p)[2][3]=&a; で
sizeof(p)は4を返しますからね。
0281デフォルトの名無しさん
NGNGメンバ変数なら0からキャストするとして、メンバ関数は無理じゃないの?
ましてや仮想関数だし
0282デフォルトの名無しさん
NGNG&aa
0283デフォルトの名無しさん
NGNGということは、メンバ関数のアドレスを取って呼び出すことは可能でも、
メンバ関数のアドレスを表示することは不可能ということなのでしょうか。
仮想関数でなくしても(virtualを取っても)、やはりできないようです。
0284デフォルトの名無しさん
NGNG(char *)&aa + (char *)&A::print としても同じエラーが出ます。
0285デフォルトの名無しさん
NGNGは?
028611
NGNGど〜よ
class A{
public:
virtual void foo(void) {}
} ;
main(){
void (A::*t)(void)=&A::foo;
void *p=&t;
cout<<hex<<*(int*)p<<endl;
}
0287デフォルトの名無しさん
NGNGだめみたいです。やはり無理みたいです。
エラー E2094 virtual.cpp 24: << 演算子が使われたがクラス ostream では void (* (_closure )())() 型のための定義が存在しない(関数 main() )
0288デフォルトの名無しさん
NGNGprintf("%xで出すのはどうだい?
0289デフォルトの名無しさん
NGNGうまくいきました!どうやら、メンバ関数のポインタは、一度 void * に
代入して、コンパイラを騙してから、アドレスを見る必要がありそうですね!
0290デフォルトの名無しさん
NGNGそれでもうまくいきました。つまり、出力演算子 << が対応してないための
ようです。
029111
NGNGclass A{
public:
virtual void foo(void) {}
} ;
main(){
void (A::*t)(void)=&A::foo;
cout << hex << *(int**)(void*)&t<<endl;}
>>288
その手があったか
0292デフォルトの名無しさん
NGNGcout << hex << *(int*)(void*)&t<<endl;} でもいいようですね。
0293デフォルトの名無しさん
NGNGcout << hex << *(unsigned*)&t<<endl;
029411
NGNGサイズが同じ型なら何でも。思いっきり処理系依存だけども
ただ、これがメンバ関数へのアドレスであるという保証はどこにも…
ビットパターンがそうだというだけで
029511
NGNGあちゃ〜〜、下手うった
0296デフォルトの名無しさん
NGNGそうですね。手持ちの本「C++標準ライブラリ」で、Cの "%p" に当たる
出力方法を探してみましたが見つかりませんでした。
処理系依存にならない方法があればいいのですがわかりません。
C++の内部のメカニズムをいじくり回すようなプログラムは書きにくく
なっているのかな。
0297デフォルトの名無しさん
NGNGつーか、"%p"自体が元々処理系依存。
029811
NGNG*(T*)&tのsizeof(T)を一致させる話ね。いちおう
0299デフォルトの名無しさん
NGNGエキスパートCプログラミング 知られざるCの深層 アスキー出版
面白い本だけど、今回の問題はコラム扱いで >>255以上の事はあまりのってない
立ち読みするなら P261 だ
0300デフォルトの名無しさん
NGNG次のような配列への参照は、最初の要素へのポインタに自動では置き換えられない
1sizeof()の中の配列
2&演算子によって配列のアドレスが取得される場合
3配列が、初期化に使われる文字列リテラル、またはワイド文字列リテラルの場合
0301デフォルトの名無しさん
NGNGcout << sizeof(&"テストだゴルァ") <<endl;
両方とも 同じ結果です
0302300
NGNG0303デフォルトの名無しさん
NGNG0304245
NGNGどうもです。今度見てきます。
0305デフォルトの名無しさん
NGNGthis.じゃなくて、this->とか(*this).じゃないと駄目だよなぁ…。
でもメール受け付けてないし、直りそうに無いな。。
0306デフォルトの名無しさん
NGNG0307デフォルトの名無しさん
NGNG生産性が高くなるし、コードは簡潔で見易くこの上ない
0308デフォルトの名無しさん
NGNG&aで配列全体のアドレス(ポインタ)になって、sizeof(&a)で、
int (*p)[2][3]=&a;sizeof(p);になって結局4になるのが
正しいように見えるけど?
&aと書いた時点で、それはもう配列じゃなくて配列へのポインタ
に変わってしまってるわけだから、>>300の1番目の規則は
適用できないはず。
配列全体のサイズを返してしまう処理系が間違ってるか、もしくは
本の記述が間違ってるとしか考えられない。
0309デフォルトの名無しさん
NGNG2番目の規則が適用されるんじゃないの?
0310308
NGNGその値をsizeofに渡してるわけだから1の規則はあてはまらない。
1はアドレスじゃなくて配列の名前を渡した時だから。
0312デフォルトの名無しさん
NGNG1はsizeof()の中の配列とかいてあるだけで、名前で渡すとか、
アドレスで渡すとか書いてないよ
0313308
NGNGいや、でも「配列へのアドレス」はポインタとは言えるかもしれないが、
配列じゃないだろ。
>>261のURL見ても、a[10]のaのことを配列と言ってるようだし。
まず、この場合は4にならなくちゃおかしい。
それで、「配列への参照」とは言えるかも知れない。だから、>>300
の方はあってるかもしれない。
でもそうなるとint (*p)[2][3]=&a;sizeof(p);だって、配列全体
の大きさにならなくちゃおかしい。これだって「配列への参照」だから。
でも過去レスでは4になったと言っている。
となると、結局どっちにしろ駄目だと思うんだが…
0314デフォルトの名無しさん
NGNGpはポインタだろ。配列の先頭を指す
0316デフォルトの名無しさん
NGNGpは左辺値になりうる。
&aは左辺値じゃないだろ?
別物だよ
0317308
NGNGまあそうだな。
だったら、左辺値のポインタならポインタのサイズになって、右辺値の
ポインタならsizeofは配列全体を返すというべきだ。
それなら、つじつまが合う。
でもそうだとすると>>300と>>261の記述は間違ってるぞ。
右辺値とか左辺値とか言ってない。そもそも「右辺値のアドレス」には
変換されないと言ってるように感じられる。
0318デフォルトの名無しさん
NGNG左辺値の話は、あなたが
>そう思うよ。だけど、&aだってそうだろ
と書き、pと&aを同一視しようとしたから書いただけ。
0319308
NGNGそう思ったのなら、俺の言い方が悪かったかな。
どちらもポインタではあるといいたかっただけ。
俺が一番問題にしたいのは、本の記述と処理系の動作が違ってるのでは
ないかということ。
0320デフォルトの名無しさん
NGNG&aはポインタであると確定しているの?
0321308
NGNG少なくとも「アドレス」とは言ってるな。あと、>>261のリンク先では
&a[0]等、「&なになに」をポインタと言ってる。
それに、「配列はポインタに置き換えられる」と言ってる場合のポインタは
右辺値のアドレスじゃないとおかしい。a[10]の時のaは左辺値では無いから。
0322デフォルトの名無しさん
NGNG割り当てているだけでは?つまり処理系依存
0323308
NGNGその件はまた一つの議論になるし、処理系依存でも俺はアドレスと言ってしまっていいと思うが、
ここではそういう議論は置いといて、便宜上「アドレス」と読んで話しをすすめれば
いいんじゃないかな。>>261もそうしているようだし。
0324デフォルトの名無しさん
NGNGいいんじゃない?
0325デフォルトの名無しさん
NGNG(長文かいていたらすまそ)
0326308
NGNG俺の中では記述と現実が食い違ってるって結論だから、
返事待ち。
0327デフォルトの名無しさん
NGNG俺の中では処理系依存である部分の違いを細かく追及することが無意味だって
結論です。
0328308
NGNGだから、その話は関係ないのでは?それは表現の問題で、
>>300と>>261はその問題を無視し(あるいは無視せず)、アドレスとして
話しを進めている。だから、それにのっとてここではポインタはアドレスと
して話を進めればいいのではないかって俺は言ってる。
で、sizeofの返す値の問題はまた別の問題だ。
0329デフォルトの名無しさん
NGNGあなたが納得できない理由がそこにある。
0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNG0332308
NGNGもう少し詳しく説明してくれない?
>>300も>>261も(便宜上?)アドレス=ポインタ(右辺値)としながら
話しを進めてると思うし、そうなってる以上、実際にアドレス=ポインタで
あろうとなかろうと、話には関係ないと思う。
。
0333308
NGNG<現実(過去レスによるとbccらしい)>
1.左辺値pの時sizeof(p);は4
2.右辺値&aの時sizeof(&a);は配列のサイズ
<本の記述>
A.sizeof(配列)は配列のサイズ
B.配列とアドレスは別物(そうでないと記述に整合性が無い)
0334デフォルトの名無しさん
NGNG>この規則は初心者を混乱させることがある
などという表記にいたる。
実際にはそうでないのだから。あくまで便宜上に過ぎない
0335308
NGNG俺は便宜上に過ぎなくても関係ないと思うが。
じゃあ、ポインタが実際は「アドレス」じゃなくて、現実には「アドレフ」なるものだったと
すると(w、今までの話は「アドレス」を「アドレフ」に置き換えて話せばいいだけじゃない。
0336デフォルトの名無しさん
NGNGちがうと思う。
便宜上の仮定を置いたために配列のアドレスに関して例外的条項が発生した。
これはよりおおきなルール(実際の仕様)に帰れば吸収される例外である。
アドレフってなんだ?名称の問題ではない。
0337308
NGNGん?例外的条項なんて事はとっくにわかってるよ。
で、その例外的条項を解説したのが>>300や>>261なんだろ?
でも、その解説と現実が違ってるじゃないかということ。
あと、アドレフは適当ね。俺が勝手に作った言葉。
0338デフォルトの名無しさん
NGNGだから、解説は便宜上の仮定の下になされたものであるから、現実と違って
当然だ。それはここにおける便宜上の仮定が常には真でないことによる
0339308
NGNGそれに、処理系依存でもなんでも数値で位置を表してたらなんでも「アドレス」だ
よ。OSの割り当てた物理アドレスと同じ数値じゃなかったとしてもね。
まあ、この二つの論点は今までの議論とは全く関係ないと思うけど。
0340デフォルトの名無しさん
NGNG>思わないけどね。
って根拠は無いのですか?(その後ろにそれに、と続いているから)
コンパイラを実装して多分見方が変わる。
そろそろ出かけねばならんので、早めに切り上げたい。
0341308
NGNGということは、「便宜上の仮定」なるもので話してるため、仮定と
現実とが食い違ってるってこと?
でも、その違いは関係ないように見えるんだけど。今回の違い
には影響ないと思うんだけど。sizeofの値の違いね。
どこがどのように影響してるんだ?これが判らないので詳しく解説してほしい。
それに、仮に影響があるとしても、そうなると、仮定のもとで説明するのは
間違いというか、問題があることになる。でも、仮定で説明しちゃってる。
どっちにしろまずい。
0344デフォルトの名無しさん
NGNGだが、その正円を超えた部分は極少しであるから通常は問題ない。
今回の件はたまたまはみ出した部分。すなわち自分が動的に配列を割り当てた
時に生じる先頭へのポインタに相当する静的な配列におけるそれがコード内
つまりプログラマが制御できる範囲内にないことに起因する
0345デフォルトの名無しさん
NGNGお言葉に甘えて失礼する
0346308
NGNGなんか意味わからんけど、ポインタの値=アドレスという仮定には
関係ないように見えるね。
仮定が間違いだと言うなら、ポインタの値=何かの数値で良いんだろ?
これで文句ないだろ。
で「何かの値」と「配列」は別物なわけだ。
ところが、sizeof (&a)すなわちsizeof(何かの値)が配列全体のサイズを返してる。
これは一体どういうことなんだ?
記述では sizeof(配列)が配列全体のサイズなはずだったのでは?
0347デフォルトの名無しさん
NGNG「配列への参照は、最初の要素へのポインタになる」
っていうのは、規格書のどこに書かれてるんですか?
0348デフォルトの名無しさん
NGNGそうであることとは矛盾無いのに
0349308
NGNG例外がいくつかあるらしいけど、ISO99の方だと、6.3.2.1の3に書いてあった。
>3 Except when it is the operand of the sizeof operator or the unary & operator, or is a
>string literal used to initialize an array, an expression that has type ‘‘array of type’’ is
>converted to an expression with type ‘‘pointer to type’’ that points to the initial element of
>the array object and is not an lvalue. If the array object has register storage class, the
>behavior is undefined.
これみると、本の記述じゃなくて処理系が違ってる?ように思えるが・・・
1993の方は持ってない。
>>348
なんで?右側はsizeof(ポインタ)じゃあないの?
0350308
NGNGと思ったら過去ログにもそう書いてたったね。
g++と>>300、>>261と規格書が正しくて、VCとBCCが間違ってると
すれば全てのつじつまが合う。。。
ていうか、もう俺はそうに違いないと確信しました。
0351デフォルトの名無しさん
NGNG完全準拠は名乗れない!?
0352308
NGNGISO99ではポインタはアドレスだな。
あと、「処理系にまかされてるから違う」って言うが、処理系がどんなめちゃくちゃな割り当てをし
ても、最低限、違うポインタを区別できるような値が割り当てられるわけだから、
「アドレス」と呼べるだろう。
ここでの「アドレス」はOSの割り当てた物理アドレスとは違って、もっと一般的な意味。
言葉の定義の問題。
0353デフォルトの名無しさん
NGNGついでに教えてくれ、どこに書いてあった?
教えてクンですまそ
0354デフォルトの名無しさん
NGNG0355353
NGNGすまそ
C99の6.5.3.2
3
The unary & operator returns the address of its operand.
If the operand has type ‘‘type’’ ,
the result has type ‘‘pointer to type’’.
長いので後は略
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNG>>300は、aまたは&aを&(a[0])と読み替えるシンタックスシュガーが
働かない条件だろ?
0358デフォルトの名無しさん
NGNG全然違う。
aは配列型であって、これは例外を除いて最初の要素へのポインタへ変換される。
次に、&aは配列全体へのポインタ。最初の要素へのポインタとは型が違う。
>>300は前者の例外。
0359デフォルトの名無しさん
NGNG>aまたは&aを&(a[0])と読み替えるシンタックスシュガーが
>働かない条件だろ?
これを言うなら、
「aを(&a[0])と読み替えることができない条件だろ?」となる。
ついでに、これはシンタックスシュガーではない。あくまで
aと(&a[0])は違うものであって、前者の型変換作業が行われ
て結果的に同じなる事が多い。
0360学生
NGNGデフォルト実引数は関数の宣言・定義、どちらに書くべきでしょうか
0361デフォルトの名無しさん
NGNG112から読み直せ
0362デフォルトの名無しさん
NGNG0363学生
NGNGご返答ありがとうございました。
0364デフォルトの名無しさん
NGNG""の中で*/を使うとそこでコメントが終了してるみたいなんだけど。
どうなん?
[例]
/*
" */ "
0365デフォルトの名無しさん
NGNG0366364
NGNG" /* "
は無効化されてるのに
" */ "
だけ有効になってるのってどう考えてもおかしいと思うんだが。
一気にコメントアウトしたときに
めっちゃ不便やん。
/*
....
cout << " */ "; //ここでコメント終了かよ
....
*/
0367デフォルトの名無しさん
NGNGだってコメントの中の"〜"は文字列と見なされないし。
0368デフォルトの名無しさん
NGNGコメントには /* */を使うのやえ コメントアウトは
普通 #if 〜#end でおすえ
0369デフォルトの名無しさん
NGNG> #end
さらしあげ
0370364
NGNG複数行に渡るコメント/**/
は""の中にあるかも判断すると
コンパイラ作るのが面倒になるから
単純に最初の*/で判定してるってことで納得しました。
0371デフォルトの名無しさん
NGNG#ifndef __A__
#define __A__
int getvalue();
#endif
//a.c
#include "a.h"
int getvalue() { return 0; }
//main.c
#include "a.h"
int main() {
return getvalue();
}
//makefile
main : main.obj a.obj
bcc32 main.obj a.obj
main.obj : main.c a.h
bcc32 -c main.c
a.obj : a.c a.h
bcc32 -c b.c
というふうなプログラムをコンパイルしているのですが、
main.c をコンパイルすると getvalue の宣言がないと警告がでます。
一応実行は出来るようですが、どうすれば出なくなるでしょうか?
0372デフォルトの名無しさん
NGNGちげーよ
/*が来るとその後に*/が来るまでは何がこようとすべてコメントとみなして"があっても文字列としてみないだけ。もちろんint i;とあってもそれは単なるコメントと見なす。
0373デフォルトの名無しさん
NGNG>>371 extern お使いやす
0374デフォルトの名無しさん
NGNGとりあえずint getvalue();はint getvalue(void);にしろ
037511
NGNGなんだそりゃ!!!!
つまり"〜*/〜"は"〜*""/〜"と書けということか
0376デフォルトの名無しさん
NGNG0377デフォルトの名無しさん
NGNG間違いはなさそうだが、とりあえずプリプロセッサにかけたものをみてみろ。
037811
NGNGなるほど、よく考えたら当然だ
0380364
NGNGああ、なるほど!!
/* " */ "
先に/*があるから後の"が無視されて*/が文字列になってないのか。
0381デフォルトの名無しさん
NGNGまじ!?
結構細かいんだね。BCCって。
プロトタイプの場合、voidをつけないと関数呼び出し時に引数リストをどんなものにしてもコンパイラがエラーを出さないからつけたほうがいいよ。
0382デフォルトの名無しさん
NGNG~~~~?
0383デフォルトの名無しさん
NGNGC++ なら void 書いても書かなくても同じだと思うけど。
a.c/main.c か。
あと、__A__ とか、インクルードガードに _ 使う人多いんだけど、
いちおうダメだよね。
038411
NGNGそれはCの場合でC++では空の引数リストはvoidと同じ
0385デフォルトの名無しさん
NGNG何がだめなの?
0386デフォルトの名無しさん
NGNG.cだからCだとオモタ
038711
NGNG0388デフォルトの名無しさん
NGNGいいかげんに名無しに戻ったほうがいいと思うよ。
0389364
NGNG>後ろの"
/*の後ろの"
0390デフォルトの名無しさん
NGNG0392デフォルトの名無しさん
NGNG__FILE__とかか?
0393デフォルトの名無しさん
NGNGwsprintf でまず変換しようとしましたが、これは整数のみできないようなのです。
方法がありましたらお願いします。
0394デフォルトの名無しさん
NGNGprintf("%f\n",f);
これじゃだめなのか!?
0395デフォルトの名無しさん
NGNGstd::cout << f << std::endl;
じゃないの?
0396デフォルトの名無しさん
NGNGあ!できました。すごい!!
ありがとうございました。
0397デフォルトの名無しさん
NGNGあんたがすごいよ
0399C厨
NGNGごめん。スレ立てるまでもない・・・スレかと思っていた。
0400デフォルトの名無しさん
NGNGお願い
0401デフォルトの名無しさん
NGNGごめん。本当にごめん。
0402400
NGNG0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNGだめじゃない。でもC++らしくない。
0405デフォルトの名無しさん
NGNGでも
cout << "(" << number << ")" << endl;
っていうようなのはなんとなくダセエ
0406デフォルトの名無しさん
NGNGそゆときどうしてる?
0407デフォルトの名無しさん
NGNGfprintfを使っていマス
0408デフォルトの名無しさん
NGNGわしも。
0409デフォルトの名無しさん
NGNGそのうちの片方だけをusingすることは可能ですか?
0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNGusingする方法は分からないのだけれども
インラインのラッパを用意してやれば片方だけ使えるようになるよ
0412デフォルトの名無しさん
NGNGありがとう。
0413デフォルトの名無しさん
NGNG> あと、__A__ とか、インクルードガードに _ 使う人多いんだけど、
> いちおうダメだよね。
処理系が予約してるから、ね。俺は一度だけ、標準ヘッダのインクルードガードと
衝突して泣いた経験がある。
ただ VC++ みたく「処理系が勝手に _ 付きのインクルードガードをつける」場合に
は問題ないんじゃない? あれは重複しない文字列 (GUID) 使ってるし。
0414デフォルトの名無しさん
NGNG文字列にするにはどうすればいいのでしょうか?
0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNGもとのデータはそんなに正確なのかい?
0417414
NGNGまず初めは
float -> string -> float
みたいな処理をしても
一致させたいのです。
0418デフォルトの名無しさん
NGNGなんでそんなことを?
0419デフォルトの名無しさん
NGNG0420414
NGNGありがとう。がんばってみます。
0421デフォルトの名無しさん
NGNGfloat の全ビットパターンについて
sprintf(buf, "%.15g", f1);
sscanf(buf, "%g", &f2);
assert(f1 == f2);
を試してみたことがあるが、NaN,Infを除いて一致したよ。
0422デフォルトの名無しさん
NGNGスゲー、floatが32bitってことは43億通りになるんかいな?
0423デフォルトの名無しさん
NGNGたいして時間かからないでそ。
0424デフォルトの名無しさん
NGNGビットパターンのセットってintとかからキャストしてぶっこむの?
0425421
NGNGキャストで予期しない変換がおこると嫌なので、memcpy しました。
テストコードはこんな具合っす。
float f1, f2;
for (unsigned long u = 0; u != 0xFFFFFFFF; ++u) {
int e = (u >> 23) & 0xff;
if (e == 0 || e == 0xff) continue; // NaN or Inf
memcpy(&f1, &u, sizeof(f1)); // f1 = *(float*) &u;
sprintf(.... 以下 >>421 と同じなので略
PenIII 700MHz で2〜3日で終わったよ。
0426デフォルトの名無しさん
NGNGそんなにかかるのかー。一瞬自分もやってみようとしたけど
それを聞いておいて良かったw
0427デフォルトの名無しさん
NGNG複素数ライブラリってどうやって使うんですか?
0428デフォルトの名無しさん
NGNG0429421
NGNG実際に試したのは sscanf ではなく istringstream 経由の
istream >> float なので、sscanf なら3日もかからず早く終わるかも。
試してみるなら、途中経過を入れておくと良いっす。
if (u % 0x10000 == 0) printf("%08lx,%g", u, f1);
0431デフォルトの名無しさん
NGNGなにがスゲーんだ???
たいして時間かからないでそ。
SETI@home、UDはカレにおまかせ♥
0432デフォルトの名無しさん
NGNG献血と同じで無意味だ
0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNG献血も無意味だよ。
死ぬ奴は死なしておけば良いんだ。
0435デフォルトの名無しさん
NGNGその主張の先は、
「じゃキミ生きてなくてもいいよ。キミが生きてる事は俺には無意味だ」
とか「俺には迷惑だよ」となる
0436デフォルトの名無しさん
NGNGこ こ は C + + に つ い て
相 談 す る ス レ で す 。
0437デフォルトの名無しさん
NGNGf1≠f2
になってしまうのでしょうか?
int e = (u >> 23) & 0xff;
if (e == 0 || e == 0xff) continue; // 0 or Denormal or NaN or Inf
0438デフォルトの名無しさん
NGNGどっかにC++の規格書落ちてねえのかよ。
0439デフォルトの名無しさん
NGNG>>5
0440デフォルトの名無しさん
NGNGそれはまずかないですか?
0442デフォルトの名無しさん
NGNG何故?
0443デフォルトの名無しさん
NGNG売り物じゃないの?
0444デフォルトの名無しさん
NGNGNaNもしくはInfの場合は、
f1==f2がfalseになるからではなくて?
ってかNaNかInfの時ってf1==f2はtrue?false?
どっち?
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNGしかし、allocation functionはアドレスを返し、返されたポインタがどうたら
と書いてあるところはある…。
アドレスとポインタを同一視してると思えるような文は所々にあるな。
0449デフォルトの名無しさん
NGNGなにがいいたいの?
0450デフォルトの名無しさん
NGNGポインタはC++ではアドレスなのか。そうでないのか。
規格書の記述ではわかりづらいが前者のようだということ。
0451デフォルトの名無しさん
NGNGそれが重要なの?
0452デフォルトの名無しさん
NGNG一応ね。人にポインタを説明する時に頻出事項だし。
ぜひ確認しておきたいことではあるね。
ただし、一般にアセンブラなどで使ってる「アドレス」とは
異なる意味でのアドレスだということは確かだな。
ポインタの値はimplementation-definedだとはっきり書いてあるし。
0453デフォルトの名無しさん
NGNG0454デフォルトの名無しさん
NGNGいや、そう思いやすいかもしれないけど、そうではないと思う。
implementation-definedでかつアドレスなんだと思う。
勝手に処理系がつけた値を「アドレス」と呼んでしまえば、矛盾しない。
言葉の定義の問題だけど。
0455デフォルトの名無しさん
NGNGimplementation-defined は、ようはどう定義しても間違いではないって
意味でしょ?例えば「aが整数だ」というルールがあったときに、
あんたはa=0だと主張しているに過ぎないんじゃない?
0456デフォルトの名無しさん
NGNGだから、もしも0という言葉が整数全体を表す言葉にも使える
ものだったとしたら(実際は違うけど)OKだよな?
あと、いくらimplementation-defined だと言っても
全く自由というわけではないぞ。当然他の規則と矛盾しない
ようにしなくてはならない。
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNGそうだが。
いろいろな記述を見るに、アドレスはポインタだと考えないとつじつまが合わない。
決定的なのはさっきのallocation functionの記述。
それから、constやvolatileに関してはアドレスがポインタだと明記してある。
例えば、allocation functionの説明でもアドレスはポインタだとして
解説してるようだが、それ以外にもconstやvolatileに関してはアドレスが
ポインタだとはっきり明記してある。
この場合は確実にimplementation-definedで、かつアドレスなんだよ。
0459デフォルトの名無しさん
NGNG0460デフォルトの名無しさん
NGNG本当に規格書読んだ?
ISO/IEC 14882:1998(E)
5.3.1
2
The result of unary & operator is a pointer to its operand.
0461デフォルトの名無しさん
NGNGん?その部分は勿論読んだぞ。
「&はポインタを返す」だろ。
でも、ポインタがアドレスとはその部分だけでは断定できまい。
「&がアドレスを返す」と書いてない以上。
まあ、&は「address-of operator」って名前らしいが…
しかし、それ以外のいろんな記述を見るに、アドレスがポインタらしいと
いうのが俺の意見。
0462460
NGNG046311
NGNGなだけでその他はそうであるとは限らない。ということだと思いまっせ。
0464デフォルトの名無しさん
NGNG文脈から見るに、その部分は「〜へのポインタ」という言い方をconstなど
に適用するとどうなるかを説明した文であって、そこだけアドレスがポインタ
だということを説明した文じゃないと思うわけよ。
それに、何度も言ってるように、他でアドレスとポインタを混同したような文がいくつもある。
比較的証拠っぽいのは14.3.2のプログラムのコメントとか、thisポインタが
アドレスだとかな。
046511
NGNGおおその通りだ。へたうった。例外はメンバポインタの場合だけだ
3.9.3.5 In this International Standard,
the notation {\it cv} (or {\it cv1}, {\it cv2}, etc.),
used in the description of Types,
represents an arbitrary set of cv-qualifiers,
0466デフォルトの名無しさん
NGNG適当にアドレスと書いたり書かなかったりしてしまってるように見える。
まあ断定は出来ないけど。
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNG% cp foo.pdf bar.pdf
できますが、何か? もしかしてパーミッションの問題か?
0469デフォルトの名無しさん
NGNGコピーしているようにしか見えないが、どこでペーストしてる?
0471デフォルトの名無しさん
NGNGfoo.pdf で取り込み(コピー)、bar.pdf で貼り付け(ペースト)では?
# cp コマンドで名前変えて連続コピーってできたっけか?
# シェルスクリプト書く方が早そうだけど
0472デフォルトの名無しさん
NGNGと
int* i;
の違いって何ですか?
0473デフォルトの名無しさん
NGNG0474472
NGNG違いはない。書き手のセンスの問題。
0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNGAccept: */*
i
;
0478デフォルトの名無しさん
NGNG};
とかみたいにブロックの後に ; を付ける人が偶にいますが、
これってどうですか?
0479デフォルトの名無しさん
NGNG0480488
NGNGテキスト選択のボタンが使えなくなってる。なんでだろ。
0481デフォルトの名無しさん
NGNGhtml版の Final draft を使わせてもらってよいんじゃないかな。
つーか、html 化された正式版仕様書ってないの?
ちなみに >>5 にある ansi_iso_iec_14882_1998.pdf は海賊版ぽい。
ダウンロードした人の話では正式版とはファイルサイズが異なるらしい。
0482デフォルトの名無しさん
NGNG0483デフォルトの名無しさん
NGNGISO/IEC 14882は 2.8M 2.1M の2つのタイプが存在するのを知らないのか?
それから、なぜ正規購入者でなければwebのFDを利用できないんだ?
頭に虫沸いてない?
0484デフォルトの名無しさん
NGNG> ISO/IEC 14882は 2.8M 2.1M の2つのタイプが存在するのを知らないのか?
うん、知らない。2.8M のやつってどこが配布してるの? 2.1M のやつとは
何か違いがある?
> なぜ正規購入者でなければwebのFDを利用できないんだ
FD って一般に公開されてなかったと思ったから。実際のところ、FDの
ライセンスはどうなってるの?
上記2点、よければ教えてよ。
0485デフォルトの名無しさん
NGNG0486デフォルトの名無しさん
NGNGstruct A { int i; float f; };のようなstructを定義して、
これをmain()の中で、A *a=new a[10];(あるいは、A a[10];)
として、他の関数の中で使うには、その関数はどう定義
すればよいのでしょうか?void func(A* a[]){}ではダメでした。
ここでいうfunc()の中で、a[5]->iを使いたいのです。
よろしくお願いします。
0487デフォルトの名無しさん
NGNGstruct{
...
};
でセミコロンをつけ忘れないように普段から慣れさせておくため。
0488デフォルトの名無しさん
NGNGvoid func(A a[]) ;
とか
void func(A *a) ;
0489486
NGNGvoid func(A a[10])でいいのですね。
0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNG結果に違いはないです。 ないからわざわざ10と書くこたな(略
0493初心者
NGNG0494デフォルトの名無しさん
NGNG0495デフォルトの名無しさん
NGNGそんなこと言ったら、2chに書き込む方がよっぽど指が疲れるYO!
0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNGC, C++ だと仮引数の配列はポインタに縮退するから、わざわざ a[10] と
書くのは
誤解を助長してる
としか思えんなぁ。だいたい要素数 10 個の配列にしか適用できない関数って
時点で、何か間違ってるような気がする。
俺なら
1. 構造体にして、そのポインタを引き渡す
2. 要素数も同時に引数として渡す or vector 使う
3. 番兵を使う
どれかにするけどな。
0499デフォルトの名無しさん
NGNGRECT myrect;
---------------------------------------------------
myrect.top = 0;
myrect.left = 0; 問題はこの部分です
myrect.bottom = 100;
myrect.right = 100;
---------------------------------------------------
CreateHatchBrush(HS_CROSS,GetSysColor(COLOR_WINDOW));
FillRect(hwnd,&myrect,hbrush);
のようにして,ウィンドウの任意の領域を白紙に戻したいのですが,
RECT構造体(myrect)の(座標の)初期化がうまくいきません.
GetClientRect(hwnd,&myrect);
として座標を取得するしかないのでしょうか?
また,任意の領域を白紙に戻す方法でもっと良い方法があるんでしょうか?
よろしくお願いします.
0500かかし
NGNGここの掲示板に書くことではないと思うのですがどこに書けばいいか
分からないのでアドバイスをお願いします。
「DevelopperStudio」とは、何のことでしょうか?
探してもさっぱり (+_+)
皆さん!!この件に関して知っていることがあれば
メールかRe>でお願いします。
@かかし
0501デフォルトの名無しさん
NGNGDeveloper Studioを探して下さい。
0502499
NGNGRECT *root;
void Draw(void)
{
RECT *p = new RECT;
p->top = 0;
p->left = 0;
p->bottom =100;
p->right =100;
root = p;
}
とする事で代入できました.
ポインタを使ってしかメンバには代入できないのですね.
Cでは
RECT myrect;
のように構造体myrectを宣言すれば myrect.メンバ名
もしくは、myrectを指すポインタ->メンバ名
でアクセスできたのと思うのですが.
newもしくはmallocを使ってポインタの指す構造体を直接作らないと
いけないんですねえ.
間違いがあれば指摘お願いします.
0503デフォルトの名無しさん
NGNG要素数を間違えて渡したらコンパイル時に型不一致で引っかかって
くれる。
0504デフォルトの名無しさん
NGNGいってることがよくわからないんだけど…。
RECTみたいな単純な構造体メンバへのアクセスって別にCもC++もかわらないよ?
0505デフォルトの名無しさん
NGNGclass Base {
void Function();
void Main();
void (Base::*funcPtr)();
};
void Base::Main() {
funcPtr = &Base::Function;
(*funcPtr)(); // ここでエラー
}
としても
error C2171: '*' : 'void (__thiscall Base::* )(void)' のオペランドが無効です。
error C2064: 関数ポインタとして評価されない式を使って、関数を呼び出そうとしました。
とエラーが出てしまいます。
メンバ関数を呼び出す際は何か特別な構文などが必要なのでしょうか?
0506デフォルトの名無しさん
NGNG(Base::funcPtr)();
とか
0507デフォルトの名無しさん
NGNGインスタンスを与えればよい。
class Base {
void Function();
void Main();
void (Base::*funcPtr)();
};
void Base::Main() {
Base b;
funcPtr = &Base::Function;
(b.*funcPtr)();
}
0508デフォルトの名無しさん
NGNGコンパイル通らないっすよ。
0509デフォルトの名無しさん
NGNG0510506
NGNGコンパイルは通った。リンクで引っかかるんだろ
つか、厨でした。逝ってきます
0511デフォルトの名無しさん
NGNGうーんコンパイラによるような。
BCC5.6だとコンパイルエラー。「メンバポインタの不正な使用」だとさ。
>>509
なるほど。その手があったか。
0512506
NGNG0513デフォルトの名無しさん
NGNGclass Base {
void Function();
void Main();
void (Base::*funcPtr)();
};
void Base::Main() {
funcPtr = &Base::Function;
(this->*funcPtr)();
}
051411
NGNGわざわざ指定するなら当然
(this->*Base::funcPtr)()
0515506
NGNG>514
Oh!イケたよ!(コンパイルだけしか試してないが)
せんきゅう!
しかしなんでthis->が要るのかな?
0516デフォルトの名無しさん
NGNG>>514 意味わかんない。
0517デフォルトの名無しさん
NGNGちゃう
0518513
NGNGなんでリンク時にエラー吐くのかと思ったYO!
thisが必要なのは、関数ポインタは暗黙のthisが使われないとかなんとか。
0519506
NGNGん?あってるっしょ?「->*」「.*」で単独の演算子として優先順位と結合性が定義されてるみたいよ?
0521506
NGNGそうなのれすか。ややこしいなあ
0522デフォルトの名無しさん
NGNG単なるオフセットなのだそうだ。
だからインスタンスなりthisなりの実体を渡さないとコンパイルでき
ないのでは。
0523505
NGNGありがとうございます。
funcPtr = &Base::Function;
でいかにして現在のオブジェクトのメンバであるかを表すのか
ということを考えていたのですが、ご指摘の通りthisポインタで
指定するということで解決することが出来ました。
本当にありがとうございました。
0524506
NGNG???だったらメンバ変数と一緒じゃない???
あれ?なんか激しく勘違いしてるのかな?ごめ、もっとC++勉強してきます.....
0525デフォルトの名無しさん
NGNG0527デフォルトの名無しさん
NGNG>>5
052811
NGNG0529デフォルトの名無しさん
NGNG0530506
NGNGフツーにインスタンスごとに関数ポインタ保持、じゃダメですかね?
ところでメンバ関数ってインスタンスごとに生成されたりしないよね?それともこの時点で間違ってる?
053111
NGNGメンバ関数ポインタは12byteもあるのか。
上のほうでウソ書いちゃったな。ごめん
>>529
こういうのどう解決してるのかな〜と思って
#include <iostream>
struct A { virtual void f(void) { std::cout << "A" << std::endl ;}} ;
struct B : A { void f(void) { std::cout << "B" << std::endl ;}} ;
int main() {
A a, *p ;
B b ;
void (A::*f)(void) = &A::f ;
p = &a ;(p->*f)() ;
p = &b ;(p->*f)() ;
return 0 ;
}
> メンバ関数ポインタは12byteもあるのか。
実装によるだろ。VC++は4byteだし。
> こういうのどう解決してるのかな〜と思って
VC++の場合だと、void A::__call_f() {f();} のような関数を
勝手に作るみたいだ。
0533デフォルトの名無しさん
NGNG仮想関数の場合、BCCでコンパイルしてTurbo Debuggerで中身を
覗いてみたら、インスタンスの生成時にメンバ関数へのアドレスを
保持しているみたい。
0534デフォルトの名無しさん
NGNGint f();
int f() const;
};
cls c;
main() {
c.f(); /***/
}
/***/のところでconstのほうを呼ぶ方法ありますか?
053511
NGNG>実装によるだろ
ハハハ、そんな当然のこと書かんでもいいって
>void A::__call_f() {f();}
なるほどね〜。それは簡単だ
>>533
仮想関数テーブルのこと?
0536デフォルトの名無しさん
NGNGstruct cls {
void f() { cout << "f()" << endl; }
void f() const { cout << "f() const" << endl; }
};
cls c;
const cls cc;
int main() {
c.f();
cc.f();
}
0537デフォルトの名無しさん
NGNGははあ、これが仮想関数テーブルなのでしょうか。Aのインスタンスには
一つ、Bのインスタンスには二つのアドレスを代入しています。
static_cast<const cls&>(c).f();
0539534
NGNGねた?非constオブジェクトから呼ぶには?
0540デフォルトの名無しさん
NGNGstruct cls {
void f() { cout << "f()" << endl; }
void f() const { cout << "f() const" << endl; }
};
cls c;
const cls cc;
int main() {
c.f();
const_cast<const cls &>(c).f();
}
でもよいようだ。
0541デフォルトの名無しさん
NGNG0544デフォルトの名無しさん
NGNGint main() {
c.f();
const_cast<const cls &>(c).f();
cc.f();
const_cast<cls &>(cc).f();
}
0545デフォルトの名無しさん
NGNG多分、BをAにダウンキャストした時にAのメンバ関数が正しく呼ばれる
ようにアドレスを二つ代入しておく必要があるのでしょう。
それと、そのキャストすごいですね。
0546デフォルトの名無しさん
NGNGint f(); のほうを別の名前にしてください。
同じ名前なのに自然に使い分けれないって状態が問題だと思うんだけど、どうよ。
0548デフォルトの名無しさん
NGNGこれは関数の多重定義になっているみたいですね。呼び出す
インスタンスがconst型かそうでないかで呼び出す関数が変わる
ようです。
0549デフォルトの名無しさん
NGNG0550デフォルトの名無しさん
NGNGEffective STLのP114、第4章に、そのような内容の事が書かれています。
0551デフォルトの名無しさん
NGNGというわけで、なぜconst_iteratorがほしいのか、
もうちょっと状況を説明してみて欲しいのです。
0553デフォルトの名無しさん
NGNGconst型のコンテナにinsertやeraseを適用できるとまずいからでは?
0554デフォルトの名無しさん
NGNGコンテナがconstなら、もとからconst_iteratorしか取り出せない。
ん?const型のコンテナって、container<const T>って話?
そんなコンテナ作れるの?
0555デフォルトの名無しさん
NGNGもとい、コンテナをconst型であるかのように取り扱うと言い直します。
container<const T>は無理です。
0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNGそう言われてみれば、使ったこと一度もないな。何に使えるんだっけ。
0558デフォルトの名無しさん
NGNGvalarray<int> a; で a+=2; とやると、aのすべての要素に +=2 を
してくれるらしい。
0559デフォルトの名無しさん
NGNG面白そう。かけ算とかは簡単に出来るのかな?
行列として。
0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNG0562デフォルトの名無しさん
NGNGコストが問題になるときだけ気にします。
0563デフォルトの名無しさん
NGNG0564デフォルトの名無しさん
NGNGコンストラクタ内での例外を避けるために、コンストラクタは静的な
初期化しかさせずにCreate()とか戻り値を返せる普通のメンバで
リソース等の動的な獲得をするのって、設計的に良くないですかね?
0565デフォルトの名無しさん
NGNGこれらを使うと、多次元配列として扱えるようになるらしいのですが。
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNGビルドした実行ファイルのアイコンを任意のものへ変更したいです。
リソースファイルは作成出来ます。
その後はどうすれば・・?
ソースファイルと同一ディレクトリに置いてビルドしても反映されないのですが・・・
参照出来るログは「アイコン」で検索しました。
MSのVC++を使用しています。
0568デフォルトの名無しさん
NGNGスレ違い
0569デフォルトの名無しさん
NGNGなぜ・・?
0570デフォルトの名無しさん
NGNGしてない。異常終了してから考える。
0571デフォルトの名無しさん
NGNG投げない。
0572デフォルトの名無しさん
NGNGストラウストラップ御大の言葉、「リソースの獲得は初期化」って言葉は知らんのかな?
コンストラクタでリソースを獲得して、デストラクタで解放する。そうすることで、
オブジェクトの生存期間とリソースの生存期間が一致するから、
リソースリークを減らせる。Create()で獲得してDestroy()で解放するような
機構だと、そのオブジェクトの機能を使う前にCreate()を行うことをプログラマが
保証しなくちゃならん(さらに、終了前にDestroy()を行うことも)けど、コンストラクタと
デストラクタなら、コンパイラが自働的に保証してくれる。
例外を避けるためにコンストラクタでリソース獲得をしないってのは、はっきり言って
本末転倒。コンストラクタでエラー報告をするために例外はある、ってのはさすがに
言い過ぎだろうけど、コンストラクタの例外を避けることのメリットはほとんど無いぞ。
って、ここまで書いて気づいたが、>>564はそれを知った上で、敢えて質問してるのか……?
だとしたら、俺個人としては、例外が使えないコンパイラで仕事をしなけりゃならん、
という状況でしか、そう言う設計はしない。
>>566
栞「たまにしか出ないから、例外って言うんですよ」
まあネタは置いといて。bad_allocはほったらかしかなぁ。bad_allocが来ても、
メモリがない状況でどんな対処すりゃいいのかわからんし。それ以外の例外は
キャッチして処理してるけど。
0573デフォルトの名無しさん
NGNG空っぽのクラス?
文字列?
enum?
0574デフォルトの名無しさん
NGNG0575反goto原理主義者
NGNGtry {
while (hoge) {
while (fuga) {
if (monyu) {
throw false;
}
}
}
}
catch (bool) {}
0576デフォルトの名無しさん
NGNGいやぁぁぁ!
0577デフォルトの名無しさん
NGNG多分速度が遅い。gotoの方がいいと思う。
0578デフォルトの名無しさん
NGNG文脈で決める
0579デフォルトの名無しさん
NGNG漏れは、とりあえずコンストラクトは完了させる。コンストラクタの中で
エラーが発生したときはエラーフラグを立てて以降の処理を中断する。
インスタンスを生成したあとにエラーフラグをチェックして、エラーなら
即 delete。デストラクタでは、コンストラクタで構築が完了したものに
ついてのみ破棄。
0580デフォルトの名無しさん
NGNGプログラムが止まるんだけど普通?
(処理は戻ってこないし何のエラーも表示されない)
0581デフォルトの名無しさん
NGNGスレッドがクラッシュするぞ。
#include <iostream>
#include <exception>
using namespace std;
int main()
{
double d = 0.0;
try {
while (true) {
d += 1e308;
cout << d << ' ';
}
}
catch (const exception &err) {
cout << "overflow occured." << endl;
}
}
0582デフォルトの名無しさん
NGNGhttp://www8.plala.or.jp/nitoyon/download/iwebbrowser2.lzh
このソースを基に、IEコンポーネントではなくShockwaveFlashコンポーネントを使用したいのです。
CComPtr<IShockwaveFlash>と出来れば良いのですが、IShockwaveFlashの定義は無いんですね。
それで、このIShockwaveFlashの定義はどうすれば良いのでしょうか?
自分で適当に定義してしなければならないんでしょうか・・。
COMについてよく理解出来ていないのですが、どうか御教授お願いします。(__)
あと、これは良く分からずにやってみたのですが。
typedef int (*flash_play) (int);
longpunkIE[256];
(flash_play)( ( 4 * 28 ) + &punkIE); //メソッド28番が playメソッド
なんて、直接メソッドのポインタを指定すれば動くかナァ、と思ったのですが
やはりそう上手い具合にはいかなくて強制終了が出ちゃいますでした。(;゚∀゚;)
というか、本人がナニをやっているのかよく分かっていなくてアレなのですが・・。
もしよろしければ、このvtableを用いたやり方?も御指導頂ければありがたいです。
0583582
NGNGこちらと読み替えてください。(__)
typedef int (*flash_play) (int);
flash_play play ;
long punkIE[256];
play = (flash_play)( ( 4 * 28 )+ &punkIE);
(play)(&play);
(・ω・`)
0584デフォルトの名無しさん
NGNGLapack++ をWindows環境にインストールしたいのですが
どうすればいいのでしょう?
Unix環境でのインストール方法ならNETに書かれているのですが。
コンパイラとしてはBorlandのフリーのを使ってます
0585デフォルトの名無しさん
NGNGソースをDLして中身を見てみたが、特に変なことさえしてなければ、
各ディレクトリのmakefileをBCC用に書き換えれば行けそうだ。
0586デフォルトの名無しさん
NGNG俺もわからないです(_ _)
0587デフォルトの名無しさん
NGNGmakefileを書き換えるってどういうことっすか?
その名のファイルが存在することは承知してます
0588デフォルトの名無しさん
NGNGCOMの基礎とvtableのVC++での実装を勉強するか、
あるいはCOMを「単に使う側」としての使い方を勉強するか
どっちかをまずやれ
0589デフォルトの名無しさん
NGNGIShockwaveFlashをIDLから作れ
なお、スレ違い発言だが、初心者なら VC6を無理に使うより VBか Delphiで呼ぶ方がいいだろう
VBならIDispatchから Delphiなら両方の方法を使って呼び出せる
0590デフォルトの名無しさん
NGNGやっぱりそうか。エラーメッセージが出ないから
バグがどこにあるか分からなくて困ったよ
0591デフォルトの名無しさん
NGNG元々のmakefileがLinuxを想定して書かれているので、例えば
オブジェクトファイル名の拡張子が .o で終わるなど、このまま
ではWindowsでコンパイルできない。
またシェルコマンドとして rm が使われていたり、出力ファイル名
として a.out が使われていたりする。これらを .obj や del など
で置き換える必要がある。
ということ。
それから、Linuxのシステムコールを使っているファイルがある
ので、それも Windows用に書き換える必要あり。
0592デフォルトの名無しさん
NGNGWindowsでは_gcvt()などがありますが、
UNIX系ではなにがあるんでしょうか?
0593デフォルトの名無しさん
NGNG逝ってきます
0594デフォルトの名無しさん
NGNGそれだとstdio.hをインクルードしないといけないですよね。
iostream.hとstdio.hを一緒にインクルードすると実行速度が
落ちるというような話を聞いたのですが本当でしょうか?
0595デフォルトの名無しさん
NGNGstd::ostringstream ostr;
ostr<<"おっぱい:\t"<<3.14;
cout<<ostr.str()<<endl;
0596デフォルトの名無しさん
NGNGVC6.0でコンパイルしたら、
error C2679: 二項演算子 '<<' : 型 'class std::basic_string<char,struct std::char_traits
<char>,class std::allocator<char> >' の右オペランドを扱う演算子は定義されていません。
(または変換できません)(新しい動作;
というエラーがでました。
0597デフォルトの名無しさん
NGNGレスありがとうございます
なんとなくわかりましたが現在の知識では
どうにもなりそうにありません
このへん読んどけみたいなHPとかありますか?
たびたびすいません
0598デフォルトの名無しさん
NGNG以下の文がg++(2.95)ではコンパイルが通らないのですが(VC.NET+STLport4.5.3はOK)、
何が悪いのでしょうか?エラーメッセージには
'template parameters not used in partial specialization'
とありますが…。
template<typename T, typename U>
struct Base {
template<typename V> struct traits {};
struct traits<T> { typedef T value_type; };
struct traits<U> { typedef U value_type; };
};
0599デフォルトの名無しさん
NGNG0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG0603598
NGNGBaseクラスが持つ2つのコンテナを統一的なインターフェースで
処理する関数を書きたいのです。つまり
//---------------
template<typename T, typename U>
struct Base {
std::vector<T> mTList;
std::vector<U> mUList;
template<typename V> struct traits {};
struct traits<T> { typedef MyIterator<T> iterator; };
struct traits<U> { typedef MyIterator<U> iterator; };
MyIterator<T> begin(T) { return mTList.begin(); }
MyIterator<T> end(T) { return mTList.end(); }
MyIterator<U> begin(U) { return mUList.begin(); }
MyIterator<U> end(U) { return mUList.end(); }
template<typename V, typename W)
void func(void) {
for (traits<V>::iterator i=begin(V); i!=end(V); ++i) {
W()(i); // 処理
}
}
};
Base<TypeA,TypeB> x;
x.func<TypeA,MyOperation>();
x.func<TypeB,MyOperation>();
//---------------
こんな感じで…。
>>602
4-5行目のstruct traits<T>をstruct traits<typename T>にせよということでしょうか?
文法エラーが出ました…。
0604582
NGNG>>599
様、どうもです。(__)
IDispatchは知らなかったです。
お蔭様でhttp://www.hcn.zaq.ne.jp/no-ji/reseach/990905.htmを発見しますた。
何か糸口が見えたような気がします。
VCですが、あるアプリケーション用のDLLを作っていたので、
どうにもそれに規定されていて、VCを使うしかなかったんです。
また、個人的なアプリケーションを作るときにDelphiを学んでみようと思います。
どうもありがとうございました。
0605デフォルトの名無しさん
NGNGそのページ結構痛い
http://www.hcn.zaq.ne.jp/no-ji/reseach/20011008.htm
>私の普段の頭の中はオブジェクト指向になっているのですが
とか。
0606デフォルトの名無しさん
NGNGstruct INA{int a;INA(int val){a=val;}};
INA ina;
AAA(int a):ina(12){}
};
structなら通るのにunionだとエラーになるのはどうしてなのでしょうか?
さっぱりわかりません。
0607デフォルトの名無しさん
NGNGなんでunionにしたいのかがわからん。
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNGそりゃ当然。共用体はメンバ関数を持つことはできない。
0610デフォルトの名無しさん
NGNGunion AAA{
void func(){}
};
がダメだということですか??
ネタじゃないやい。・゚・(ノД`)・゚・。
0611デフォルトの名無しさん
NGNGそうですダメです。
0612デフォルトの名無しさん
NGNGこれが限度
struct AAA{
union {
struct INA{int a;};
INA ina;
} ;
AAA(int a){ina.a=12;}
} ;
0613デフォルトの名無しさん
NGNGvoid func(void){cout<<"union"<<endl;}
void func(int a){cout<<a<<endl;}
};
void main(){
AAA aaa;
aaa.func();
aaa.func(12);
}
エラーにならずに走るんですが・・・?ルール上ダメということなのですか?
0614デフォルトの名無しさん
NGNGこれ(コンストラクタの宣言されたクラス)が
unionのデータメンバになれない。
0615デフォルトの名無しさん
NGNGC++第3版§10.4.12によると、共用体はメンバ関数を持つことが
できるそうだ。但し静的なメンバは持つことができない。
コンストラクタやデストラクタまで持つことができるように書いて
ある。
0616デフォルトの名無しさん
NGNG0617デフォルトの名無しさん
NGNGerror C2620: union 'AAA' : メンバ 'ina' でデフォルト コンストラクタが用いられ
ています。
って。
0618デフォルトの名無しさん
NGNGコンストラクタを取ったらコンパイル通らない?
0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNGでも、配列やコンテナに突っ込みたい時もあるから、
コンストラクタでもメンバ関数でも初期化出来るように
する方がいいと思う。Destroy()でなくデストラクタ
で解放する形で書くと、デフォルトコンストラクタでも
一定の初期化コード(ポインタに0を入れるとか)を実行
する必要が出て来て、多少の無駄は生じるけど。
0622デフォルトの名無しさん
NGNGtemplate<class V> struct traits { typedef MyIterator<V> iterator; };
で駄目な理由が分からん。
0623デフォルトの名無しさん
NGNG結果が異なるというバグに悩まされてます。
なにか原因は考えられますか?
構造体のポインタを受け取って、その構造体に
処理を施すvoid型関数なんですけど・・・。
0624デフォルトの名無しさん
NGNG戻り値の型がvoidって事?
>使う場所によって 結果が異なる
どこかでスタックを壊している
0625デフォルトの名無しさん
NGNGもらって来た構造体の中身によって、バグが顕在化したりしなかったり
するとか、グローバル変数の影響を受けているとか、単にヒープが
壊れているとか、気付かないうちにオーバーロードしているとか。
0626デフォルトの名無しさん
NGNGそうです。戻り値の型がvoidってことです。
使い方が間違ってました、すみません。
>>624-625
どうやったらスタックとかヒープを壊せるんですか?
それってハード的なことではないのですよね。
グローバル変数については大丈夫だと思います。
オーバーロードについては調べてみます。
0627デフォルトの名無しさん
NGNGスミマセン、この場合のオーバーロードって
どういう意味ですか?
0628デフォルトの名無しさん
NGNGメソッド名の隠蔽のルールは意外に複雑なので注意したほうがいいッスよ
0629デフォルトの名無しさん
NGNGポインタがらみのバグがあれば、メモリのどこかに変なデータが
書き込まれる。たいていデータを書き込むのはスタックかヒープ
だから(と言うかそれ以外の所に書き込むと大抵OSが異常終了させる)
「スタック|ヒープが壊れる」と表現する。
初期化していない変数を使ってるんだろ。
0631デフォルトの名無しさん
NGNG使ってるとか
0632623
NGNG>静的変数やグローバル変数
静的変数は使ってません。グローバル変数は
const unsigned char を関数内部でいくつか使ってます。
ただいまいろいろ調査中です・・・。
0633デフォルトの名無しさん
NGNG0634デフォルトの名無しさん
NGNG0635デフォルトの名無しさん
NGNG恐くてCスタイルキャストは使えない。
まあsignedの取り外し程度なら安全だろうけど。
0636デフォルトの名無しさん
NGNGstatic_cast<foo*>(static_cast<void*>(bar))
0637デフォルトの名無しさん
NGNGまじですか?怖っ
0638572
NGNG『コンテナ』が、std::vectorやstd::listやらのことを指してるんなら、
こいつらは、標準の規定ではデフォルトコンストラクタを必要と
しなかったはずだよ。
配列の場合は、数が少ないなら Hoge array[] = {'a','b','c','d'};
って初期値を与えればいいだけだし、そもそも配列を使う状況なら、
たいていはvectorにしておけば代用可能だし。
コピーコンストラクタが初期化関数よりもコストがかかりすぎるのなら、
コンテナはインスタンスへのポインタを持つようにすればいいし。
その場合も、管理の手間を切り離すために、スマートポインタにして。
まあ、俺としては、『デフォルトコンストラクタ+初期化関数』
なんてのは不要(というか、やってはいけない設計)だと思ってるから、
こういうのを駆使して、デフォルトコンストラクタを使わなくてもいいように
してる。『コンパイラが保証してくれる』っていうメリットを、最大限に
享受したいから。
ん? 今ふと思ったけど、コンストラクタが2つ以上の引数をとる場合、
配列の初期化ってどうやるんだろう……? 誰か教えてちょ。
0639デフォルトの名無しさん
NGNGstd::vector<Foo> v(3);
// v[0], v[1], v[2] には何が入る?
0640572
NGNGそれは、プログラマが「デフォルトコンストラクタでインスタンスを3つ生成してくれ」
ってコードを書いてるから必要になってるだけ。その場合はデフォルトコンストラクタを
用意しなきゃならないのは当たり前でしょ。プログラマの方から、そうしてくれと
頼んでるんだから。
vector自身は「デフォルトコンストラクタを持っておけ」なんて要求をしてはいない。
上のコードは、プログラマがその要求をしただけ。
(説明が下手でスマヌ。More Effective C++ の項目4を参考にしてくれ)
で、話を元に戻すけど。結局、俺が言いたいのは、>>621の
>でも、配列やコンテナに突っ込みたい時もあるから、
>コンストラクタでもメンバ関数でも初期化出来るように
>する方がいいと思う。
に関する意見。この書き方だと、>>621は「後で誰か(本人も含めて)がこのクラスを配列や
コンテナに入れたがるかも知れないから、その為にデフォルトコンストラクタを用意しておくのが
良い設計なんじゃないか」ってことを言いたいんだと思うけど。
俺は、それは違うと思う。>>638で書いたとおり、配列もコンテナもデフォルトコンストラクタが
必要、と言うわけではない(←部分否定)。だから、配列やコンテナの事を考えてデフォルト
コンストラクタを用意しました、ってのは「クラスの良い設計」として意味のあるパラメータでは
ないと思う。
そうすると、
・引数つきコンストラクタで、コンパイラが初期化の保証してくれるクラス
・デフォルトコンストラクタ+初期化関数で、プログラマが初期化の保証をするクラス
では、上の方がいいんじゃないかと思うんだけど。どうよ?
(反論のネタとしては、>>561-564の「例外処理のコスト」あたりかなー)
0641デフォルトの名無しさん
NGNG0642デフォルトの名無しさん
NGNGgoto に比べて 100 倍以上重かった。
0643デフォルトの名無しさん
NGNG0644デフォルトの名無しさん
NGNG0645デフォルトの名無しさん
NGNGそれともC++でもgetopt.hを使うのか?
自分で探してみても自作getopt.cppとかにしかヒット
しないんだよ。
なかったら自分で作るからいいんだけど。
誰か知ってる人いたら教えて。
0646645
NGNG0647デフォルトの名無しさん
NGNG0648デフォルトの名無しさん
NGNGそうならないように、例外が発生したら
それまでコンストラクタ中で確保したリソースを全て開放してから
死ぬように作っておかないといけない。
0649デフォルトの名無しさん
NGNGで例外ったときに、単純にdelete dで後始末できるのかなあという疑問。
例外がBaseのコンストラクタで起きていて、Derive固有のメンバ変数が未初期化の状態だったりすると、
変な動作しそうじゃない? その回答も>>648に含まれているのかもしれないけど、よく分かんない。
0650デフォルトの名無しさん
NGNGtry {
リソース確保
} catch ( ) {
リソース解放
throw
}
}
こんな感じ?
0651649
NGNG基底クラス群の初期化の途中で例外が発生したら、
成功した分だけ暗黙にデストラクタが呼び出される(ように作る)
ってことで合ってる? なるほど・・・。
0652デフォルトの名無しさん
NGNGそれだけだと、
スタックの巻き戻し(一時変数のデストラクタ呼び出し)
対応する catch を見つける
なんつー処理ができない。もう少し面倒だよ。
0653デフォルトの名無しさん
NGNGYes
コンストラクタ中で例外が発生すると、対応するデストラクタが呼ばれないから、
自前で try - catch を書く
auto_ptr などのスマートポインタを使う
メンバ変数の初期化を使う
いずれかで対応する。
0654デフォルトの名無しさん
NGNGnewに失敗したインスタンスのdeleteは不要。
0655デフォルトの名無しさん
NGNGistream.read(buffer, offset, streamsize) ではなく
istream.read(buffer, streamsize)
という形式になっている理由がわかりません。
ストリームの使用者は
ランダムアクセスよりも順次アクセスの頻度が高いと仮定して、
後者の性能を高めるためでしょうか?
0656デフォルトの名無しさん
NGNGランダムアクセスしまくりたいの?
0657デフォルトの名無しさん
NGNGランダムアクセス出来ないデバイスを抽象化しやすいようにするため
0658デフォルトの名無しさん
NGNGわけていただけませんか?
0659質問小僧A
NGNG簡単なリスト作成ツールなどをせこせこ作って自己満足してますw
で、今作成したプログラムはDOS窓で動くんです。
それをwindowsの窓で動くプログラムにしたいのですが、なにからはじめればいいでしょうか?
参考書、やり方などなんでもいいので、教えていただけないでしょうか?
0660デフォルトの名無しさん
NGNG「猫でも」
0661質問小僧A
NGNGそこは無論聞く前に見て、勉強しました。
ですが、いまいちしっくりこないというか、微妙な感じというか・・・
0662デフォルトの名無しさん
NGNGC++BuilderかC++.NET買え。
それ以外の方法は効率が悪すぎる。
0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNG環境ぐらい書かないとアドバイスしようがない。
0665デフォルトの名無しさん
NGNG(´Д`)
(( ─━OO━─ ))
∪∪
0666デフォルトの名無しさん
NGNG「プログラミングWindows」を読む。
それで難しいと感じたら、C++ Builderでやってみる。
0667デフォルトの名無しさん
NGNGhttp://www.42ch.net/UploaderSmall/source/1028634544.zip
いちおう確認したけど、LokiPortの存在は知ってるよな?
0668デフォルトの名無しさん
NGNGあれはVC6だめじゃないの?
0669デフォルトの名無しさん
NGNGerror LNK2005: "bool __cdecl operator<(double const &,class TestClass const &)" (??M@YA_NABNABVTestClass@@@Z)
はすでに foo.obj で定義されています
ヘッダファイルに直接以下のように書いているのですが、なにがダメなのでしょうか?
// 比較演算子(upper_boundで必要)
bool operator < ( const double &a, const TestClass &v )
{
return v.x < a;
}
なぜか解りませんがinlineを付けるとエラーが出ませんでした。
0670デフォルトの名無しさん
NGNGそのままinlineつけておけばいい
0671669
NGNGでもinlineではエラーにならないのが解りません。
0672デフォルトの名無しさん
NGNGヘッダに実装を書いた場合、そのヘッダを複数回includeすると、
実体も複数できるからリンク時エラーになる。
inlineにすれば実際には関数を作らないのでエラーにならん
0673デフォルトの名無しさん
NGNGああなるほど。言われてみればそうですね。
ありがとうございます。
0674デフォルトの名無しさん
NGNG○ return a < v.x;
× return v.x < a;
0675デフォルトの名無しさん
NGNGSleepを使ったら文がいっきに表示されて困っています。
0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNG0678質問小僧A
NGNG買うお金が・・・
>>664
すいません。環境かいてませんでした(汗
開発環境はVisualC++6.0です。OSはWin2000とWin98です。
>>666
さっそくその本立ち読みしに大学までいってきます。
ところで・・・獣の数字・・・w
0679デフォルトの名無しさん
NGNG学生だろ?アカデミックパックで安いものじゃん
そもそも今の学生って俺たちより余程金持ってるじゃん
0680デフォルトの名無しさん
NGNG知らんよ。というか 675 が意味不明だから、補足しろと言ってるんじゃないの?
0681デフォルトの名無しさん
NGNGありがとう!
0682質問小僧A
NGNGそれは偏見なのでは・・・(汗
少なくとも私は貧乏生活です・・・
成人祝いに買って貰ったVisualStudioで頑張ってるんです。
0683デフォルトの名無しさん
NGNGMFC使えばいいんじゃないか?
自分は良いサンプル集めて勉強してる。
ダイアログアプリなら簡単だよ。
0684質問小僧A
NGNGその良いサンプルをできればおしえていただけませんか?
はっきりいってどこから手をつければいいのか・・・
0685デフォルトの名無しさん
NGNG自分は主にココにある物を参考にしてる。
http://www.codeproject.com/
http://www.codeguru.com/
CDialogだったらボタンとかリストとかを
ダイアログエディタでくっつけて、動作は自分で記述することになるよ。
MSDNにCButtonやCListBox,CListCtrlがあるからそのメンバ関数とかをみれば
使い方は分かる。
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNGネットワーク経由のメッセージを契機に、
特定プログラムを起動するサービス(NT4.0上で動作)を
作りたいと考えています。
NT4.0サービスを作成・インストールする部分がわからないのですが、
参考になる書籍など、ご存知でしたら教えてください。
MSDNを見ると、「ATL COM AppWizard を使う」とありましたので、
早速使ってみたのですが、どこに記述してよいやらわかりません。
よろしくお願いします。
サービスとCOMに何の関係が?
0689デフォルトの名無しさん
NGNGあるじゃん。COM を使わずに直接 API 叩く方法もあるが、ふつーは COM の
形で実装するし、そのための Wizard も用意されてる。
0690デフォルトの名無しさん
NGNGグローバルスコープ?ファイルスコープ?
どちらになる?
もうちょい具体的に
0692デフォルトの名無しさん
NGNG意味がわからん。
0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNGそのファイルの中だけに限定されたスコープ
0696デフォルトの名無しさん
NGNG#include <stdio.h>
をするとここではprintfを使うものの
#include "my.h"
をしたときにprintfという名前を占有してほしくないとする
どうにもならない?
namespace使うとふるいヘッダでエラーが出ることがあるし
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGprivate_my.hをつくれ。
ヘッダファイルの中からprintf()呼ぶ気か?
0700デフォルトの名無しさん
NGNG>>698
どういうこと?
0701デフォルトの名無しさん
NGNGmy.h内でincludeするのではなく、別にprivate_my.h等を作ってこっちで
includeすればいいじゃん。で、private_my.cpp等にprintfを必要を
必要とするモジュールを封じ込める
0702デフォルトの名無しさん
NGNGテンプレートはどうにもならん?
exportがサポートされないとだめかな?
0703デフォルトの名無しさん
NGNGなにがやの?
0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNGマクロはともかく、標準関数は std ネームスペースに封じられてるから問題ない。
問題は Win32 API だけど、こいつはどうにもならんね……。
0706デフォルトの名無しさん
NGNG::windowsに閉じ込めるバージョンがあればいいんだが
0707デフォルトの名無しさん
NGNG#include <windows.h>
}
は?
0708デフォルトの名無しさん
NGNGそもそも KERNEL32.DLL とか USER32.DLL にある API の本体が、namespace
なし、extern "C" でコンパイルされておろうが。
0709つまづきさん
NGNGfor (sum=0, i=0; i<v.size(); i++)
vectorクラスでデータの総和をとる計算の一部なんだけどわからない(欝
0710デフォルトの名無しさん
NGNGsize()は要素数を返す。ってゆーかイテレータを使うだろ普通
0711710
NGNG0712デフォルトの名無しさん
NGNGむしろ std::accumulate を使うと思われ。
0713デフォルトの名無しさん
NGNGforを知らずにvectorとはこれいかに。
0714つまづきさん
NGNGiがv.sizeより小さかったらi++と判断したらいいのかなぁ
この後にsum += v[i] が続いてるんだけど
0715デフォルトの名無しさん
NGNGその部分も予め書きなよ。
0716つまづきさん
NGNG0717デフォルトの名無しさん
NGNG709のスタイルなんだが、
iterator使ったコーディングにするとどう違ってくるの?
0718デフォルトの名無しさん
NGNGいってることは正しいが書かなくてもわかるな普通。
それよりforを知らないのが信じられない。
0719つまづきさん
NGNG0720デフォルトの名無しさん
NGNG{
sum += *i;
}
かな?
0721デフォルトの名無しさん
NGNGキーワードは STL と vector だ。あとは「プログラミング言語 C++」を読め。
0722デフォルトの名無しさん
NGNGsum=0;
for(vector<int>::iterator vi=v.begin();vi!=v.end();vi++)
sum+=*vi;
みたいな
0723つまづきさん
NGNGvoid main ( )
{
vector < int > v ;
int i, data, sum ;
cout << "数値以外の文字を入力して終了" << endl ;
while ( cin.good ( ) ) {
cin >> data ;
if ( cin.good ( ) ) v.push_back ( data ) ;
}
for ( sum = 0, i = 0 ; i < v.size ( ) ; i ++ ) {
sum += v[i] ;
cout << v[i] << " - " << sum << endl ;
}
}
できればforからの文を日本語で説明して欲しい
0724デフォルトの名無しさん
NGNGさすがに C++ の「いろは」から解説を頼むのは、スレ違いだと思われ。とりあえず
本を読んで、最低限の知識を身につけてクレ。
0725デフォルトの名無しさん
NGNGSTLの解説がある本をお勧めする。
0727717
NGNGiteratorで記述してれば、記述は大変だが、使うときに便利になる。
アルゴリズムの記述が、特定のポインタでなく、様々なコンテナに
適用できる点がiteratorのいいところということだと思った。
0728デフォルトの名無しさん
NGNGさらに一歩進んで、template 関数 or 関数オブジェクトにしないと、あまり嬉しくないと
思うが。
0729nns
NGNG一応作ってはいるんだが挫折しそう。
0730デフォルトの名無しさん
NGNGCStringを作りたいと思っています。
class CString :
public std::string
{
public:
// 追加機能いろいろ省略。
private:
static void* operator new(size_t);
};
「仮想デストラクタのないクラスからpublic継承してはいけない」
というのはC++の常識らしいですが、こういう風にnewを自分で禁止しておけば、
ポインタからアクセスすることがなくなるので問題はないと思うのですが、
どうでしょうか? これでも、まだなにかやばい事が起こり得る抜け道って
ありますか?
0731デフォルトの名無しさん
NGNGsscanfを別の関数から呼びたいのですが、
どうやったら...の部分を渡せるのでしょうか?
sprintfの場合は、vsprintfでva_listを渡せばできるのですが、
sscanfにはvsscanfのようなものは見あたりません。
test(const char* buffer,const char* format,...)
{
//sscanf が呼びたい
va_list arg;
va_start(arg, format);
int i = sscanf(buffer,format,arg);//うまくいかない。
va_end(arg);
return i;
}
sscanf(const char*,const char*,...);
0732デフォルトの名無しさん
NGNGnewできないと残念だから、継承させないでstd::stringのインスタンスを
メンバに持たせたらどう?
ちょっとめんどくさくなるけど。
0733デフォルトの名無しさん
NGNGちなみにそれで何をするの?
0734731
NGNGスイマセン。よく調べてみたら、
sscanfはdoubleの変換ができないようなので
atoi,atof系を使わないとだめですね。
C++的には
double d;
std::stringstream a;
a << "123.456789";
a >> d;
0735デフォルトの名無しさん
NGNG6nbsp;int *ip = new int[-1];
}
catch (std::bad_alloc &a) {
cerr<<"(・∀・)マンコー"<<endl;
}
0736デフォルトの名無しさん
NGNG> sscanfはdoubleの変換ができないようなので
そんなことないでしょ?
0737731
NGNGMSDNの
scanf 関数の型フィールド文字に
e、E、f、g、G
はfloatのポインタと書いてある。
でもやっぱり、sscanf使えないと面倒だなぁ。(鬱
0738デフォルトの名無しさん
NGNGMSDNをよく読んでみましょう。
0739731
NGNGありがとう!!doubleやっぱり使えるんですね。
「printf 関数と wprintf 関数の書式指定フィールド」を参照してください。
とあるのにリンク先をクリックすると
scanf 系関数の書式指定フィールド
になっている罠
だったんだねぇ。
731の件は sscanf.cにソースがあり解決しました。
後一つだけ質問させてください。お願いします。
sscanfを Cでコンパイル(*.c)すると問題ないのですが、
C++でコンパイル(*.cpp)するとRUNTIMEエラーがでてしまうのですが、
どうしたら回避できるのでしょうか?
(浮動小数点の場合に起きています。)
#include<stdio.h>
int main()
{
double d;
sscanf("123.456","%f",&d);
}
0740デフォルトの名無しさん
NGNG>sscanf("123.456","%f",&d);
sscanf("123.456","%lf",&d);
0741731
NGNGfloating-point support not loaded
とでていたのがそれ以後、不思議と直りました。
>>740 ありがとうざいました。
0742デフォルトの名無しさん
NGNGCString* ps = new CString[1];
0743730
NGNGいや、メンバで持たせるのはちょっとやってみたんですが、stringが持ってる
関数を全部委譲させようとすると、かなりの量の作業が必要なので。
で、いくつか委譲作業をやってる途中で思ったのです。『public継承って、もともと
こういう面倒な記述をしなくていいようにするために出来たんじゃないの?』って。
そう思って冷静に考えたら、委譲の保守の労力と、ポインタ間接が一個増えることによる
効率の悪化、このふたつの変わりに得られるメリットが、string*経由のdeleteという
落とし穴を回避できる、ってのは、あんまりじゃないですか。
だから、なんとかpublic継承させたいんです。
>>742
おおっと。そうですね。たしかに、それも回避しておかないと。
0744デフォルトの名無しさん
NGNG> で、いくつか委譲作業をやってる途中で思ったのです。『public継承って、もともと
> こういう面倒な記述をしなくていいようにするために出来たんじゃないの?』って。
いいえ。
0745デフォルトの名無しさん
NGNGpublicで済ませるのは、暗黙の型変換が考えられない場合
(traitsとかね)だけ。
0746730
NGNGいや、あの。どうせなら、どういう歴史的経緯があったのか、教えてくださいよ。知ってるんでしょ?
>>745
private継承とusing……? private継承でも、using宣言でCStringのスコープに
stringの各関数をインポートできる、ってことですか? もしそうなら、
ひとつのusing宣言でstringをまるごとインポートできればいいんですけど……。
ま、調べてみます。
ところで、
>publicで済ませるのは、暗黙の型変換が考えられない場合
ってのは、どういう意味ですか? 「暗黙の型変換はよくない」と
前提した上で、CStringからstringへの暗黙の型変換がいっぱい起こりうるから
public継承はやめとけよ、って意味でいいんでしょうか。
0747744
NGNGpublic 継承は実装の再利用ではなく、あくまで OOP のパラダイムを実現する
ための機能。あまり書き方は良くないんだが「プログラミング言語 C++」に記述
があるよ。
0748デフォルトの名無しさん
NGNGなんでそんなことするの?
std::stringにどんな拡張をする計画なの?
0749デフォルトの名無しさん
NGNGマンセー
0750730
NGNGありがとですー。
>>748
// 最初に現れる指定文字位置を探す。日本語を含んだ文字列でも正常動作する。
int Find(char ch) const;
// 最初に現れる指定文字で分割できる部分文字列(左側)を返す。日本語含んでもOK。
CString FindLeft(char ch) const;
// 最初に現れる指定文字で分割できる部分文字列(右側)を返す。日本語含んでもOK。
CString FindRight(char ch) const;
// 文字列が "10" "-5" 等ならtrue。
bool IsDigit(void) const;
こんな感じです。
0751デフォルトの名無しさん
NGNGメンバにする必要ある?
0752744
NGNGもし新規に文字列クラスを設計するという話なら、メンバ関数にする内容だろう。
ただ std::string を拡張しようって話なら、
「やめとけ」
と思うけど。あと CString っつー名前も MFC, WTL と重複するから、避けた方が
良いかもしれん。
0753731
NGNG結論:標準の 文字列->倍精度浮動小数 の精度には疑問が残った。
#include<stdio.h>
#include<iostream>
#include<sstream>
int main()
{
double dResult;float fResult;char buf[255];
std::cout << "original data:" << "200.123456789012" << std::endl;
sprintf(buf,"%f",(200.123456789012));
sscanf(buf,"%f",&fResult);
sscanf(buf,"%f",&dResult);
std::cout << fResult << std::endl;
std::cout << dResult << std::endl;
printf("%.15g\n",fResult);
printf("%.15g\n",dResult);
sscanf(buf,"%.15g",&fResult);
sscanf(buf,"%.15g",&dResult);
std::cout << fResult << std::endl;
std::cout << dResult << std::endl;
printf("%.15g\n",fResult);
printf("%.15g\n",dResult);
std::cout << "strtod" << std::endl;
char *stopstring;
double dResult2 = strtod(buf,&stopstring);
std::cout << dResult2 << std::endl;
printf("%.15g\n",dResult2);
std::cout << "atof" << std::endl;
double dResult3 = atof(buf);
std::cout << dResult3 << std::endl;
printf("%.15g\n",dResult3);
std::cout << "stringstream" << std::endl;
double dResult4;
std::stringstream stream;
stream << buf;
stream >> dResult4;
printf("%.15g",dResult4);
double Test = 200123456789012;//地道に変換したことを考える。
Test *= 1E-12;
printf("%.15g\n",Test);//これぐらいの精度は欲しい。
}
0754デフォルトの名無しさん
NGNGそのsscanf()の使い方、間違ってるって。
MSDN読めよ。
0755デフォルトの名無しさん
NGNGこんなに時間かけて、その結論かよ…
早く寝ろ。
0756デフォルトの名無しさん
NGNGネタ?
0757デフォルトの名無しさん
NGNG0758デフォルトの名無しさん
NGNGsscanf(buf,"%l.15g",&dResult);
0759730
NGNGというと、ネームスペースレベルの関数にしたほうがいいってことですか?
それはそれとして、最初の質問に戻りますけど『仮想デストラクタのない
クラスからpublic継承したい』場合って、>>730>>742以外に、クラス設計で
注意すべき点ってありますかね?
0760デフォルトの名無しさん
NGNGすまん、俺あんま分かってないんだと思うけど、仮想デストラクタの無い
クラスを継承することに関する問題と、それがpublic継承/private継承である
ということと、なんか関係あるの?
単に、delete時に導出クラスのデストラクタが呼ばれないだけじゃないの?
0761デフォルトの名無しさん
NGNGclass TreeObj3D
{
public:
int Obj;
TreeObj3D *pParent;
TreeObj3D **pChild;
DWORD ChildNum;
DWORD size;
TreeObj3D();
virtual ~TreeObj3D();
TreeObj3D &operator [](DWORD n){return(**(pChild+n));}
void addChild(int aObj);
void del();
};
typedef class TreeObj3D TREEOBJ3D,FAR *LPTREEOBJ3D;
void PrTree(TreeObj3D a,DWORD n,DWORD u,DWORD v,DWORD w,BOOL b)
{
char str[8];
int i;
if(b)
{
cout<<" ";
for(i=0;i<n-1;i++)
{
cout<<" ";
/* if(v&(DWORD)pow(2,i)) cout<<" | ";
else*/ cout<<" ";
}
cout<<"---";
}
if(u&&a.pParent!=NULL&&w==a.pParent->ChildNum-1) v&=~u;
//if(u) v&=~u;
wsprintf(str,"%03d",a.Obj);
cout<<str;
if(a.ChildNum) cout<<"---";
if(a.pParent!=NULL&&a.pParent->ChildNum) v|=(DWORD)pow(2,n-1);
for(i=0;i<a.ChildNum;i++)
{
if(a.pParent!=NULL&&w==a.pParent->ChildNum-1) u|=(DWORD)pow(2,n-1);
if(i==0) PrTree(**(a.pChild+i),n+1,u,v,i,FALSE);
else PrTree(**(a.pChild+i),n+1,u,v,i,TRUE);
}
if(!a.ChildNum) cout<<endl;
}
PrTree()で木構造を表示するんですが
親→子へ引っぱる"|"を入れるのがむずくて困ってます
"-"は出来たんですが・・・
誰か助けてくり
0762761
NGNGなってくれない・・・
見にくくてごめん
0763デフォルトの名無しさん
NGNG0765デフォルトの名無しさん
NGNGVC5.0だと使えなかったので木構造を自力で実装しましたでふ
2重カキコとか出るし・・・
0766730
NGNG『単に』って、それが問題だから相談してるんですが。
>>764
じゃあ、これをpublic継承以外でエレガントに解決する方法を教えてください。
namespace {
typedef void (*FUNC)(void);
class CTable :
public map<string,FUNC>
{
public:
CTable(){
(*this)["hoge"] = &Hoge;
(*this)["sage"] = &Sage;
(*this)["moge"] = &Moge;
(*this)["hage"] = &Hage;
}
};
}
void foo(const string& str){
static CTable table;
// tableをいろいろ使う。省略。
}
0767デフォルトの名無しさん
NGNG> じゃあ、これをpublic継承以外でエレガントに解決する方法を教えてください。
要求仕様を明記してくれ。コードだけ見ても、意図するところが分からん。
0768デフォルトの名無しさん
NGNGっつか、質問する側が喧嘩を売ってどうするよ。
0769デフォルトの名無しさん
NGNG0770デフォルトの名無しさん
NGNG横から口を挟むのも何ですが、
最低でも文字列解放しなきゃメモリリークなんじゃ・・・!?
ようしらんけどデストラクタでfree()してるんじゃないの?
0771デフォルトの名無しさん
NGNG何か勘違いをしていると思われ
0772名無しさん
NGNG0773デフォルトの名無しさん
NGNGなかったのか・・。
0774デフォルトの名無しさん
NGNGマイクロソフトのチュートリアルが詳しい&&易しい
0775770
NGNG出来るんならメモリ確保してるんじゃないの
0776デフォルトの名無しさん
NGNGそれじゃぁstd::stringの出番なさそうじゃん。
0777デフォルトの名無しさん
NGNG0778デフォルトの名無しさん
NGNGちなみに、ここでいっているCStringは、一般的なものではないみたいです
0780デフォルトの名無しさん
NGNG別に仮想デストラクタでなくてもパブリック継承すること自体は
問題ないと思うがね。しなくてもかまわないこともあるしな。
implemented-usingだと多態はまずいからprotectedやprivateに
するだろうな
今回はメンバ関数を増やしたいだけだから何の問題もなかろう
概念的包括も問題ないから混乱しないだろうし
0781780
NGNG0782デフォルトの名無しさん
NGNG同意ですなぁ。日本語処理用になんか変なメンバを追加してなけりゃ。
0783770
NGNGstd::stringをpublicメンバで持たせるとか
短絡過ぎ?
0784デフォルトの名無しさん
NGNG面白いが、730は激しく嫌がりそうだ。
0785デフォルトの名無しさん
NGNG既出。というか、俺もその方が良いと思うけど。
0786デフォルトの名無しさん
NGNG0787デフォルトの名無しさん
NGNGあなだらけ(w
0788785
NGNG0789デフォルトの名無しさん
NGNGそんなことができたら、何を信じて生きていけばいいかが分からなくなるw
0790デフォルトの名無しさん
NGNG0791デフォルトの名無しさん
NGNG継承だけでなく、委譲のサポートがあれば良かったとは思うが。private 継承して
メンバ関数全て using すりゃ良いんだが、面倒だよねぇ。
0792デフォルトの名無しさん
NGNGリファレンスヘルプからusingをオートマで吐き出すツール作ったら売れるかな?
結構簡単そう
0793デフォルトの名無しさん
NGNG売れないと思う。
---
#include <string>
class MyString : deletgate std::string {};
---
とか書いておくと、適当なヘッダを出力してくれるツールならともかく。
……これって名前空間やらテンプレートやらへの対応を考えると、フルスペックの
C++ パーサ書く必要があるな。
0794792
NGNGこんなの誰でも作れるか・・・
0795730
NGNGでは、>>766を踏まえて要求仕様を。
やりたいことを簡単に説明すると、switch分岐の、動的な変更です。
fooに文字列"hoge"が渡されたら、関数ポインタ経由でHoge()を呼び出します。
fooに文字列"sage"が渡されたら、関数ポインタ経由でSage()を呼び出します。
fooに未知の文字列が渡されたら、例外を出すなどのエラー処理をします。
『この文字列ならこの関数を呼び出す』というペアのいくつかはコンパイル時に
決定していますが、実行時に新たなペアが増える場合もありますし、
減る場合もあります。
『現時点で、ここには分岐できるが、ここには分岐できない』といった動的な情報は、
プログラム全体でひとつしかありません。
そういう状況です。それを達成するのに最もエレガントなコードが、>>766
のコードのつもりです。
・動的な分岐はmapの連想配列でこなす。
・ひとつしかない動的な情報は、ローカルstaticオブジェクトが保有。
・コンパイル時に決定されているペアは、オブジェクトのコンストラクタで入力。
という方針です。
もし、More Effective C++ を持ってるんでしたら、項目31を参照してください。
同じようなことをやってあります(ただし、あっちは絶対にpublic継承を
やりたくないのか、面倒な手段で実現してあります)。
>>780-782
C++3rdを持っていないのでEffective C++ からの引用ですが、
『C++標準規格は、この点について極めて明確に述べている。
基底クラスのポインタを介して派生クラスのオブジェクトを削除しようと
するとき、その基底クラスに仮想でないデストラクタがあると、
その結果は不定となる』
だそうです。プログラマとしての直感から言えば、たしかに、派生クラスで
メンバを追加してなくてデストラクタで何もしてないんなら、正常に
動いてくれそうな予感はします。けど、そういった条件は全く書かれずに
『不定』だと書いてあるんですから、やっちゃいけないというか、
『やれないようにクラス設計する覚悟がなければpublic継承してはいけない』
んではないでしょうか。
0796デフォルトの名無しさん
NGNG分岐フラグに文字列そのものを使っている時点であまりエレガントだとはおもわんが。
0797デフォルトの名無しさん
NGNG「基底クラスのポインタを介して派生クラスのオブジェクトを削除」しようとしなければ、問題ない。
よって766のコードは問題ない。
stringから派生した新たな文字列クラスを作ってみたところで、mapに入るのは派生クラスではなくstringであるから、何ら問題ない。
・・・という回答で良いの?
0798730
NGNGあ、ごめんなさい。例が悪かったせいで、えらく勘違いさせちゃってたみたいです。
やりたいのは『switch分岐の動的な変更』です。
文字列で分岐しているのは深い意味はありません。
>>796
じゃあ、class CTable : public vector<pair<int,FUNC> > で。
>>797
そっちは関係ありません。CTableの方。仮想デストラクタのない、
mapからpublic継承してますよね? つっこんで欲しいのは、そこ。
あと、「(前略)〜削除しようとしなければ、問題ない」のはあたりまえです。
じゃあ、間違って削除しないようにするためにどうすのか、それをコンパイラに
強制させる方法はないのか、ってことを聞きたいんです。
0799デフォルトの名無しさん
NGNGあなたの例からは、継承させる必要性を感じないのだが?
CTableにstd::vectorやstd::mapの一般的なメソッドは必要なのか?
0800デフォルトの名無しさん
NGNGpublic継承で別に問題ないのでは?と俺は思うけれど。
>>767
初期化時以外は完全に std::map として扱いたいという要求なら、
この方がわかりやすい気がする。
map<string, FUNC>& funcMap()
{
static struct initialize {
initialize()
{
map_["hoge"] = &Hoge;
map_["hage"] = &Hage;
}
map<string, FUNC> map_;
} unique_instance;
return unique_instance.map_;
}
そうでなくて、実行時用の操作メソッドをもった一個のクラスとしてCTableを
作りたいなら、当然実装詳細である map は private に隠すべきでしょう。
0801デフォルトの名無しさん
NGNG0802デフォルトの名無しさん
NGNG間違って削除出来ないようにする。では逆にどういう状況では削除出来る可能性があるか?
766の例だと、foo内で delete &table; とかやらない限り、そんなことは無いと思う。
もうちょっと起こりそうな例を・・・
それとも delete &table; さえも間違って起きないようにしたい?
0803802
NGNGdelete &table; だったら、基底クラスのポインタを介して派生クラスのオブジェクトを削除したことにならんよな。
むー?意図がいまいち読めん。混乱してきた。
0804デフォルトの名無しさん
NGNG0805730
NGNG必要です。逆に聞きたいです。CTableは、単にコンストラクタでの
初期化のためだけにクラス化しているのです。それだけのために、
map,vectorの便利な関数を全部隠蔽されてしまうのは、とてつもなく不便だと
感じませんか? あとから「あ、やっぱり使うから付け足そう」などと
するより、最初から全部使えた方が余計な再コンパイルは不要で、
便利ですよね?
>>800
キタ━━━━(゚∀゚)━━━━!!!!
なるほど、これは素晴らしいです。そっかー。こうすればいいのか……。
>>802
いや、「起こりそうかどうか」なんて、どうでもいいんです。
誰かが「仮想デストラクタのないクラスをpublic継承させちゃいかんよな」って
言ったとき、>>766みたいなコードをあなたが書いてたとして、「いや、
基底クラスからdeleteさせられることがほとんどありえないなら、
public継承するけど」って言えますか? そして、説得できますか?
俺は、無理だと思います。だから俺は、「いや、基底クラスからdeleteされることが
ありえないようなクラス設計をした上でなら、public継承させるけど」
って言いたいので、そう言う道を探してるんです。
>>803
map<string,FUNC>* p = &table;
delete p;
ならどうだろう……? new,new[]といっしょに、delete,delete[]も
privateで隠蔽しといた方が安全ですかね……?
0806デフォルトの名無しさん
NGNG> あなたの例からは、継承させる必要性を感じないのだが?
同意。メンバ変数として map 持つよな。
class CFuncDispatcher
{
typedef void (*func_type)();
std::map<std::string, func_type> func_table_;
public:
CFuncDispatcher()
{
func_table_["foo"] = &foo;
func_table_["bar"] = &bar;
}
void operator()(const std::string& s)
{
return (*func_table_[s])();
}
};
(俺なら、さらにテンプレートクラス化すると思うけど)
0807デフォルトの名無しさん
NGNG> あとから「あ、やっぱり使うから付け足そう」などと
> するより、最初から全部使えた方が余計な再コンパイルは不要で、
> 便利ですよね?
おいおい。何のためのカプセル化だよ…。
0808730
NGNGだから、mapとしての機能は、もともと全部使いたいんですよ。
カプセル化をやろうなんて思ってないんです。クラスにしたのは、
デフォルト入力データの初期化を行うのに、コンストラクタが
都合がいいからであって。そのためにmapの機能が制限されてしまうのは、
まったく不本意なんです。
0809デフォルトの名無しさん
NGNG> だから、mapとしての機能は、もともと全部使いたいんですよ。
例が悪い、というか 798 と言ってることが違う。ころころ要求仕様を変えて
逆ギレしないように。
C 言語での配列の初期化
void (*func_table)[] = { &foo, &bar, &woo };
みたいに、定義と初期化をまとめたいっつー話なのね?
0810デフォルトの名無しさん
NGNGnew してないものを delete する奴は、別問題だと考えて、ここでは new 出来なくするくらいでいいんじゃなかろうか。
new してないものを delete する・・・例えば
void foo(int*p){
delete p;
}
void bar(){
int i = 1;
foo(&i);
}
こんな事する奴は、そもそも防ぎようがない。諦めれ。
0811デフォルトの名無しさん
NGNG0812730
NGNGああ、失礼。要するに、STLのコンテナとしての機能は、
何ひとつ損ないたくない、ってことを言いたいんでして。
で、そうです。定義と初期化をまとめたいんです。
理想はコンパイル時に初期化が済んでるといいんですけどね。
それはさすがに無理っぽいです。
>>810
ですね。VCでちょっと実験してみましたけど、派生クラス側でoperator deleteを
禁止しても、呼び出されるdeleteは基底クラス側だから、>>810的な
コードを書かれたら防ぎようがないんですね。まいった……。
>>811
いや、どうでもよくはないんです。>>759以降、レスがもらえないから
話が出来ないだけでして。
0813デフォルトの名無しさん
NGNG違うネタをふったのはあんただよ
0814デフォルトの名無しさん
NGNGちなみに、今何をつくってるんすか?
0815デフォルトの名無しさん
NGNGSTLコンテナとの
多重継承にして、
データ用のクラスでデータ管理すればいいんでない?
0816デフォルトの名無しさん
NGNG俺なら、こんな感じで書くかねぇ。
typedef void (*func_type)();
struct func_tbl {
const char *d_str;
func_type d_func;
};
typedef map<string, func_type> dispatcher;
dispatcher
dispatcher_creator(struct func_tbl *p)
{
dispatcher d;
for (; p->d_str != NULL; ++p)
d.insert(dispatcher::value_type(p->d_str, p->d_func));
// 重複エラーのチェックをすること
return d;
};
int
main()
{
struct func_tbl tbl[] = {
{ "foo", &foo },
{ "bar", &bar },
{ NULL, NULL },
};
dispatcher d(dispatcher_creator(tbl));
return 0;
}
0817デフォルトの名無しさん
NGNG勝手にまとめろやごるぁ。
dispatcher& funcMap()
{
static const dispatcher::value_type initial_values[] = { ... };
static dispatcher unique_instance( &initial_values[0]
, &initial_values[sizeof(initial_values)/sizeof(table_type::value_type)] );
return unique_instance;
}
0818817
NGNGs/table_type/dispatcher
0819デフォルトの名無しさん
NGNG日本語を上手く扱える文字列としてstd::wstringを使わない理由は?
0820730
NGNGゲームです。
>>815-818
興味深いアイデア、いろいろありがとうございます。でも、>>800より
言いかと考えると、どれも微妙ですね。
>>819
ああ! そういや、そんなのがあるってのをなんかで見たような……。
ちょっとぐぐってみました。えーと。マルチバイト文字をstringで
読み込んで、標準関数(?)の mbstowcs()でwstringに
入れてしまえば、全部の文字が2バイト単位で扱える。で、テキスト
出力したいときはwcstombs()でマルチバイト文字でstringに戻せる。
……でいいんでしょうか。Webじゃあんまりいい情報が見つからないんで、
なにかお勧めの書籍があったら教えてください。
0821デフォルトの名無しさん
NGNG0822デフォルトの名無しさん
NGNG> でも、>>800より言いかと考えると、どれも微妙ですね。
変数定義と初期化をまとめたいって話なら、おれは 817 か 818 だと思うがね。
800 だと初期化に使う内容が、変数の定義部分と離れてしまう。
逆に、多くの箇所で同一の値で初期化された map を利用するのなら 800 だ
ろう。
(相変わらず要求仕様が曖昧なんで、どっちが良いのか良く分からんが)
0823デフォルトの名無しさん
NGNGのような文字列を\nで分割したいのですが、
C風でなくC++風に分割するにはどうすればよいのでしょうか?
例えばstr1にabcd、str2にefgh、str3にijklのようなイメージです。
findで\nを探してsubstrで取り出すという方法を考えたのですが、
より良い方法はあるのでしょうか・
0824コギャルとHな出会い
NGNG朝までから騒ぎ!!
小中高生
コギャル〜熟女まで
メル友
i/j/PC/対応
女性の子もたくさん来てね
全国デ−トスポット情報も有ります。
全国エステ&ネイル情報あります。
0825デフォルトの名無しさん
NGNGstrtok
0826デフォルトの名無しさん
NGNGboost::regexかboost::tokenizerを使うのが簡単だけども
標準ライブラリではないな
0827デフォルトの名無しさん
NGNGありがとうございます。
stringのままよりこちらの方が良いですか。
0828デフォルトの名無しさん
NGNGそちらが簡単ですか。
標準ライブラリ以外でも大丈夫なので
そちらも調べてみたいと思います。
ありがとうございました。
0829デフォルトの名無しさん
NGNG#include <iostream>
#include <vector>
using namespace std;
class hoge {
public:
hoge() { cout << "hoge()" << endl; }
~hoge() { cout << "~hoge()" << endl; }
};
int main() {
{
vector< hoge* > v;
for (int i = 0; i < 3; i++) v.push_back(new hoge);
for (int i = 0; i < 3; i++) v.pop_back();
}
return 0;
}
スコープを抜けてvectorが削除されるときか、さもなくば
pop_back()で要素を削除したときにhogeのデストラクタを
呼び出して欲しいのですが、うまくいきません。
何かいい方法はないでしょうか。
0830デフォルトの名無しさん
NGNGvector<hoge> を使えばいい。
0831デフォルトの名無しさん
NGNGvector<boost::shared_ptr<hoge> > もな。
0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNGvector<hoge>だと一時オブジェクトができるのがちょっと厭だったんです。
shared_ptrというものがあるんですか。
それを調べてみます。
どうもありがとうございました。
0834デフォルトの名無しさん
NGNG0835デフォルトの名無しさん
NGNG複雑なだけじゃん。
0836デフォルトの名無しさん
NGNG>vector<hoge>だと一時オブジェクトができるのがちょっと厭
*まずは* それを気にしない、メモリ管理の事は自分の責任にしない、というのが
C厨を脱する1手段である気もするけどな。
まぁ、いつまでもそれじゃ駄目なんだけどさ。
0837デフォルトの名無しさん
NGNG禿童
0838デフォルトの名無しさん
NGNGstd::string& を返す関数を書いてしまい慌ててEffectiveあたり買いにいく罠、だな。
0839デフォルトの名無しさん
NGNG> なんでC++ってポインタ(参照含む)の種類がたくさんあるんだろうね。
それが分かれば C++ 中級認定。
0840デフォルトの名無しさん
NGNG0841デフォルトの名無しさん
NGNGもともとポインタはアドレスと型の情報しかない。メモリはCではプログラマが完全に管理するものだった。
C++でも初期のころはそうだった。後に参照ができSTLができた。
ポインタをプログラマが管理するのは苦痛である。それをSTLで簡単に管理することが可能になった。
しかしそれは無理やりに近い方法である。そのためスマートな解決策がなく結果としていろんなものが出来てしまった。
メモリの管理は簡単になったかもしれないが、反対に実装を詳しく知らないとバグを入れやすくなってしまった。
ポインタの管理を言語側にすべて任せてスマートに解決したものがGC
C++を使っている以上、メモリの管理は難しい。
0842デフォルトの名無しさん
NGNG0843842
NGNG0844デフォルトの名無しさん
NGNGStrutsなんかを見ているとGCありの言語が羨ましくなる。
0845デフォルトの名無しさん
NGNGどこだ?あるのか?
0846デフォルトの名無しさん
NGNG調べちゃったじゃないか
0847デフォルトの名無しさん
NGNG0848デフォルトの名無しさん
NGNG0849デフォルトの名無しさん
NGNG略さないで書く奴なんでイネーヨ(藁
0850デフォルトの名無しさん
NGNG0851デフォルトの名無しさん
NGNG必要ないから
0852デフォルトの名無しさん
NGNGC++でGUIアプリを書かないっていうことですか?
0853デフォルトの名無しさん
NGNGその標準ライブラリで作られるGUIが、あんまりかっこわるくてさ、
俺が反対しといた。ごめんな。
0854デフォルトの名無しさん
NGNGGUIのかっこよさって実装でどうにかすればいいだけじゃないんですか?
0855デフォルトの名無しさん
NGNG0856デフォルトの名無しさん
NGNGなんで設計や仕様を統一させなかったのですか?
0857デフォルトの名無しさん
NGNG0858デフォルトの名無しさん
NGNG困ったもんだね。
0859デフォルトの名無しさん
NGNG0860デフォルトの名無しさん
NGNG0861デフォルトの名無しさん
NGNG> STLじゃなく
ってSTLを除くの?あれ結構頑張って作ってるよ、俺ら。
0862デフォルトの名無しさん
NGNG面白くない。
0863デフォルトの名無しさん
NGNG( '・ω・) ショボーン
(、っiョc)
゙'ー'゙ー'゙
0864デフォルトの名無しさん
NGNG0865デフォルトの名無しさん
NGNG0866デフォルトの名無しさん
NGNGJava の socket やら GUI 周りのライブラリみたいのを想像してるんじゃないのか?
0867デフォルトの名無しさん
NGNG0868デフォルトの名無しさん
NGNG0869デフォルトの名無しさん
NGNGそれ「標準」ライブラリじゃないし、その候補でさえない……。
>>867
使ったことないんだが Common C++ Libraries とか、どう?
http://sourceforge.net/projects/cplusplus/
0870デフォルトの名無しさん
NGNGイマイチもいいとこ
0871デフォルトの名無しさん
NGNGint allnum = 0;
for(const char* i = str.c_str(); i != NULL; i++) {
if(*i == 0x0d && ++*i == 0x0a)
allnum++;
}
と書いてみたんですが、もっといい方法はありますか?
0872871
NGNGint allnum = 0;
for(const char* i = str.c_str(); i != NULL; i++) {
if(*i == 0x0d && *(++i) == 0x0a)
allnum++;
}
0873デフォルトの名無しさん
NGNGとりあえずfindつかって書いてごらんよ。
0874デフォルトの名無しさん
NGNG数を数えるなら count_if だろう。
class IsChr
{
const char ch_;
public:
IsChr(const char ch) : ch_(ch) {}
bool operator()(const char ch) const { return ch == ch_; }
};
cout << count_if(s.begin(), s.end(), IsChr('\n')) << endl;
0875デフォルトの名無しさん
NGNGint allnum = 0;
int pos = 0;
while(true) {
if((pos = s.find("\n", pos)) == std::string::npos)
break;
allnum++;
}
0876871,872,875
NGNGcountで最初やろうとしていたんですがcount_ifですか。
これから調べてみたいと思います
0878デフォルトの名無しさん
NGNG0879878
NGNG0880デフォルトの名無しさん
NGNGcountでOKでしたか。最初やったらエラーが出でて・・・
ありがとうございます。
0881デフォルトの名無しさん
NGNG0882デフォルトの名無しさん
NGNG0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG0885デフォルトの名無しさん
NGNG英語で書いてください。
0886デフォルトの名無しさん
NGNGクラス方法およびアルゴリズムとのどの関係がそこにありますか。知らせてください。
>>865
それはここで日本の掲示板ではありませんか。
私は、日本語を流暢に話すことができるので、満足であると思います。
0887デフォルトの名無しさん
NGNGなんて書いてあるか理解できません。
0888デフォルトの名無しさん
NGNG日本人で地でやっているとしたら天才。
多分一度英語に機械翻訳してからまた日本語に戻しているのだろうが。
0889デフォルトの名無しさん
NGNG0890デフォルトの名無しさん
NGNG0891デフォルトの名無しさん
NGNG0892デフォルトの名無しさん
NGNG0893デフォルトの名無しさん
NGNGどうする>>888でばれたぞ。
0894デフォルトの名無しさん
NGNGあなたの作成したかもしれない翻訳エンジンは、どちらかと言うと改良するための
必要が存在すると思うかもしれません。
0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNG0897デフォルトの名無しさん
NGNGいや盆休みで暇なんでちょうどいい暇潰しにと思って。
0898デフォルトの名無しさん
NGNGhikky! >>>>>> Rubyist
0899デフォルトの名無しさん
NGNGしない、1レベルがより高く来られる場合、1つ、この掲示板?容易なものは単に聞かれます。
それは理解します(そのようなもの)?排泄物BAKA--それは死ぬことができます(よ答え)それは糞です、何、容易なもの糞。
それは、ものが何を使用しなければならないか尋ねています、どのように、クラス方法として。
0900デフォルトの名無しさん
NGNGpublic: void hang_up()
{
||
||
|| yesterday...
∧||∧
( ⌒ ヽ
∪ ノ
∪∪
}
};
0901デフォルトの名無しさん
NGNGCan't an answer be obtained yet?
the case where bend and one level comes more highly
-- one and this bulletin board --
it is only asked to an easy thing It is the ?
excrement BAKA to understand (such a thing).
-- It (よ答え) from which it can die is what and
the easy thing excrement which are excrement.
It is as the class method to how that is asking
what a thing must use.
0902デフォルトの名無しさん
NGNGそれは、オブジェクト指向のスクリプト言語として他のスクリプト言語を圧倒する実行および美しい言語明細を行っています。
例えば、スキーム、SmallTalkなどが比較的美しい言語であると言われていますが、ルビーは遅れる優位によって一層の美および一層の現実性を装備しています。
もちろん、Perl、ピュートーンなどは問題外です。
日本語との類似性では、選択が単にルビーを持つでしょう。
ルビーのLinuxの分配の採用の例は増加していました。
分配はすべて、1年後に、ルビーの標準の採用を行なうでしょう。
ルビーは将来のスクリプト言語です。
それは、長くなりましたが、KOPIPEではありません。
場合、KOPIPE[承認することができる人々は、ルビーのものを理解することができない人々に会います、そして/この発言]、それらは幸福です。
0903デフォルトの名無しさん
NGNG難しいことを暗号に利用できんか?
0904デフォルトの名無しさん
NGNG失われている。
0905デフォルトの名無しさん
NGNG0906デフォルトの名無しさん
NGNG0907デフォルトの名無しさん
NGNGその翻訳そふとかなり完成度高そうじゃないか?
0908デフォルトの名無しさん
NGNGそれ他の言語への翻訳も間に入れて何回も繰り返してみたんだが
翻訳がおかしくなるのはある程度までなんだよな。
もちろん原文とは違うがある程度で内容の劣化が止まる。
だからなにと言われても困るが。
0909デフォルトの名無しさん
NGNG例えばExciteで翻訳繰り返していると、途中で劣化が止まるね。
恐らく複数の異なるエンジン間で翻訳を繰り返しているのだろう。
0910デフォルトの名無しさん
NGNG俺はExcite(または同じ翻訳エンジン)とみた。
Exciteは変換できないとき>>899のように括弧がでてくるからな。
0911デフォルトの名無しさん
NGNGひどく崩れるのでは?
http://www.ocn.ne.jp/translation/?R
0912デフォルトの名無しさん
NGNGあなたは恐らく理解しませんが、ルビーは素晴らしい言語です。
実行により実行することができる美しい言語詳細はオブジェクト指向のスクリプト言語
として他のスクリプト言語を圧倒します。例えば、遅れの優位による、美および多数の
現実性、それによってSUKIMU、SmallTalkなどがそうだったと言わ?黷トいましたが、
ルビーおよび設備は実行されました、その、さらに比較的、美しい言語(多数[ほとんど
遠くに])([多数]の内部の)――さらに(自然)問題にならず、それはさらに多く(恐らく距離中の)
である選択は、同じPerlを持った日本語としてポイントにルビーを単に持っています、
PYU調子など。ルビーのLinuxの分配の採用の例は増加していました。分配はすべて、
1年後にルビーの標準を採用するでしょう。ルビーは将来のスクリプト言語です。それは、
長くなりましたが、KOPIPEではありません。更に、人々、KOPIPE[私はそれを人々に会うこの
発言と見なすことができません、また、それは、それがそのように現われる(しかしながら)こと
を受理することができないものを持っています、この人、そしてルビー](および/)、また、
それらは幸福です。
0913デフォルトの名無しさん
NGNG-> 「彼は、女性を望むように見えて狂気でしょう。」
-> 「恐らく、彼は、女性を望むように見えて、精神異常です。」
-> 「恐らく、彼は、女性を望むように見えて、精神の混乱です。」(以下同じ)
0914デフォルトの名無しさん
NGNG"〜そして/"
ってemacsかな?
それにしても902みたいな翻訳って難しいな。
0915デフォルトの名無しさん
NGNGけっの中の最初のあっちょん
けっの中の始めのあっちょん
けっの中で始められたあっちょん
けっの中によって始められることができたあっちょん
けっの内部によって始められることができたあっちょん
0916デフォルトの名無しさん
NGNG陰茎は、トンボ釣りにその方法に後ろにはさまれました。また、水は薄明かりの町の小便によってその中でまき散らされました。
陰茎は方法でトンボ釣りに挿入されて戻りました。さらに、水は、その中の薄い光の町の尿によってまき散らされました。
すぐに止まるね。
0917デフォルトの名無しさん
NGNG更に、その中の薄い光の町の尿は、水曜日までにまき散らされました。
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNGせっかくの良スレが駄レスで埋まるのは、とても悲しいものです。
0920デフォルトの名無しさん
NGNG与えられる場合、それは保存されます。彼はさらに単にC++を理解しません。
0921デフォルトの名無しさん
NGNGその文自体が理解できましぇん
0922デフォルトの名無しさん
NGNG日本語変。
0923デフォルトの名無しさん
NGNGそれは、それが素晴らしく熟練した場合、悪いですか、それ、
日本ですが、よろしく、私?ここに来るあなたは、それがC++に
健康でそれに非常に来る、と思います。更に、私がこの日本語
のようにC++を滑らかに書くことができれば、それは嬉しい。
0924デフォルトの名無しさん
NGNGどこの翻訳エンジンだ?昨日からいるようだが。
0925デフォルトの名無しさん
NGNGこれは自動的に翻訳エンジンです。結果はどうですか。それはそれぞれを
装備一完全に良いタッチです。それ,また私がそれでいると思います。確実に、
それは爆発的に糞です。
0926デフォルトの名無しさん
NGNGどこの外国人か知らんが商用に使おうとか思うなよ。
0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNG0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNG知っていたらぜひ教えていただきたいのですが。
0933デフォルトの名無しさん
NGNG0934デフォルトの名無しさん
NGNGC++なら既にあるじゃないか。
君の心の中に(略)
0935デフォルトの名無しさん
NGNGレベル1
0936デフォルトの名無しさん
NGNGborland の奴だとBCC Developerと一緒に使うといいよ
gccはGCC Developerだっけかな?(こっちは使った事無い)
0937デフォルトの名無しさん
NGNG具体的にどのようにすればいいのですか?
何もしらないもので・・^^;
0938名無しさん@Emacs
NGNGじゃあ自分で調べたら?
調べて分からなかったら, そこで初めて人に聞くといい.
じゃないとプログラミングの勉強始めても身に付かないよ.
0939デフォルトの名無しさん
NGNG装備一完全に良いタッチです。それ,また私がそれでいると思います。確実に、
それは爆発的に糞です。COBOL。
http://www.borland.co.jp/cppbuilder/freecompiler/
0940デフォルトの名無しさん
NGNG私はDQNなんですぐ答えを・・・
http://www.cygwin.com/download.html
GNU + Cygwin + Window = Cygwin(・∀・)イイ!
0941932
NGNG早速ためしてみまーーす
0942デフォルトの名無しさん
NGNG最も強いものは「BASIC」です。これはあなたのために必要になります。
コンパイラーの設置によって最初につまずくでしょう。これは運命です。
次に、言語の参照の壁があります。次に、さらにオブジェクト指向の壁があります。
今後危険な多くの方法があります。
0943名無しさん@Emacs
NGNGだからExciteはもうイイって. 正直目障り.
0944デフォルトの名無しさん
NGNG私は、この糸によって非常にエキサイトです。私はすべてを知っています「C、C++"言語。「GNU」の仕事も終わりました。
「INTEL」の仕事も終わりました。それは非常に面白い。私は、今「2CHANNEL」の仕事を行っています。
それは非常に面白い。特に、ASCII芸術の事務長のアルゴリズムは非常に賞賛されます。
0945デフォルトの名無しさん
NGNG0946デフォルトの名無しさん
NGNGなにを相談したいの?
相談することないなら
スレ違い、以上。
0947デフォルトの名無しさん
NGNGfriend class T;
private:
void func(void){cout<<"TCA"<<endl;}
};
class A{
public:
TCA<A> tca;
A(){tsa.func();}
};
なんでエラー??
0948デフォルトの名無しさん
NGNGtca.func();
0949名無しさん@Emacs
NGNGfriend T;
private:
void func(void){cout<<"TCA"<<endl;}
};
class A{
public:
TCA<A> tca;
A(){tsa.func();}
};
0950名無しさん@Emacs
NGNGfriend class T;
じゃなくて
friend T;
とするところが変更点…って見れば分かるか.
0951デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNGfriendは使わないほうがいいんでしょ?
goto並みっすか?
0953デフォルトの名無しさん
NGNGC言語しかできないんですが。
0954デフォルトの名無しさん
NGNGいちおうC++でなくCからでも使えるようになっとるよ・・・・
0955デフォルトの名無しさん
NGNGiteratorを作るような時は、逆にfriendを積極的に使った方が、
publicメンバを減らせてカプセル化を強められるということもある。
要は使い方次第。
0956デフォルトの名無しさん
NGNGあったような気がするが……
ん―、思い出せん。
0957デフォルトの名無しさん
NGNGああ、何を言いたいのか分かった。
class Hoge{
int n_;
public:
Hoge() : n_(0) {}
Hoge(int i) : n_(i) {}
friend Hoge operator +(const Hoge& lhs,const Hoge& rhs){
return lhs.n_ + rhs.n_;
}
};
Hoge a(3);
Hoge b(4);
Hoge c = a + b;
c = 3 + b;// friendなら通る。
c = a + 4;
ってなケースのことだな。
friendなら、暗黙の型変換をやってくれるからどれも通るけど、
friendにしてないと、通らないやつが出てくる、というお話。
0958デフォルトの名無しさん
NGNGうむ。3.operator+(b) という構文は許されないからねえ。
0959デフォルトの名無しさん
NGNG0960デフォルトの名無しさん
NGNG「C++相談室 part10」
http://pc3.2ch.net/test/read.cgi/tech/1029315669/
0961デフォルトの名無しさん
NGNG0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNG0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNG0967デフォルトの名無しさん
NGNG思い切って聞きますね。
UNLZA32.DLLの扱いについて
質問したいのですが、
どこのスレへいったらいいのでしょうか?
どこへいってもすれ違いと言われてしまいそうで
困りはてています。
ここでお聞きしてもいいのでしょうか?
0968デフォルトの名無しさん
NGNGそんなDLL初めて聞いた。何する奴?
0969967
NGNGUNLZA32.DLL
↓
UNLHA32.DLL
でした。
0970デフォルトの名無しさん
NGNGこれ見る限り, APIドキュメントも同梱されてるみたいだが…?
0971967
NGNGわざわざすみません、
一通りドキュメントには目を通したんですが、
どうにもわからなくて。。
ここで具体的に聞いていいですか?
0972デフォルトの名無しさん
NGNG扱いといっても色々あって回答に困る。
拾ってきたアプリ(用DLL)の使用方法が分からないの?
自作アプリからDLLを使う方法が分からないの?
権利面とかの扱いが分からないの?
0973デフォルトの名無しさん
NGNG下記あたりをキーにGoogleで検索して見てください。
DLL LHA 動的リンク
すぐに詳しく書いてあるページがヒットすると思う。
0974デフォルトの名無しさん
NGNGとりあえずここに詳しい解説があるよ。
http://www.hyuki.com/writing/techask.html
0975967
NGNG自分の症状書いてたので
レスに気付きませんでした。
とりあえず>974さんに教えていただいた
ところに解決策があることを期待して行って来ます。
それから聞いても遅くないですしね。、
ありがとうございました。
0976967
NGNG教えていただいた、キーワードでも
さわりくらいの解説しかヒットしませんでした。
>974
散々探したのですが
本当にこのURLであってますか?
サイト内検索でLHAと検索しても
ヒットしなかったんですが。。
とりあえず解説サイトはないとして、
心置きなく質問させてもらいますね。
でもちょっとタイミング悪いみたいなんで、
次スレ待ってます。
0977デフォルトの名無しさん
NGNG解説サイトはあるが、それが967の求めているかどうかがわからない、というだけ。
>>974をちゃんと読んで、自分が何を求めているのか、正しく提示せよ、ということ。
0978デフォルトの名無しさん
NGNG- main.cc
#include<cstdio>
template <typename T> void func(T a);
int main(int argc,char *argv[]){
func('c');
}
-func.cc
template <typename T> void func(T a){
return;
}
の様に別ファイルにテンプレート関数を記述した時、コンパイルは通るのですが、リンクで以下のエラーメッセージが発生します。なぜなのでしょうか?
main.o: In function `main':
main.o(.text+0xc): undefined reference to `void func<char>(char)'
collect2: ld returned 1 exit status
コンパイラは、gcc version 2.95.3 を使用しています。
よろしくおねがいします。
0979デフォルトの名無しさん
NGNG分らない。
0980デフォルトの名無しさん
NGNGexport付けてないからでしょ。それと、exportキーワードをサポートしている
処理系はほとんどないから、分割コンパイルは難しいかも。
0981デフォルトの名無しさん
NGNG0982デフォルトの名無しさん
NGNGどっかいいサイトあったら教えて
0983またかよ、、
NGNG0984デフォルトの名無しさん
NGNG979> それではfunc.ccをコンパイルするときには func<char> が必要かどうか
979> 分らない。
とありますが、必要である事をコンパイラへ知らせるには、どのようにすれば良いのでしょうか?
980> export付けてないからでしょ。それと、exportキーワードをサポートしている
980> 処理系はほとんどないから、分割コンパイルは難しいかも。
export をサポートしていないコンパイラでは、どうやっても無理と言う事でしょうか? export をサポートしているコンパイラは、どの様な種類の物があるのでしょうか?
981> See C++ 3rd, C.13.10
これは、何ですか?
983> http://www.kumei.ne.jp/c_lang/index.html
C++ の文法について書かれたページですね。しかしここには、この問題の解決法は記述されていないようです。
0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNG0987デフォルトの名無しさん
NGNG>981> See C++ 3rd, C.13.10
>これは、何ですか?
See=見ろ
C++ 3rd=プログラミング言語C++ 第3版
C.13.10=付録Cの13(テンプレート)の10(明示的なインスタンス生成)
0988デフォルトの名無しさん
NGNGOppai → おっぱい
0989デフォルトの名無しさん
NGNGファイル func.cc 内に、
template void func<char>(char);
template void func<int>(int);
を記述する事により、実際に使用する型各々のコンパイル結果がオブジェクトファイル内に生成される訳ですね。
どうもありがとうございました。
0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999SITNAM
NGNG(゚Д゚)ノ < 1000ゲット!
(| | \__________
〜| |
∪∪
1000SITNAM
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。