私は名前空間とそのメンバーをグローバルに利用できるようにしようとしていますが、私はalready defined
エラーに遭遇しています。C++グローバル名前空間のメンバーは既にエラーを定義しています
Settings.h
#pragma once
#include "boost/property_tree/json_parser.hpp"
#include <string>
using json = boost::property_tree::ptree;
namespace Settings {
extern std::string settingsPath;
extern json settings;
extern void init();
extern void readSettings();
extern void writeSettings();
};
Settings.cpp
#pragma once
#include "Settings.h"
using json = boost::property_tree::ptree;
namespace Settings {
void init() {
}
void readSettings() {
}
void writeSettings() {
}
};
私は前方Settings
名前空間とメンバーを宣言し、extern
を使用しています。私は何が間違っているのか分かりません。誰かがここでエラーを指摘できますか?
おかげ
編集:実際のエラーメッセージ:
Error LNK2005 "class std::basic_string<char,struct std::char_traits<char>,class
std::allocator<char> > Settings::settingsPath" ([email protected]@@3V?$
[email protected][email protected]@[email protected]@[email protected]@[email protected]@[email protected]@A) already defined in
AmalgamService.obj Amalgam F:\Dropbox\CPP\Visual Studio Projects\Amalgam\Amalgam\
main.obj 1
と名前空間のすべてのメンバーのために繰り返します。 Settings.h
はあなたが別のファイルでSettings.cpp
を含めているように見える#include
main.cpp
でエドとAmalgamService.cpp
実際のエラーメッセージをコピーして質問に貼り付けてください。そして、関数を宣言する 'extern'は必要ありません。 – molbdnilo
とは無関係です。 cppファイルを '#pragma once 'する必要はありません。あなたがcppファイルをインクルードしているなら、より大きな問題が発生しています。 – user4581301
エラーメッセージを追加しました。また、 '#pragma once'情報に感謝します。私はcppファイルを含んでいないので、ここではほんの小さな問題です – user2513924