• ベストアンサー

C++ Builderでユニットの追加

趣味でプログラミングを行ってますCerapodaと申します。 Builderを使って1つのFormと1つのCpp,hファイルを使ったプログラミングならある程度のところまで出来ると思っているのですが 以前違うプロジェクトで作った関数を新たなプロジェクトで使おうとして いちいちコピー&ペーストするのも大変なので ひとつのユニット&ヘッダーファイルとしてインクルードして使いたいなと思いました。 そこで http://www.osakac.ac.jp/labs/matsuura/japanese/program/C++Builder/Project/projectManyForm.htm このページを参考にしてUnit1とUni2を作成し Unit2に double Analysis::Function(double val) { return(1.0-val); } の関数を追記。 Unit1のcppに C.Function(0.5); と書き加えたのですが [リンカ エラー] 外部シンボル '_C' が未解決… とエラーが表示されてしまいます。 どこに問題があるのか教えていただければ幸いです。 情報が足りない場合は、補足しますのでよろしくお願いします。 また、このような作業で参考になるサイト,URL等ありましたら教えていただけると幸いです。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KoHal
  • ベストアンサー率60% (110/181)
回答No.2

参考にしたサイトのソースをそのまま流用しているという前提ですが、それだと、そもそもAnalysis Cが定義されてませんね。不備のあるソースですよそれ。 とりあえず、Unit2.cppの末尾にでも   Analysis C; の一行を加えてみてください。 これでダメならあなたのお書きになったソースを全部提示してもらわないと判断がつきません。 といいますか、質問の際は最初からソースを提示してください。 文字制限に引っかかるときは、問題が発生する最小限のソースを抽出して。 回答者が他所のサイトをわざわざ開かなくても回答できるように。

Cerapoda
質問者

お礼

回答ありがとうございます。 補足要求あればソースを開示しようと思っていたのですが テストで適当に作っただけの短いプログラムですので 始めから開示しておけばよかったですね。申し訳ないです。 ソースを補足させていただきました。 Unit2.hの末尾に extern PACKAGE Analysis C; とあるのですが出来ませんでした…と思っていたのですが 回答ではUnit2.cppの末尾にAnalysis C;を追記であることに 今気づいて、試してみると成功しました。 回答ありがとうございました。

Cerapoda
質問者

補足

【 Unit1.h 】 ここは一切追記していません。 【 Unit1.cpp 】 #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "Unit2.h" <中略> //-------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { C.Function(0.5); } //--------------------------------------------------------- 【 Unit2.h 】 #ifndef Unit2H #define Unit2H #include <stdio.h> #include <fstream.h> #include <math.h> #include <vector> using namespace std; class Analysis { public: Analysis(); ~Analysis(); double Function(double val); }; //----------------------------------------------------------- extern PACKAGE Analysis C; //----------------------------------------------------------- #endif 【 Unit2.cpp 】 //------------------------------------------------------------ #include <vcl.h> #pragma hdrstop #include "Unit2.h" //------------------------------------------------------------ #pragma package(smart_init) //------------------------------------------------------------ Analysis::Analysis() { } //------------------------------------------------------------ Analysis::~Analysis() { } //------------------------------------------------------------ double Analysis::Function(double val) { return(1.0-val); } //------------------------------------------------------------

その他の回答 (1)

  • neoty
  • ベストアンサー率34% (37/107)
回答No.1

Unit2自体をUnit1の先頭でIncludeしないといけません.

Cerapoda
質問者

補足

回答ありがとうございます。 仰るとおりで http://www.osakac.ac.jp/labs/matsuura/japanese/program/C++Builder/Project/projectManyForm.htm の始めに書いてある通り 「ファイル->ユニットヘッダーファイルの追加」を行っています。 Uni1.cppにも#include "Unit2.h"と表示されています。 それでも、エラーが表示されてしまうんです。 どうしてなんでしょう?

