お風呂の温度、何℃にしてますか?

今、クライアント・サーバーのプログラムを作っているのですが、クライアントとサーバの間の通信を暗号化しようとしています。
開発環境はVisualStudio2010のMFCを使っています。
サーバとクライアントのプログラムとを同一のプロジェクトにして、サーバとクライアントの起動をオプションで切り分けています。
しかし暗号モジュールは一つのファイルなので、これをp1.cppとしましょう。
サーバのファイルをmain.cpp クライアントをsub.cpp として、main.cppの方で#include "p1.cpp"とやっても、クライアントのソースからは関数が参照できません。
例えば g++ main.cpp sub.cpp として、両方に同じ関数を書くと2重定義になります。
クライアントのsub.cpp にも同じようにインクルードしてやると、再定義されてるとリンクエラーが出ます。どうすれば同じ関数を同一プロジェクト内で共有(他のファイルから参照)させることができますでしょうか?
解決法をよろしくお願いします。

A 回答 (1件)

普通は 関数のプロトタイプ宣言を集めたヘッダーファイルと その実装をするCPPファイルに分けて


関数を使う側ではヘッダーファイルのみをインクリュードします

暗号化関数が void angou(char* p1, char*p2) という格好ならば

--- p1.h
void angou(char* p1, char *p2);
としてきます

p1.cppもプロジェクトに参加させておきます

main.cppやsub.cpp、p1.cppの冒頭で
#include "p1.h"
として コンパイルします

これで
main.obj sub.obj p1.obj がコンパイル結果として得られます
この中で 関数angouの実態があるのは p1.objのみであり 重複リンクはされません
    • good
    • 0
この回答へのお礼

ありがとうございました。こんなに簡単にできるなんて・・・
今ちょっと大きなプログラム書いているので、基礎知識が無いです。自分で解決できるように勉強します。

お礼日時:2011/12/31 05:02

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


おすすめ情報