编译器错误:从"int"到"int*"的转换无效 [-fallowive]|
Compiler error: invalid conversion from 'int' to 'int*' [-fpermissive]|
我得到了一个编译器错误:
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];
原因是vector
是int*
,而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
。
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 多维数组 C++ 中数组下标的类型"int[int]"无效
- 从 'int' 到 'int*' CPP 的转换无效
- 无效 f(int) 的模板和 decltype
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- 错误:数组下标的类型"int[int]"无效
- int* 和 int[] 类型对二进制运算符 + 的操作数无效
- 从类指针到 int 的转换无效
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- 为什么 std::d eclval<int>() = std::d eclval<int>() 无效?
- 错误:数组下标的类型"const bool[int]"无效
- 2D数组中数组下标的类型"int[int]"无效
- 错误:数组下标的类型'int[int]'无效
- C++中的合并排序:无法在合并函数中传递数组 - 转换为'int*'无效
- 数组下标的类型"int[int]"无效
- 使用矢量的数组下标'int[int]'无效类型
- C++中的二进制补码 - 数组下标的类型"int[int]"无效
- 从“char*”到“char”[-fpermissive]的转换无效,数组下标的类型“char[int]”无效
- 无法解决错误:间接寻址需要指针操作数("int"无效)
- C++将数组相互分配;type int*=type int有效,但int=int*无效