関連するQ&A

  • C++Builder6 での複素数計算

    C++builder6 で複素数計算が出来なくて困っています、 UNIT1.CPPのヘッダー部分に  #include <vcl.h>  #pragma hdrstop  #include <iostream>  #include <complex.h>  #include "Unit1.h" //-----------------------------  #pragma package(smart_init)  #pragma resource "*.dfm" を書いて イベントハンドラ部分に変数の宣言   complex<double> z; として緑色三角形の実行ボタンをクリックすると   「未定義のシンボル complex」 と言うエラーが発生します、 この解決方法を教えて頂ければ幸いです、宜しくお願いします。 (なお C++builder5 では何の問題もなく複素数計算のソフトが出来ていました)   

  • c++builder6で複素数計算教えて下さい

    私は今までwindows xp を使い c++builder5 で復素数の電気関係の簡単なソフトを作って来ました、 これからはc++buildre6で複素数計算をさせたいのですが下記の様なエラーが発生して前に進めず に困っています(OS は windows xp 及び windows 8 でエラーは同じ様に発生) unit1.cppの  ヘッダー部分に #include <complex.h> を書き  イベントハンドラ部分に complex<double> z; と書いて 実行ボタンを押すと  complex<double> z; の行で 「未定義のシンボル complex」 のエラーが発生します 上記の解決方法を教えて頂ければ幸いです。

  • C++Builder  リンカエラーとは?

    はじめまして。プログラム超初心者です。 C++Builderを用いてプログラムを作成したのですが『リンカエラー』というものがでてコンパイルできません。 これはどういうことなのでしょうか?また、解決策にはどのようなものがありますでしょうか? よろしくお願いします。

  • VC++ と C++Builder

    C++の基本的な構造は理解していて、Win32APIを勉強しようとVC++でプログラミングを始めた者です。参考書は猫でもわかるWindowsプログラミングを見ながら勉強しています(難しくてあまり理解出来ていませんが)。 しかし、機能が多すぎたりと使いこなす自信がありません。 C++Builderに変えてみようかと思っているのですが、VC++とC++Builderの違いを教えて下さい。漠然としすぎていてアホっぽい質問ですが・・。 VC++とC++Builderのプログラムの書き方の大きな違いなどはあるのでしょうか? また、みっちり調べたつもりですが無償のBorlandC++Builderが見あたらないのですが・・・。

  • Vista(日本語版)に BorlandC++6Builder(英語版

    Vista(日本語版)に BorlandC++6Builder(英語版)をインストールし、かんたんなソースファイル(Unit1.cpp)を入力して Run(実行)したら、妙なエラーになりました。 1.Unit1.obj までは生成できるが、そのあとの Project1.obj 以降が生成できない。 2.ソースファイルをデフォルトのフォルダ(C:\Program Files\Borland\CBuilder6\Projects)に入れると、BorlandC++6Builder の Open(ファイルを開く)からはこれらのファイル(Unit1.cpp, Unit1.obj)が見えるのに MyComputer からは見えない。 3.ソースファイルを別のフォルダ(ユーザのドキュメントフォルダ)にセーブすると、もちろん MyComputer からも見えるようになるが、これをコンパイルするとオブジェクトファイル(Unit1.obj)がどこに生成されるのかわからなくなる。 以上が解決できなくて困っています。私現在、海外の学校でプログラミングを教えているのですが、BorlandC++6Builder を使うのは今回が初めてです。学校のXP(ロシア語版)では問題なく動作しているので(私自身がインストールしたBorlandC++6Builder プログラム+ロシア語版パッチで実行すると、Project1.exe ファイルまですべて同じフォルダ内に生成される)、なぜ私の Vista でできないのか理由がよくわかりません。パッチのせいでしょうか。C++ ぐらい教えるのはわけないと思って安請け合いをしてしまいました(スミマセン)。初歩的な質問かもしれませんが、緊急性を要するのでよろしくお願いいたします。

  • C++Builder Ver6.0でエラーが発生

    Windows XP のAdminiでC++Builderをインストール した後、guestでログインしてC++Builder Ver6.0 を起動させ、実行させた場合は ”c++致命的エラー Project1.cpp(35):F1013 出力ファイルの書き込みエラー” というエラーが発生します。 原因は何でしょうか? 出力先のパスの指定を書き換えないとだめなのでしょうか?

  • EMBARCADERO C++Builder 2010を使用してCのプ

    EMBARCADERO C++Builder 2010を使用してCのプログラミングを勉強しています。 http://okwave.jp/qa/q3367120.html 上記の質問を参考に、ソースを書いて、コンソールアプリケーションでプロジェクトを作成、プログラムを動作させることはできています。 ただ、プログラム実行が終わった後もコマンドプロンプトを表示させたままにして動作を確認したいのですが、どのように設定すればいいのでしょうか?

  • C++ Builderでの自作関数

    C++ Builderでの自作関数 初心者のため、初歩的な質問で恐れ入ります。 今、C++ Builderを使いアプリを作成中なのですが、 下記のような自作関数を使いたいのですがどのように書くと エラーがでなくなるのでしょうか? main関数中で、あるif文に該当すると自作関数の内容を行いたいと思っています。 自作関数には、テキストファイルへ文字列データの書き出しをする内容を書いています 今、引数にはvoidを使っていますが、 「TForm1のサイズが不明、あるいはゼロ」「宣言の構文エラー」というエラーが出てしまいます。 voidにしているのが原因でしょうか? 何もわかっていなく恐縮ですが、よろしくお願いします!

  • C++ Builderでプロジェクト開くとエラー

    現在C++ Builder 2009で私用しているプロジェクトを開くため、groupproj拡張子のファイルをダブルクリックで開くと次のようなエラーボックスが出てきます。 Class TDateLabel not found, Ignore the error and continue? NOTE:Ignoring the error may cause components tobe deleted or property values to be lost. このようなエラーです。 これはどのようなエラーなのでしょうか? 解決方法などありますでしょうか? どうぞご教授の程よろしくお願い致します。

  • C++Builder でPanel上にフォームを配置する方法

    C++ Builder 5.0でのプログラミングについて質問です。 プロジェクトにForm1とForm2を作成し、Form1上に TPanelコンポーネントを配置します。 このPanelコンポーネント上にForm2を配置し、Form1上にForm2が存在している状態を作る事は可能でしょうか。 可能でしたらその方法を御教授下さい。 OS Winows2000(SP2) C++ Builder5.0 professionalです。 宜しくお願いします。

専門家に質問してみよう