std::unordered_map wo

[戻る]
キー坊 2010/08/07(土) 16:17:44
お世話になります
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"] = "天皇誕生日";
    }
}

tetrapod 2010/08/07(土) 16:45:37
(*h_hollyday)["..."]="..."; でうまく動くと思う。
C++ はエラーメッセージが読みにくい点で減点1だね・・・

本題以外に死ぬほど突っ込み点があるんだけど、まあとりあえず放置しておくね

キー坊 2010/08/14(土) 16:39:48
[[解決]]
tetrapod さんありがとうございました。
今回はよく考えたら、
typedef std::unordered_map<std::string, std::string> HashHollyday;
namespace AVDLL に含める必要がなく、namespace AVDLL 外で宣言したら、すっきりでき
ました。

tetrapod 2010/08/16(月) 10:12:26
休日は、英語なら holiday だとか (俺の知らないテキトーな言語なら話は別)
 (holly はヒイラギ : ただし Hollywood とはtoyonの森の意)
new してほったらかし、即メモリリークしてるとか
本当に static でいいのか?とか

この辺は余談ね

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