Ich habe den folgenden Code, in dem Boost.Local einen Funktionsrückruf verwendet, um eine Mo-Datei zu laden. Die Funktion heißt findMo für mich, und ich versuche, sie an ein Objekt zu binden, damit ich die Nebenwirkungen behalten kann, die ich privaten Mitgliedern von moFinder gebe.Boost.Bind nicht statische Mitglied
class moFinder
{
public:
moFinder(string const& wantedFormat)
: format(wantedFormat)
{
// ...
}
std::vector<char> findMo(std::string const& filePath, std::string const& encoding)
{
// ...
}
};
std::locale createLocale(string const& name, string const& customTranslation,
string const& path, string const& domain, string const& pathFormat)
{
// ...
namespace blg = boost::locale::gnu_gettext;
blg::messages_info info;
info.paths.push_back(path);
info.domains.push_back(blg::messages_info::domain(domain));
moFinder finder(pathFormat);
blg::messages_info::callback_type callbackFunc;
callbackFunc = boost::bind(moFinder::findMo, boost::ref(finder));
info.callback = callbackFunc;
// ...
}
Beim Kompilieren bekomme ich folgende Fehlermeldung:
error: invalid use of non-static member function ‘std::vector moFinder::findMo(const std::string&, const std::string&)’
an der Linie, wo ich boost :: bind nennen.
Was mache ich, um diesen Fehler zu verdienen?
Versuchen Sie, Ihre Probleme auf kleinere Proben zu reduzieren. Nichts hat hier etwas mit 'boost.locale' zu tun. Es ist rein 'bind'. Dies macht die Diagnose viel einfacher. – pmr
tue ich normalerweise, aber ich war ehrlich gesagt nicht sicher, ob es mit Boost zu tun hatte. Lokale Verrücktheit oder nicht. – Jookia