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_info第三行应该是一个编译器错误,告诉你语法错误。从那时起,无论编译器试图解释什么,都不会让它相信这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 回答