0

ベクトル内のベクトルを処理する次のコードがあります。Eclipse を使用しているときに、非常に奇妙なコンパイル エラーが発生します。

column_info ベクター内の既存のエントリの内容を、新しい table_info ベクター内の新しい column_info ベクターにコピーしようとしています。

  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
    }
   }

私は何かを見逃していますか?この同じコードの他の部分 (異なる関数) で push_back 操作を実行しているため、この特定の関数を除いて、このエラーは発生しません。助けてください。

4

2 に答える 2

4

それは最初のコンパイルエラーですか?

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

最初の行では、外部コンテキストでtable_info型を非表示にするローカル変数を作成しています。table_info3 行目は、構文が間違っていることを示すコンパイラ エラーです。new_tableそれ以降、コンパイラが解釈しようとしたものは何でも、それが type のオブジェクトであると信じるようにはなりませんtable_info

于 2012-04-12T03:09:49.650 に答える
2

という名前の変数を宣言しましたが、 というtable_info名前の型がありtable_info、コンパイラを混乱させています。これをg ++で実行すると、次の行で不平を言い始めました

table_info new_table;

その時点table_infoでは変数名であり、型名ではなくなっているためです。

于 2012-04-12T03:09:44.560 に答える