编译器错误:从"int"到"int*"的转换无效 [-fallowive]|

Compiler error: invalid conversion from 'int' to 'int*' [-fpermissive]|

本文关键字:int 无效 -fallowive 转换 错误 编译器      更新时间:2023-10-16

我得到了一个编译器错误:

main.cpp | 59 |错误:从"int"到"int*"的转换无效[-fpermission]|

违规线路是

int *pComienzo = vector, *pFinal = vector[nElementos-1];

为什么会出现错误?有人能帮我吗?

以下是我的代码:

#include <iostream>
#include <ctype.h>
using namespace std;
const unsigned short int MAX_VAL = 10;
int LongitudCadena(char*);
int BuscarCaracter(char *cadena, char caracter);
void Ordenar(int *vector, int nElementos, bool ascendente);
int main()
{
    char *cadena = "asdasd";
    cout << LongitudCadena(cadena) << endl;
    cout << BuscarCaracter(cadena, 'a') << endl;
    int iArray[] = {5,4,3,2,1};
    Ordenar(iArray, 5, 1);
    cout << iArray << endl;
    return 0;
}
int LongitudCadena(char *cadena)
{
    char *c = cadena;
    for(int i = 0; i < MAX_VAL; i++)
    {
        if (c[i] == 0) break;
        cadena++;
    }
    return  cadena - c;
}
int BuscarCaracter(char * cadena, char caracter)
{
    char *pCadena = cadena;
    for (int i = 0; i < MAX_VAL; i++)
    {
        pCadena++;
        if (toupper(cadena[i]) == toupper(caracter))
        return pCadena- cadena;
    }
    return -1;
}
void Ordenar(int *vector, int nElementos, bool ascendente)
{

    int *pComienzo = vector, *pFinal = vector[nElementos-1];
    if (ascendente)
    {
        for (int i = 0; i < nElementos; i++)
        {
            for (; pComienzo < pFinal; pComienzo++, pFinal--)
            {
                if (*pComienzo > *pFinal)
                {
                    *pComienzo += *pFinal;
                    *pFinal -= *pComienzo;
                    *pComienzo -= *pFinal;
                }
            }
        }
    }
}

我正在学习。。。

您的错误在这一行:

int *pComienzo = vector, *pFinal = vector[nElementos-1];

原因是vectorint*,而vector[nElementos - 1]是规则的int。因此申报

int *pFinal = vector[nElementos - 1];

正在尝试将vector最后一个索引处的整数值分配给指针pFinal,因此出现编译器错误。

要解决此问题,您可能需要进行

int *pFinal = &vector[nElementos - 1];

使pFinal指向vector或的最后一个元素

int *pFinal = vector + (nElementos - 1);

其使用指针算术来实现相同的事情。

也就是说,既然您使用的是C++,为什么不使用所提供的std::vector类型并避免完全使用指针呢?

希望这能有所帮助!

vector是一个指针,但将其下标为vector[nElementos-1]会将其取消引用为一个int

int *pComienzo = vector, *pFinal = &(vector[nElementos-1]);

数组访问/下标(即a[i],其中a是数组/指针,i是整数)是一个表达式,类型是数组中的内容。

只需使用操作员&的地址将地址存储在指针中:

int *pComienzo = vector, *pFinal = &vector[nElementos-1];

您忘记了&vector[nElementos-1]是值,而pFinal需要一个地址。

*pFinal = &(vector[nElementos-1])*pFinal = vector + nElementos-1