グローバル関数の定義

[戻る]
絶望 2013/04/20(土) 12:09:24
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ファイルでも使用したいので、ヘッダーファイル内にグローバル関数
として置いたのですが、上手くいきません。

このような場合、どうしたらよいでしょうか。

お忙しいとは存じますが、宜しくお願いします。

επιστημη 2013/04/20(土) 12:18:54
A.hファイルに



#pragma once



int a();





A.cppファイルに



#include "stdafx.h"



#include "A.h"



int a()

{

return 10;

}



※ ヘッダに実装を書いてはならない。

絶望 2013/04/20(土) 13:06:06
[[解決]]
ご返答、ありがとうございます。
A.cppファイルを作り、そのなかで
a()の実装を書いたところ、ビルドが通り、
動作も確認しました。

仲澤@失業者 2013/04/22(月) 10:44:10
----a.h----
inline int a()
{
    return 10;
}
のように、インライン関数にしてしまう手もありますね。
関数の実体がexe内に複数存在しても支障の無い場合は使えます。

古いスレッドには追加発言できません。