2012-04-12 12 views
0

Ich habe das folgende Stück Code mit einem Vektor innerhalb eines Vektors. Ich bekomme einen sehr seltsamen Kompilierungsfehler während der Arbeit mit Eclipse.wierd Kompilierzeit Fehler: Methode push_back konnte nicht aufgelöst werden

Ich versuche, den Inhalt eines vorhandenen Eintrags im column_info-Vektor in einen neuen column_info-Vektor in einem neuen table_info-Vektor zu kopieren.

typedef struct _column_info 
{ 
char name[20]; // Column Name 
int type; // 0:INT, 1: CHAR 
int size; 
int offset; // Start Position 
} column_info; 

    typedef struct _table_info 
{ 
char name[20]; // Table Name 
char columns[100]; 
vector<column_info> col; 
char primary_key[20]; 
int recordsize; 
int totalsize; 
int records; 
    } table_info; 

    vector<table_info> v; 

    table_info* get_table_info(const string& tablename) 
    { 
for (int i = 0; i < (int) v.size(); i++) 
{ 
    if (strcmp(v.at(i).name, tablename.c_str()) == 0) 
     return &v.at(i); 
} 
return NULL; 
    } 

    void select_table_nested(char* tablename, char* select_column[], int column_cnt[],  int nested_cnt, int select_column_count) 
    { 
    table_info* table_info; 
    table_info = get_table_info(tablename); 
    table_info new_table; 
    column_info cols; 

    for(int k =0; k < table_info->col.size(); k++) 
    { 
    strcpy(cols.name, table_info->col.at(k).name); 
    cols.type = table_info->col.at(k).type; 
    cols.size = table_info->col.at(k).size; 
    cols.offset = table_info->col.at(k).offset; 
    new_table.col.push_back(cols); ---> field 'col' could not be resolved 
            ---> Method 'push_back' could not be resolved 
    } 
    } 

Verpasse ich etwas? Weil ich eine push_back-Operation in anderen Teilen desselben Codes (in verschiedenen Funktionen) ausführe und diesen Fehler nicht erhalte, außer in dieser speziellen Funktion. Bitte helfen Sie.

+0

Sie sollten an Ihrem Einzug arbeiten, und im Allgemeinen den Code ein wenig mehr C++ und weniger C. Zum Beispiel die 'typedef's sind nicht erforderlich in C++ (im Allgemeinen), und wenn Sie in der globalen sind Namespace, '_table_info' und' _column_info' sind reservierte Bezeichner für die Implementierung (Compiler + Bibliothek). Die Verwendung von 'char' Arrays sollte wahrscheinlich durch' std :: string' ersetzt werden ... –

Antwort

4

Ist das der erste Compilerfehler?

table_info* table_info; 
    table_info = get_table_info(tablename); 
    table_info new_table; 

In der ersten Zeile Sie eine lokale Variable table_info erstellen, die den Typ table_info im äußeren Rahmen versteckt. Die dritte Zeile sollte ein Compilerfehler sein, der Ihnen sagt, dass die Syntax falsch ist. Von da an gibt es keinen Hinweis darauf, dass der Compiler versucht hat zu interpretieren, dass new_table ein Objekt vom Typ table_info ist.

2

Sie haben eine Variable namens table_info deklariert, und es gibt einen Typ mit dem Namen table_info, und das verwirrt den Compiler. Als ich g ++ lief dies durch, fing es an der Linie klagen

table_info new_table; 

weil an diesem Punkt table_info ein Variablenname, kein Typname mehr.

+0

Vielen Dank für Ihre Antwort. Es war die ähnliche 'table_info', die den Compiler durcheinander brachte. Der Fehler ist verschwunden, als ich den Namen der lokalen Variablen in table_infos geändert habe. – PGOnTheGo

Verwandte Themen