[Error] invalid conversion from 'int*' to 'int' [-fpermissive] 问题

这个报错的中文意思是:非常量引用的初始值必须为左值
最常见的原因有两种:

声明了一个针对常量的引用,例如

#include 
using namespace std;

int main()
{
    int& i = 10;//这种通常在vs里报错为:非常量引用的初始值必须为左值
    /*在Linux便是invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’*/
    return 0;
}

解决办法

#include 
using namespace std;

int main()
{
    int x = 10;
    int& i = x;

    return 0;
}

在参数为非常量引用类型的函数中传入常量类型,例如

#include 
using namespace std;

void fun(int& i)
{
    cout << i;
}

int main()
{
    fun(1);//这种通常在vs里报错为:非常量引用的初始值必须为左值
    /*在Linux便是invalid initialization of non-const reference of type ‘int&’ from an rvalue of type ‘int’*/
    return 0;
}

又如

#include 
#include 
using namespace std;

void fun(string& i)
{
    cout << i;
}

int main()
{
    fun("str");//这种通常在vs里报错为:非常量引用的初始值必须为左值
    /*在Linux便是invalid initialization of non-const reference of type ‘string&’ from an rvalue of type ‘string’*/
    return 0;
}

解决办法均为在参数前面加个const关键字

#include 
#include 
using namespace std;

void fun(const int& i)
{
    cout << i;
}

int main()
{
    fun(1);

    return 0;
}

#include 
#include 
using namespace std;

void fun(const string& i)
{
    cout << i;
}

int main()
{
    fun("str");

    return 0;
}

所以,写代码养成随手加const是个好习惯,扼杀bug于编译的摇篮中。

你可能感兴趣的:([Error] invalid conversion from 'int*' to 'int' [-fpermissive] 问题)