初めまして。まだまだ素人でどうしても解決できないのでご教授よろしくお願いいたします。
1つのヘッダファイルを2つのダイアログ(cppファイル)でincludeし、データの受け渡し静的関数を利用して行おうと思っているのですがうまくいきません。
以下のようなエラーが出ます。(Prkana::Tflg,Addrec_dlgは私が作成しました変数とダイアログです。)
error LNK2005: "public: static int Prkana::Tflg" (?Tflg@Prkana@@2HA) はすでに Addrec_dlg.obj で定義されています
externや#if !definedなどを試してみたのですがどれも失敗でした。(試し方が悪いのかもしれませんが・・・。)
開発環境は、XP VC++6.0です。
ヘッダは重複定義できないようにされていますか?
されていなければ、
ヘッダの先頭に
#ifndef _INC_PRKANA
#define _INC_PRKANA
ヘッダの最後に
#endif
を追加してみたらいかがでしょうか?
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 ファイルで行うべし。
DD.さんありがとうございます。
重複定義をしないようにするには下記の方法でいいんでしょうか?(Kana.hが共通のヘッダファイルです。)
#if !defined(Kana_h)
#define Kana_h
#include "Kana.h"
#endif
一応、これを2つのcppファイルに書き込んでおりますが、エラーが出てしまいます。
それと、
>#ifndef _INC_PRKANA
>#define _INC_PRKANA
>ヘッダの最後に
>#endif
は、ヘッダファイル中に書き込めばいいのですよね?
書き込んでみましたがうまくいきません。。。
tetrapodさんありがとうございます。
tetrapodさんの仰るとおりヘッダファイル中でstaticメンバを登録しております。すぐに書き直そうと思いましたが、hppファイルはどこで作成すればよろしいのでしょうか?
すみません!上記の書き込みは私です。
> hppファイルはどこで作成すればよろしいのでしょうか?
hppファイルとはヘッダ(Kana.h)のこと。
ヘッダ(Kana.h)にある static メンバの定義をコード(Kana.cpp)に移すべし。
解決しました。
皆さんありがとうございました。
>error LNK2005: "public: static int Prkana::Tflg" (?Tflg@Prkana@@2HA) >はすでに Addrec_dlg.obj で定義されています
static に注目してなかったorz
まだまだダメっぽぃ。
ツイート | ![]() |