函数强制转换中作为复合表达式处理的表达式列表[-fpermissive]

expression list treated as compound expression in functional cast [-fpermissive]

本文关键字:表达式 处理 列表 -fpermissive 复合 转换 函数      更新时间:2023-10-16
#include <iostream>
#include <algorithm>
using namespace std;
typedef bool (*compare)(int,int);
void SelectionSort(int *inArray,int size, compare)
{
        for (int loop = 0 ; loop < size ; loop++)
        {
                for(int j = loop+1 ; j < size ; j++)
                {
                        if (compare(inArray[j],inArray[loop]))
                                swap(inArray[loop],inArray[j]);
                }
        }
}
void display(int *inArray,int size)
{
        cout << "Printing the array " << "n" << endl;
        for(int loop = 0; loop < size; loop++)
        {
                cout << inArray[loop] << endl;
        }
}
bool ascending(int a , int b)
{
        if(a < b)
                return true;
        else
                return false;
}
bool descending(int a,int b)
{
        if (a > b)
                return true;
        else
                return false;
}

int main()
{
        compare c1 = ascending;
        compare c2 = descending;
        int pList[5] = {50,40,30,20,10};
        display(pList,5);
        SelectionSort(pList,5,c1);
        display(pList,5);
        SelectionSort(pList,5,c2);
        display(pList,5);
}

$ g++ test.cpptest.cpp:在函数void SelectionSort(int*, int, compare)中:Test.cpp:14:40:错误:函数强制转换中将表达式列表视为复合表达式[-fpermissive]test.cpp:14:40:警告:从不同大小的整数转换为指针[-Wint-to-pointer-cast]

为什么出现错误。我是C专业的。以上我认为在C中是完全有效的。为什么在c++中会发生这种情况?

typedef并不像你想象的那样。在c++中,typedef创建一个类型别名。例如:

typedef int INT;
INT i = 5; //i is of type int
所以你的代码应该是:
void SelectionSort(int *inArray,int size, compare comp)
...
if (comp(inArray[j],inArray[loop]))