Wie zu initialisieren static const set<string> in der Implementierungsdatei?
Meine Initialisierung eines static const set<string>
scheint falsch zu sein, würde ich schätzen, Ihre Richtlinien auf dieser:
obj.h
:
class obj
{
...
private:
static const set<string> keywords;
...
}
obj.cpp
:
const string kw[] = {"GTR","LTR","LEQ","GEQ","NEQ","SQRT","sqrt"};
const set<string> obj::keywords = (kw,kw + sizeof(kw)/sizeof(kw[0]));
Aber dies ergibt den Fehler:
error: conversion from ‘const string* {aka const std::basic_string<char>*}’ to non-scalar type ‘const std::set<std::basic_string<char> >’ requested
Kann jemand mir sagen, die richtige Art und Weise zu initialisieren, dieser Satz?
InformationsquelleAutor Prem | 2013-05-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nehmen Sie die
=
. Nur den Konstruktur aufrufen.InformationsquelleAutor paddy
Frage ich mich, warum Sie verwenden ein array initialisieren
std::set
.Könnte man direkt initialisieren:
Das ist, was Sie tun sollten, wenn Sie mit einem compiler unterstützt C++11.
Als für das, was ist falsch mit Ihren code, wie die anderen beiden Antworten sagt, entfernen
=
:Hoffe, das hilft.
InformationsquelleAutor Nawaz
Müssen Sie entfernen Sie das Gleichheitszeichen:
Was passiert, ist der gefürchtete Komma-operator. Erstens, es wertet
kw
und wegwirft das Ergebnis. Nächste, es wertetkw + sizeof(kw)/sizeof(kw[0])
und versucht, zu kopieren und zu initialisierenkeywords
.InformationsquelleAutor chris
Ich Frage mich, warum niemand vorgeschlagen
boost::assign
aus<boost/assign/list_of.hpp>
Diese Weise ist weniger Tipparbeit, sondern hat komische syntax, denn jedes Element ist zwischen Klammern und es steht kein Komma.
Wenn Sie mit C++11 ist es besser, die Art und Weise Nawaz vorgeschlagen, seine Antwort. Meine Antwort gerade gezeigt, eine andere mögliche Methode ist, und (meiner Meinung nach) bessere option für die alte Norm.
InformationsquelleAutor ST3