C++ 如何在c++;

C++ 如何在c++;,c++,arrays,stl,heap,heapsort,C++,Arrays,Stl,Heap,Heapsort,我必须将文件中的所有数据(整数)读取到数组中,然后迭代数组以生成最小堆,并将它们添加到当前堆的最后一个元素之后。读入数组后,我必须调用SiftUp()。在所有输入的末尾,我试图打印出最小堆数组的前五个元素。输出给我以下错误 发生错误: [Error] invalid conversion from 'int' to 'int*' [-fpermissive] 我的节目: using namespace std; int heapSize; void SiftUp(int arr[], int

我必须将文件中的所有数据(整数)读取到数组中,然后迭代数组以生成最小堆,并将它们添加到当前堆的最后一个元素之后。读入数组后,我必须调用
SiftUp()
。在所有输入的末尾,我试图打印出最小堆数组的前五个元素。输出给我以下错误

发生错误:

[Error] invalid conversion from 'int' to 'int*' [-fpermissive]
我的节目:

using namespace std;

int heapSize;
void SiftUp(int arr[], int heapSize);
const int arr_Size=500;
int heapArr[arr_Size];

int main()
{
    int integers;
    string fileName;
    ifstream infile;
    cout << "Please enter the name of the file to open :";
    cin >> fileName; 
    infile.open(fileName.c_str()); 

    if(!infile)
    {
        cerr << "An eror occurred while openieng the file.";
        exit(1);
    }

    while(!infile.eof())
    {
        for (int i=0; i<arr_Size; i++)
        {
            infile >> integers;
            heapArr[i]=integers;
            heapSize=i;
            cout << "numbers " << heapArr[i] << endl;
            SiftUp(heapArr[i],heapSize);       // Error: invalid conversion
        }
    }

    infile.close();
    return 0;
}

void SiftUp(int arr[], int heapSize)
{
    int p;

    if (heapSize==1)
        return;
    else p = heapSize/2;

    if (arr[p] > arr[heapSize])
        return;
    else swap (arr[heapSize],arr[p]);

    SiftUp(arr[], p);   // Error : expected primary-expression before ']'

    for (int count =0 ; count <5 ; count ++)
    {
        cout << " at index 1 : " << arr[count] << endl;
    }
}
使用名称空间std;
智力治疗;
void SiftUp(int arr[],int heapSize);
const int arr_Size=500;
int heapArr[arr_Size];
int main()
{
整数;
字符串文件名;
河流充填;
cout>文件名;
open(fileName.c_str());
如果(!infle)
{
cerr整数;
heapArr[i]=整数;
heapSize=i;

cout请阅读这篇关于变色龙问题的帖子。现在进入当前问题

void SiftUp(int arr[], int heapSize);
您的函数需要一个数组,然后是一个int

SiftUp(heapArr[i],heapSize);
向函数传递一个int和一个int。编译器拒绝将int重新解释为int*(因为这样做会是一个糟糕的主意)。尝试向函数传递数组和int

SiftUp(heapArr,heapSize);

这里是C++数组的引用。 对于(i=1;i>integer; 如果(infle.fail())中断; heapArr[i]=整数; SiftUp(i); } infle.close(); heapSize=i;


对于(int count=1;count 99%确定您的程序正在崩溃。尝试使用调试器找出原因。
Id
是什么?如果是您的程序,当它找不到您请求的文件时,将返回1。您确定该文件存在吗?如果不是问题,您在哪里看到此错误?我如何复制它?@doctorlove My crystal ball说这是问题实际上,
ld
,链接器。这意味着程序甚至不编译。或者编译,但不链接。
void SiftUp(int,int);
定义在哪里(以及如何定义)
如何构建它?对标题的巧妙回答:使用
std::priority\u队列
(和/或其组件
std::push_heap
std::pop_heap
std::make_heap
)使用两个循环读取文件没有任何意义。一个循环就可以了。请参阅我的代码。这会有所帮助。此外,不需要将全局声明的数组传递到函数中。您可以直接使用它们。请参阅我的代码。我已更改了变量的名称。您至少应该自己工作,就像我认为的那样。请尝试更有效地编写代码这是一个很好的方法,试着学习如何自己调试程序。它会起作用的。
int i;
for (i=1; i<arr_Size; i++){
    infile >> integer;
    if(infile.fail())break;
    heapArr[i]=integer;
    SiftUp(i);
}
infile.close();
heapSize=i;
for (int count =1 ; count <=5 ; count ++){
    cout << count  <<" :"<< heapArr[count] << endl;
}

return 0;
}

void SiftUp(int heapSize){
    int p;
    if (heapSize==1) return;
    p = heapSize/2;
    if (heapArr[p] < heapArr[heapSize]) return;
    swap (heapArr[heapSize],heapArr[p]);
    SiftUp(p);
    }