dポイントプレゼントキャンペーン実施中!

行列の計算をする関数をいくつか作り、
それをまとめたファイルmatrix.cを作りました。
自作関数の、M_ADD, M_SUBなどが含まれています。

mainのファイルでmatrix.cをインクルードして、
ビルドしようとしたところ、コンパイルはうまくいくのですが、
リンク時にエラーが起こってしまいました。

具体的には、以下のような感じです。

Linking...
matrix.obj : error LNK2005: _M_ADD already defined in main.obj
matrix.obj : error LNK2005: _M_SUB already defined in main.obj
Debug/計算.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.



already defined と怒られていますが、
ほかの場所でそんな名前の関数を作った覚えはありません。
関数名をいろいろ変えてみてもだめでした。
ウェブサイトを調べてみても、見当たりませんでした。
これはどういうことなのでしょうか?
どうすれば解消できるのでしょうか?
どなたかわかるかた、教えていただけませんか?
よろしくお願いします。
ちなみに、Visual C++ 6.0を使用しています。

A 回答 (2件)

matrix.cではなく、


matrix.hがあるならそれを#include するか
include せず、mainの上の方で
プロトタイプ宣言してください

void _M_ADD( ... );
って感じで。
あるいは matrix.cの関数の先頭にinlineってつけても回避できるかも。

そのエラーは関数の実態がある
matrix.cを2回以上includeしようとしているから
おきるのだと思われます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
アドバイスの通りにやってみたら、
うまく動きました!

matrix.cとしてやるときには
2回インクルードすることになってしまうのですね。
納得できました。

お礼日時:2004/10/26 23:05

関数の実体を


matrix.c
として、
プロトタイプ宣言部分を
matrix.h
として、
#include "matrix.h"
としてやってみてください。

エラーメッセージは、mainのなかに既に、
関数定義がされているということだと思います。
matrix.objの中で関数が定義されているとき
mainの中で関数定義は(をインクルードする)必要ありません。
    • good
    • 1
この回答へのお礼

お返事ありがとうございます。
おかげさまで、解決させることが出来ました。

本来なら、お二方どちらにも20ポイント
差し上げたいのですが、システム上不可能なため、
先に回答いただいた方に20ポイントとさせていただきます。
ご了承ください。

お礼日時:2004/10/26 23:07

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