从'const int *'到'int'的无效转换

时间:2014-01-12 19:32:14

标签: c++

这是C ++

[错误]从'const int *'无效转换为'int'[-fpermissive]

void boite(int ligne,int colonne,int i,int s[],int k)
{
     int n;
     n= s_boite[i][ligne][colonne];  // i numero de la boite 
    for(;n!=0;n/=2)
        s[k--]=n%2;
}

更多补充:s_boit

static const int s_boite[8][4][16] = { { {14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}, { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8}, { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0}, {15, 12, 8, 2, 4, 9, 1, 7, 5, ...ext

对此功能的调用:

for(i=0;i<8;i++) // appeller les boittes 
 {
        ligne = resultat[i][0]*2 + resultat[i][5]; // le 1er et le dernier bit converit a au decimal 
        for(j=0;j<4;j++) // 4 bits du milieu 
        {colonne += resultat[i][j+1]*puiss(2,(3-j));}//acumulation en calculant la colone (traduction en decimal)
         boite(ligne,colonne,i,mat,(4*(i+1)-1)); //mat pour sauvgarder le resultat 
}

2 个答案:

答案 0 :(得分:2)

这是在没有任何警告的情况下编译的代码(稍加修改)。请检查,实际根本原因在哪里:

#include <iostream>

static const int s_boite[1][1][16] = { { {14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7}}};

void boite(int ligne,int colonne,int i,int s[],int k)
{
     int n;
     n= s_boite[i][ligne][colonne];  // i numero de la boite
    for(;n!=0;n/=2)
        s[k--]=n%2;
}

int main() {
        int a[2] = {-1, -1};
        boite(0,3,0,a,0);
        std::cout << "a[0] = " << a[0] << std::endl; // =1
        return 0;
}

答案 1 :(得分:1)

我稍微编辑了你的源代码,并使用带有-Wextra和-Wall标志的g ++进行编译。编译给我,得到一个警告,因为我采取了第三个维度。不应该是相关的。

static const int s_boite[8][16] =
{
{14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7},
{ 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8},
{ 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0},
};

void boite(int ligne,int colonne,int i,int s[],int k)
{
     int n;
     n= s_boite[i][ligne];  // i numero de la boite 
    for(;n!=0;n/=2)
        s[k--]=n%2;
}

int main(void)
{
        int ess[32];
        boite(1, 0, 1, ess, 16);
        return 0;
}