プロが教える店舗&オフィスのセキュリティ対策術

趣味でプログラミングを行ってますCerapodaと申します。

Builderを使って1つのFormと1つのCpp,hファイルを使ったプログラミングならある程度のところまで出来ると思っているのですが
以前違うプロジェクトで作った関数を新たなプロジェクトで使おうとして
いちいちコピー&ペーストするのも大変なので
ひとつのユニット&ヘッダーファイルとしてインクルードして使いたいなと思いました。

そこで
http://www.osakac.ac.jp/labs/matsuura/japanese/p …
このページを参考にしてUnit1とUni2を作成し

Unit2に
double Analysis::Function(double val)
{
return(1.0-val);
}
の関数を追記。

Unit1のcppに
C.Function(0.5);
と書き加えたのですが

[リンカ エラー] 外部シンボル '_C' が未解決…
とエラーが表示されてしまいます。

どこに問題があるのか教えていただければ幸いです。
情報が足りない場合は、補足しますのでよろしくお願いします。
また、このような作業で参考になるサイト,URL等ありましたら教えていただけると幸いです。
よろしくお願いします。

A 回答 (2件)

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

この回答への補足

回答ありがとうございます。

仰るとおりで
http://www.osakac.ac.jp/labs/matsuura/japanese/p …
の始めに書いてある通り
「ファイル->ユニットヘッダーファイルの追加」を行っています。
Uni1.cppにも#include "Unit2.h"と表示されています。

それでも、エラーが表示されてしまうんです。
どうしてなんでしょう?

補足日時:2008/02/04 01:00
    • good
    • 0

参考にしたサイトのソースをそのまま流用しているという前提ですが、それだと、そもそもAnalysis Cが定義されてませんね。

不備のあるソースですよそれ。

とりあえず、Unit2.cppの末尾にでも

  Analysis C;

の一行を加えてみてください。

これでダメならあなたのお書きになったソースを全部提示してもらわないと判断がつきません。

といいますか、質問の際は最初からソースを提示してください。
文字制限に引っかかるときは、問題が発生する最小限のソースを抽出して。
回答者が他所のサイトをわざわざ開かなくても回答できるように。

この回答への補足

【 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);
}
//------------------------------------------------------------

補足日時:2008/02/04 05:54
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

補足要求あればソースを開示しようと思っていたのですが
テストで適当に作っただけの短いプログラムですので
始めから開示しておけばよかったですね。申し訳ないです。

ソースを補足させていただきました。
Unit2.hの末尾に
extern PACKAGE Analysis C;
とあるのですが出来ませんでした…と思っていたのですが

回答ではUnit2.cppの末尾にAnalysis C;を追記であることに
今気づいて、試してみると成功しました。
回答ありがとうございました。

お礼日時:2008/02/04 06:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!