Не lvalue в ошибке присваивания

0

Я получил эту ошибку, когда использовал names для печати строк, но никаких ошибок при использовании tempNames не было.

char* names[] = { "JIM",
                  "RAM",
                  "SAM",
                  0  };
int main(int argc, char *argv[])    
{
    char** tempNames = names ;        
    while(*names != 0)
        std::cout << *names++ << std::endl ; 
    return 0;
}

Как получилось *names стали rvalue, тогда как *tempNames является lvalue.

  • 1
    *names - это lvalue. Но вы не можете делать names++ . Вот где проблема.
  • 0
    Что заставляет вас думать, что *names - это ценность? Можете ли вы опубликовать код для поддержки этого утверждения?
Теги:
pointers
rvalue
lvalue

1 ответ

0

Как объясняет Билл Линч в комментариях, вы увеличиваете тип char* [] который не разрешен. (Это проще, если вы думаете об этом как тип int [].) Когда вы назначаете char** вы можете увеличить его.

Или лучшее C++ решение на основе итератора C++ 11:

char* names[] = { "JIM",
                  "RAM",
                  "SAM" };


int main(int argc, char *argv[])
{

    char** tempNames = names ;

    for(auto i = std::begin(names); i != std::end(names); ++i){
        std::cout << *i << std::endl;
    } 

    return 0;
}
  • 1
    Если вы собираетесь дать современный вариант C ++, по крайней мере, изо всех сил : gist.github.com/sharth/10f767045f2fe335f95c
  • 0
    @BillLynch Я согласен, что он должен использовать std::string но я не хотел, чтобы было неясно, что он может делать это с char* или чем-то еще.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню