赋值错误中的非左值

Non lvalue in assignment error

本文关键字:错误 赋值      更新时间:2023-10-16

当我使用 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却变成了右值。

正如比尔·林奇(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;
}