クラスの宣言が無いか間違っています

C++Builderで作成したフォームを使いまわそうとコピー&リネームしたら変なエラーが出るようになった。

モジュール BetaForm でエラーが発生しました。
TFormAlphaクラスの宣言が無いか間違っています
それでも保存しますか?

なんのこっちゃ?
リネーム作業はソースコードを開いて名前の部分を片っ端から置換している。なにか、置換し忘れているのかとソースコードを眺めても問題はなさそう。しかもメッセージを無視すればビルドも通るのに、なぜにエラーになるのかナゾ?
クラスの宣言もあるし、間違いもないぞ、なぜなんだ?

沈思黙考すること2昼夜。←解決できずに他のことやってた。

そういや.cpp/.hは編集したけど、.dmfは何も手を加えていなかったことに気が付く。

名前をリネームしたフォームの.dmfファイルをエディターで開くと最初の行に以下のような記載が見つかる。あー、やっぱり、こいつが犯人だ。

object FormAlpha: TFormAlpha

たぶん、これが前の名前を参照しているのが問題。新しい名前に書き換えて保存。(←やっていいのかは自己責任で判断)

こんな感じに修正。
object FormBeta: TFormBeta

C++Builderでプロジェクトを開きなおしたら、今度はエラーが出なくなりました。(開きなおさないと、ちゃんと再読み込みしてくれないようなので注意)


動作環境のメモ
Windows7 Professional
Embarcadero RAD Studio 2011(C++Builder2010)

コメント

  1. IDE使って編集したのにdmfが修正されなかったんですか?

    返信削除
  2. 言われて見ればその通り。フォームの定義もソースコードに埋まってると思い込んでたんで2日間も悩んでだけど、IDEをよく見たらフォームの名前を変更できそうなインターフェースあったよ。とほほ、orz

    返信削除
  3. モデルビューでフォームの名前(クラス名)を変えられると思ったものの、変わるのはクラス宣言のみ。残念。
    IDEで来そうな気はするものの、見つけられない。

    返信削除

コメントを投稿

このブログの人気の投稿

TabError: inconsistent use of tabs and spaces in indentation

マクロを含んだ.XLSがExcel2010で開けない

using ディレクティブまたはアセンブリ参照が不足しています。