2012-07-21 247 views
0

plz帮助我这个错误和...(Visual Studio 2010中)错误C3892:“的std :: _ Tree_unchecked_const_iterator

void file_remove(u32 id, int action) { 
    file f; 
    f.id = id; 

    **file_set::iterator i = fs.find(f);** 

    if(i == fs.end()) return; 

    // move cursor away 
    if(conf.expose.cursor == id) cursor_down(); 
    if(conf.expose.cursor == id) cursor_up(); 
    if(conf.expose.cursor == id) conf.expose.cursor = 0; 


    if(action != 1 && i->size >= conf.files.incomp_min_size && 
     (u64)segment_summ(i->seg) * 100/i->size >= conf.files.incomp_percent) 
    { action = 2;  } 

    char n1[0x100]; 
    char n2[0x100]; 


    if(!i->deleted){ 
     cache_close(i->h); 

     snprintf(n1, sizeof(n1), "%s/%s", conf.fnames.dir_temp, i->name.c_str()); 

     if(action == 0) 
     { // just close 
     } 
     else if(action == 1) 
     { 
      snprintf(n2, sizeof(n2), "%s/%s", conf.fnames.dir_ok, i->name.c_str());   seg(*i, conf.fnames.dir_temp, false); 
     cache_move(n1, n2); 
     } 
     else if(action == 2) 
     { 
      snprintf(n2, sizeof(n2), "%s/%s", conf.fnames.dir_incomplete, i->name.c_str()); 
     seg(*i, conf.fnames.dir_incomplete, true, true); 
     seg(*i, conf.fnames.dir_temp, false); 
     cache_move(n1, n2); 
     } 
     else if(action == -1) 
     { 
      seg(*i, conf.fnames.dir_temp, false); 
     cache_move(n1, ""); // unlink 
     } 
    } else { 
     ffs_remove(i->size, i->tag); 
     fs.erase(i); 
     sort_files(); 
     return; 
    } 

    if(!i->tmp){ 
     ffs_remove(i->size, i->tag); 
     fs.erase(i); 
    } else { 
     **i->deleted = true;** 
    } 
    sort_files(); 
} 

与此元素编译和错误:I->删除= TRUE; +查看此结果

1> main.cpp中(478):错误C3892: '的std :: _ Tree_unchecked_const_iterator < _Mytree,_base> ::操作员 - >': 你不能分配给一个变量是常量1> 1>
[1>
_Mytree =标准:: _ Tree_val,性病::分配器,假>>, 1> _base =标准:: _ Iterator_base 1>]

http://up.vbiran.ir/images/w21nnbxc7tf5okzk0lr.png

http://up.vbiran.ir/images/x0coajrixr764g49ibeh.png

plz帮助我解决这个错误

+2

你好,你的发布是完全不可读的。请编辑您的问题,删除整个区块,然后简单地粘贴您的代码,突出显示它,然后单击“{}”按钮。 – Mat 2012-07-21 10:23:51

+0

获得帮助的最佳方式是发布一个我们可以复制/粘贴/编译以重现错误的最小工作示例。请参阅http://sscce.org – 2012-07-21 10:39:50

回答

1

是,在这条线,这是问题

i->deleted = true; 

std::set所有元素都是常量(因为更改值可能无效集合的顺序)。