赋值错误中的非左值

时间:2014-11-30 04:36:08

标签: c++ pointers lvalue rvalue

当我使用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如何成为右值,而*tempNames是左值。

1 个答案:

答案 0 :(得分:0)

正如Bill Lynch在评论中解释的那样,您需要递增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;
}