Visual Studio Express 2012を使用している者です。
A.hファイルに
#pragma once
int a()
{
return 10;
}
と書き、CPPファイルに
#include stdafx.h
#include A.h
int _tmain(int argc, _TCHAR* argv[])
{
printf(%d\n,a());
return 0;
}
と書いてビルドしたところ、
error LNK1169:1つ以上の複数回定義されているシンボルが見つかりました。
error LNK2005:int__cdecl a(void)(?a@@YAHXZ)は既にA.objで定義されています。
error LNK2005:int__cdecl a(void)(?a@@YAHXZ)は既にA.objで定義されています。
というエラーが出ました。
関数a()は他のCPPファイルでも使用したいので、ヘッダーファイル内にグローバル関数
として置いたのですが、上手くいきません。
このような場合、どうしたらよいでしょうか。
お忙しいとは存じますが、宜しくお願いします。
A.hファイルに
#pragma once
int a();
A.cppファイルに
#include stdafx.h
#include A.h
int a()
{
return 10;
}
※ ヘッダに実装を書いてはならない。
ご返答、ありがとうございます。
A.cppファイルを作り、そのなかで
a()の実装を書いたところ、ビルドが通り、
動作も確認しました。
----a.h----
inline int a()
{
return 10;
}
のように、インライン関数にしてしまう手もありますね。
関数の実体がexe内に複数存在しても支障の無い場合は使えます。