今日,我在写数据结构作业时,编写的程序中出现了这样一段报错,有点懵的我遍历四方博客终于发现了问题所在
让我们聚焦到出错代码段
inline bool Initial(List &q)
{
q->data=(ll*)malloc(sizeof(ll)*Maxsize);
q->length=Maxsize;
for(rg i=0;i<Maxsize;i++)
{
scanf("%lld",&q->data[i]);
//cout<<q->data[i]<<endl;
}
return ok;
}
很明显这是一个典型的顺序表的初始化,我在主函数中这样调用
Sqlist LA,LB,LC;
if(!Initial(&LA)||!Initial(&LB)||!Initial(&LC))return error;
编译器出现了这样一段报错
error: invalid initialization of non-const reference of type 'Sqlist*&' from an rvalue of type 'Sqlist*'
这就是我们所说的 非常量的引用必须是左值 问题
什么意思呢,具体而言就是我初始化三个顺序表,分别把它们的常地址传入,可是在定义函数处未加const关键字导致编译错误
再举个例子
void fun(string& i)
{
cout << i;
}
int main()
{
fun("hello world!")
return 0;
}
这种情况和我之前出现的错误大同小异,常字符串的引入与函数参数定义的不匹配导致编译错误
C++中, 编译器规定:常量(右值量)不能作为非const引用,解决方案一律是加上const关键字