2016-05-26 11 views
0

Neu bei C++, so ich werde viele falsche Syntax zu schreiben und zu erklären, meine Absicht, auf EnglischC++ Struktur zu definieren, wie Daten angeordnet werden muss und zugegriffen

enum class FEATURE 
{ 
    F1, 
    F2, 
    F3, 
    F4 
}; 

typedef struct feature_config { 
    std::map<FEATURE, std :: vector<int> > f_conf; 
} Config; 


typedef struct my_key{ 

     const Config key_f_config = { 
            .f_conf = { 
             {FEATURE::F1,{20,25,30,35,40,45,50,55}}, 
             {FEATURE::F2,{20,30,40,50,60,70,80,90,120}}, 
             {FEATURE::F3,{0,25,50,75,100}}, 
             {FEATURE::F4,{10,20}} 
            }  
            };  

    vector<int> key_data; 
} KEY; 

Ich will etwas tun, wie

KEY *k = (KEY *)data_from_binary_file; 

vector *f1v = k->key_f_config[FEATURE::f1] 
vector *f2v = k->key_f_config[FEATURE::f2] 
vector *f3v = k->key_f_config[FEATURE::f3] 
vector *f4v = k->key_f_config[FEATURE::f4] 

want to implement something like 

getData(F1=20,F2=30,F3=0,F4=20) 

das wird mir erlauben, die Indizes entsprechend 20,30,0,20 in entsprechenden Vektoren zu bekommen und erlauben Sie mir, zu springen rechten Offset innerhalb key_data Vektor des KEY (vorausgesetzt, ich habe Kenntnis der Größe der einzelnen Feature-Datum und ich kann den Offset berechnen, zu dem ich springen muss)

Irgendwelche Vorschläge?

+0

Was ist der Sinn dieser 'typedef's? – Walter

Antwort

0

Ich sehe nichts falsch mit dem gezeigten Code.

Der Code, den Sie kompiliert mit gcc ohne Probleme zeigte 5.3.1:

$ cat t.C 
#include <map> 
#include <vector> 

enum class FEATURE 
{ 
    F1, 
    F2, 
    F3, 
    F4 
}; 

typedef struct feature_config { 
    std::map<FEATURE, std :: vector<int> > f_conf; 
} Config; 


typedef struct my_key{ 

     const Config key_f_config = { 
            .f_conf = { 
             {FEATURE::F1,{20,25,30,35,40,45,50,55}}, 
             {FEATURE::F2,{20,30,40,50,60,70,80,90,120}}, 
             {FEATURE::F3,{0,25,50,75,100}}, 
             {FEATURE::F4,{10,20}} 
            }  
            };  

    std::vector<int> key_data; 
} KEY; 
$ g++ -c -g -o t.o -std=c++14 t.C 
$ 

Entweder ist das Problem woanders, in einem anderen Teil des Codes Sie nicht zeigen, oder der Compiler nicht unterstützt C++ 14.

+0

Ya, der Fehler war wegen Typo sonst wo in ähnlichen Code, mein Fehler, ich habe die Frage jetzt bearbeitet. –