お世話になります
visual studio 2010 でDLL を作成しているのですがstd::unordered_map のコンストラク
タが上手に扱えず
error C2107: ポインターでない式に、添字が使われました。
このエラーがでます、使い方を教えて頂けないでしょうか。
// Avdll.h
#include <string>
#include <unordered_map>
namespace AVDLL {
typedef std::unordered_map<std::string, std::string> HashHollyday;
class Avdll {
static __declspec(dllexport) int day;
public:
Avdll();
~Avdll();
static __declspec(dllexport) void setHollyday();
};
Avdll::~Avdll() {}
}
// Avdll.cpp
#include AVDLL.h
namespace AVDLL {
int AVDLL::Avdll::day( 0 );
void Avdll::setHollyday()
{
HashHollyday* h_hollyday = new HashHollyday;
h_hollyday[0101] = 元旦;
h_hollyday[0211] = 建国記念の日;
h_hollyday[0429] = 昭和の日;
h_hollyday[0503] = 憲法記念日;
h_hollyday[0504] = みどりの日;
h_hollyday[0505] = 子供の日;
h_hollyday[1103] = 文化の日;
h_hollyday[1123] = 勤労感謝の日;
h_hollyday[1223] = 天皇誕生日;
}
}
(*h_hollyday)[...]=...; でうまく動くと思う。
C++ はエラーメッセージが読みにくい点で減点1だね・・・
本題以外に死ぬほど突っ込み点があるんだけど、まあとりあえず放置しておくね
tetrapod さんありがとうございました。
今回はよく考えたら、
typedef std::unordered_map<std::string, std::string> HashHollyday;
namespace AVDLL に含める必要がなく、namespace AVDLL 外で宣言したら、すっきりでき
ました。
休日は、英語なら holiday だとか (俺の知らないテキトーな言語なら話は別)
(holly はヒイラギ : ただし Hollywood とはtoyonの森の意)
new してほったらかし、即メモリリークしてるとか
本当に static でいいのか?とか
この辺は余談ね