EOF付きのテキストはバイナリファイルになっちゃうな
BCC5.51にて、3つ以上の引数を持つ仮想関数を含むクラスを仮想継承しようとすると
コンパイラが想定外の(ファイル終端以降の行番号を示して、その関数にvoidが渡されたかのような)メッセージを吐くのですが、
これはこのバージョンでの仕様なのでしょうか。
class Base {
virtual Base& f(const double x, const double y, const double z) = 0;
};
class Derived : virtual public Base {
virtual Derived& f(const double x, const double y, const double z) {}
};
int main(int argc, char *argv[])
{
Derived d;
return 0;
}
>>935 BCCの最新版CodeGear CC 6.10でも動揺のエラーが出ました。
VS2008ではコンパイルは通ります。
バグではないでしょうか。
>>936 ありがとうございました。
構造体に引き渡してなんとかしてみることにします。
派生クラスで返値型の多態性をやめると動きますね。
class Base {
virtual Base& f(double x, double y, double z) = 0;
};
class Derived : virtual public Base {
virtual Base& f(double x, double y, double z) { }
};
まあtypeof(this)を返すタイプの構文は趣味によるということでしょうか。
私はSTLの影響でこれを使うようになりましたが。
virtual 継承をやめても通るようになる。
この場合はエラーが出た方がよい気がする。
現在MacOSからカキコのため確認できんが、
VLint operator-( VLint& b ) const;
みたいにする。左オペランド=構造体自身がconstになるので
operator関数の中にメンバ書き換えがあるとコンパイルエラー。
どうしても書き換えたい場合mutableにすればいいが、いろいろ注意。
今更だけど、VC++でも警告出るし、/Za(標準準拠)ではエラーになるじゃないか。
>>945 /W4 つければ「非標準の拡張が使われた」云々の警告がでるはず。
Visual C++ は標準では警告のレベルが低すぎるので、常に /W4 に
しておくのがおすすめ。
処理系に関わらず、趣味でやってるなら、警告最強にしておいた方がいいな。
仕事だと、どうにもならないことも多々あるけどwww
>>946 サンクス。なるほど、/W3 でした。
これからは出来るだけ/W4 を付けてコンパイルするようにします。
なおcmdのエラーですが、PATHを直せば、VS2005と共存も出来ました。
949 :
デフォルトの名無しさん:2009/04/15(水) 21:16:21
-L"c:\Borland\Bcc55\lib" でilink32.cfg 作ってもコンパイルしようとすると
Fatal: ファイル ilink32.cfg が開けませんって出るのなんでですか?
拡張子はしっかり変わってるしC:\borland\bcc55\Binにも入ってるのに...orz
自己解決した
スマソ!
もぉ、駄目かもわからんぇ
953 :
デフォルトの名無しさん:2009/04/30(木) 10:36:42
C++ Builder 2009 のトライアル版入れて
コマンドラインコンパイラだけ使い続けることってできないのけ?
BCCDevelopだが、コンパイルの最後に
「Fatal: Command arguments too long」と出てエラーになる。
引数リストが長すぎるって事は、
プロジェクトに.c.hファイルを使いすぎという事なんかな。(385個)
リソースの上限が1Mといい、どんどん使うのが苦しくなっていく・・
この2つ以外は、完璧なコンパイラなんだが。
bcc32 -W -3 -O2 -w -AT -pc -H- -k -b -eRelease\hoge.exe
Release\one.obj Release\two.obj ...
ファイルの数が多すぎるというよりかは、
全ファイルの名前の長さの合計が長すぎるの方が正しいか。
>>956 ソース公開されているみたいだから自分でレスポンスファイルを使うように変更してみなよ。
と思ってソース見てみたら、ini ファイルの UseMakeFileEx を true にしたら良いらしい?
BCC Developer 自体を使ったこと無いからわからんけど試してみ。
>>957 iniファイルにはその項目は見つからなく、
bdpファイルにはその項目があったのでtrueにしてみたが、
(UseMakeFileExはプロジェクトの設定でのまとめてコンパイルの項目にあたる)
>>956と同じように、bcc32コマンドに全objファイル名が引数にされ、
>>955と同じ引数が長すぎるというエラーが出た。
変わりに、出力ディレクトリ名をデフォルトのReleaseから、
短い名前(Rel等)にした所、コンパイルが成功した。
bcc32コマンドでRelease\one.obj Release\two.obj ... と渡される引数が、
Rel\one.obj Rel\two.obj ... とかになり、
引数の長さを短くできるのが成功要因と思われる。
その項目を追加したらどうなる?
つーか、ソース読んでみなよ。
FrBDMain.pas だよ。
>>960 その項目を追加というのは、
BccDevを起動し、まとめてコンパイルのチェックボックスをチェック ==
メモ帳等を起動し、bdpファイルのUseMakeFileExの項目を1にすると言う事?
なら、
>>959で書いたのがそれで、同じエラーが出た。
確かまとめてコンパイルは、
例えばひとつのファイルを修正してコンパイルした時でも、
そのファイルだけでなく、全てコンパイルし直される感じだったと思う。
ソースは知らない言語だった。(パスカル?)
>>961 957 で書いたように、俺は BCC Developer を使ったことが無く、ソースを読んだ
知識で書いているので bdp ファイルとか××のチェックボックスとか言われても
わからん。
誰か分かる人がきてくれるといいね。
で、追加しろってのは、君が ini ファイルには無いと言ったから、無いなら追加
したら? ってこと。
ini ファイルに、
UseMakeFileEx = true
という行を追加してみて。
ini ファイルは、ソースを読んだところ、exe と同じフォルダにあるようだ。
exe の拡張子違いか、ユーザー名に拡張子 ini を付けたもののようだ。
パスカルはかなり C に似ている。
書くのは大変でも、読む程度なら類推でなんとかなる。
bcc32 は、長すぎる引数の受け渡しのために、レスポンスファイルというものを使う
仕組みを持っている。
これだけ知ってれば何とかなると思う。
何ともならず、かつ BCC Developer 以外を使っても良いなら、
http://www.codegear.com/jp/downloads/free/cppbuilder から Turbo C++ 2006 を使った方がいいかもね。
>>962 詳しくサンクス。
なるほど、行ごと追加するのね。
ターボ2006と合わせて試してみる。
964 :
955:2009/06/20(土) 10:37:53
iniファイルにUseMakeFileEx = trueを追加したが変化がなかった。
エラーは出ないから、書く位置が違っているのかもしれん。
他には、別途コンパイルオプションを追加できる機能があるので、
それにレスポンスファイルの使用の@hoge.txtを指定してみたが、
-Wや-3などのひとつとして@hoge.txtが追加されるだけで変化なし。
これも、何か正しい方法があるかもしれん。
ターボ2006はログインの地点でうまくいかなかった。
bccの時のパスワードはあるが、それとは別のなんかな。
965 :
955:2009/06/20(土) 15:50:31
#pragma commentでshlwapiをリンクしているが、
突然、フルパスを指定しないとエラーが出るようになった。
なんかPCに変なものをインストールしてしまったのかな。
bcc32.cfgかilink32.cfg内の
LIBのPATHがおかしいんじゃねーの
>>967 サンクス。
たぶんその通りで、SetBccを使って設定しなおしたらうまくいった。
Vistaを使用しているのですが、下記のプログラムの出力結果が★のようになります。
★
fail:T
bad:T
eof:F
1
----
#include <fstream>
#include <iostream>
int main()
{
std::ifstream ifs("D:\\test.txt");
std::cout << "fail:" << (ifs.fail()?"T":"F") << std::endl;
std::cout << "bad:" << (ifs.bad()?"T":"F") << std::endl;
std::cout << "eof:" << (ifs.eof()?"T":"F") << std::endl;
std::cout << 1 << std::endl; // (あ)
return 0;
}
970 :
969:2009/07/18(土) 04:59:45
調べた結果以下の特性があるようです。
・(あ)をコメントアウトすれば全て"F"が表示される
・(あ)はプログラム中のどの場所に置いても結果は★のようになる(関数の呼び出し先で1を出力しても同じでした)
・(あ)数値ではなく'A'や"ABC"を出力した場合、全て"F"が表示される
一体何が起こってるのか全くわからず手詰まり状態です。
何かまずいことしてしまっているのでしょうか。
971 :
デフォルトの名無しさん:2009/08/20(木) 11:54:23
同じじゃん
973 :
971:2009/08/21(金) 07:24:13
・ユーザー登録の仕方が分かりにくい
(popupウィンドウが出た後ページが切り替わる)
(そのページに入ると英語になる)
・容量800M越え
・.net1が必要(3は既に入っているのに)
(書かれているリンクはリンク切れ)
・readmeの文章が分かりにくい
(再配布、商用利用、選べる言語の数など)
・PCに別のユーザー名が登録される(XP)
・BCC5.51とは当たらないでくれた
(5.82がある時でも、BccDevで5.51でコンパイルされた)
入手するだけで大変だったから、
自分には向いていないかも。
BCC5.82を単体で配布してほしい。
>>972 サンクス。
975 :
971:2009/08/22(土) 08:43:34
インストールに2時間かかってしまった・・・
シリアルとキーはどこにあるか探しまくって、結局MyPageから登録製品一覧で見つけて・・・
登録ウィザードかけたが認証しなくて、メールも返って来なくて固まって何個も起動して応答なしばっか・・
結局ノートン止めてやったらやっとWEB認証出来た
強制終了も効かない認証システムってウイルスかw
ノートンがウイルス
コンパイル時に"-RT-"を指定してRTTIを無効にしたのにもかかわらず
RTTIを使ったプログラムが正常にコンパイルできてしまいます。
指定方法が間違っているのでしょうか?ご教授をお願い致します。
コンパイル後のバイナリファイルにクラス名が残っていたので
気になって無効にしてみたのですが・・・。
CPad for Borland C++Compilerが手に入らん
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
致命的エラー F1008 hoge.cpp 168: メモリ不足(関数 main() )
*** 1 errors in Compile ***
って言われます。
これを解決する方法はありませんか?
ググると「テンプレートの深さ」云々ってページがひっかかるけど思い当たる節は?
982 :
980:2009/09/18(金) 18:08:30
>>981 ありがとうございます。
思い当たる節はないです。
ただ例外を多用しています。
ちなみにVC++とg++では問題ありません。
どういうソースかわからないと調べようがないような気が。