LNK2005を解決するには

解決


2ヵ月半  2005-11-09 20:11:44  No: 59515

初めまして。まだまだ素人でどうしても解決できないのでご教授よろしくお願いいたします。

1つのヘッダファイルを2つのダイアログ(cppファイル)でincludeし、データの受け渡し静的関数を利用して行おうと思っているのですがうまくいきません。
以下のようなエラーが出ます。(Prkana::Tflg,Addrec_dlgは私が作成しました変数とダイアログです。)

error LNK2005: "public: static int Prkana::Tflg" (?Tflg@Prkana@@2HA) はすでに Addrec_dlg.obj で定義されています

externや#if !definedなどを試してみたのですがどれも失敗でした。(試し方が悪いのかもしれませんが・・・。)


2ヵ月半  2005-11-09 20:13:45  No: 59516

開発環境は、XP VC++6.0です。


DD.  2005-11-09 20:44:19  No: 59517

ヘッダは重複定義できないようにされていますか?

されていなければ、
ヘッダの先頭に

#ifndef _INC_PRKANA
#define _INC_PRKANA

ヘッダの最後に

#endif

を追加してみたらいかがでしょうか?


tetrapod  2005-11-09 22:10:31  No: 59518

static メンバをヘッダで定義してるのかも。
--hoge.hpp--
struct hoge_t {
  static int flag;
};
int hoge_t::flag; // これはヘッダにあってはならない
--hoge.cpp--
#include "hoge.hpp"
--piyo.cpp--
#include "hoge.hpp"

static メンバの「定義」はどれか1つの cpp ファイルで行うべし。


2ヵ月半  2005-11-09 22:12:52  No: 59519

DD.さんありがとうございます。

重複定義をしないようにするには下記の方法でいいんでしょうか?(Kana.hが共通のヘッダファイルです。)

#if !defined(Kana_h)
#define Kana_h 
#include "Kana.h"
#endif

一応、これを2つのcppファイルに書き込んでおりますが、エラーが出てしまいます。
それと、

>#ifndef _INC_PRKANA
>#define _INC_PRKANA

>ヘッダの最後に

>#endif

は、ヘッダファイル中に書き込めばいいのですよね?
書き込んでみましたがうまくいきません。。。


  2005-11-09 22:16:52  No: 59520

tetrapodさんありがとうございます。

tetrapodさんの仰るとおりヘッダファイル中でstaticメンバを登録しております。すぐに書き直そうと思いましたが、hppファイルはどこで作成すればよろしいのでしょうか?


2ヵ月半  2005-11-09 22:17:33  No: 59521

すみません!上記の書き込みは私です。


επιστημη  2005-11-09 22:26:39  No: 59522

> hppファイルはどこで作成すればよろしいのでしょうか?

hppファイルとはヘッダ(Kana.h)のこと。
ヘッダ(Kana.h)にある static メンバの定義をコード(Kana.cpp)に移すべし。


2ヵ月半  2005-11-09 22:39:45  No: 59523

解決しました。
皆さんありがとうございました。


DD.  2005-11-10 00:45:40  No: 59524

>error LNK2005: "public: static int Prkana::Tflg" (?Tflg@Prkana@@2HA) >はすでに Addrec_dlg.obj で定義されています
static に注目してなかったorz

まだまだダメっぽぃ。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加