在 C++ 中使用布尔值时出错

error on using Boolean in c++

本文关键字:布尔值 出错 C++      更新时间:2023-10-16

给定一个开始时间和结束时间的数组,根据结束时间对它们进行排序。

这是我的函数描述的样子

 // sort() - sorts an array of floats returning sorted indices 
 // On return, indx[] is an array of indices such that data[indx[0]], 
 // data[indx[1]], ..., data[indx[len-1]] is data[] in ascending order. 
 // Parameters 
 //    data[] - float array of data to be ordered 
 //    indx[] - int array, same length as data[], to hold indices
 //    len - int specifying the length of data[] and indx[]

这是代码

#include<iostream>
#include<string>
#include sched.h
    void sort(float data[], int indx[], int len);
    int main() {
        int indx[NUM_EVENTS];
        int scheduledEvents[NUM_EVENTS];
        int numSched;
        // Sort by event ending times
        sort(endTime, indx, NUM_EVENTS);
        // Call greedy scheduling algorithm
        numSched = sched(startTime, endTime, indx, scheduledEvents, NUM_EVENTS);
        // Display scheduled events
        for (int i = 0; i < numSched; i++)
            printEvent(startTime[scheduledEvents[i]], endTime[scheduledEvents[i]],
            description[scheduledEvents[i]]);
        return 0;
    }

我的排序算法诱导 for 循环来检查输出 看来

    void sort(float data[], int indx[], int len){
        for (int i = 0; i < 10; i++){
            indx[i];
        }
        float smallestIndex;
        bool flag = 1;
        while (flag == 1){
            flag == 2;
            for (int i = 0; i < len-1; i++){
                if (data[indx[i]] > data[indx[i + 1]]){
                    smallestIndex = indx[i + 1];
                    indx[i + 1] = indx[i];`
                    indx[i] = smallestIndex;
                    flag == 1;
                }
            }
        }
        for (int i = 0; i < 10;i++){
            cout << data[indx[i]] << endl;
        } 

做我得到一个看起来像的错误

>警告 C4806:"==":不安全的操作:没有"bool"类型的值 提升为类型"int"可以等于给定的常量 1>sched.obj : 错误 LNK2019: 未解析的外部符号"void __cdecl printEvent(float,float,class std::basic_string,class std::分配器>)" (?printEvent@@YAXMMV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) 在函数_main中引用

bool 是一种通常接受 true 和 false 的类型。在内部,它作为整数处理。这就是为什么您可以为其分配数值的原因。但是,如果要执行此操作,请使用 int。

另请注意,您的线路包含:

flag == 2;

没有效果。您将标志与 2 进行比较,这种比较的结果(真或假)只是悬而未决。这不是错误,但整个表达式不执行任何操作。

变量flag只保存两个值中的一个,所以这将起作用,保留你的其他逻辑(可能不是最有效的),"原样"。

bool flag = true;
while (flag == true){
    flag = false; // Tentative "stop"
    for (int i = 0; i < len-1; i++){
        if (data[indx[i]] > data[indx[i + 1]]){
            smallestIndex = indx[i + 1];
            indx[i + 1] = indx[i];`
            indx[i] = smallestIndex;
            flag = true;  // Keep going.
            }
        }
    }
布尔值

只能是真或假,它是二进制的。如果您不想使用 bool,您可以将 1 或 0 分配给 int 以获得与使用布尔值相同的结果。

此外,您使用 == 来检查等价性。单个 = 用于分配一个看起来你想做的数字,

flag == 2;

它应该被声明和 int(或类似的东西)

int flag = 0;
flag = 2