编译c代码时出错

Posted

技术标签:

【中文标题】编译c代码时出错【英文标题】:Error in compiling the c code 【发布时间】:2017-04-20 19:13:31 【问题描述】:

以下0/1背包使用分支定界法的代码显示错误:


第 15 行:“项目”无法启动参数声明。 第 15 行:) 预期。 函数绑定也是如此。

    #include <stdio.h>
    #include<conio.h>
    typedef enum false, truebool;
    struct Item
    
        float weight;
        int value;
    ;

    struct Node
    
        int level, profit, bound;
        float weight;
    ;
    bool cmp(Item a, Item b)
    
        double r1 = (double)a.value / a.weight;
        double r2 = (double)b.value / b.weight;
        return r1 > r2;
    
    int bound(Node u, int n, int W, Item arr[])
    
        if (u.weight >= W)
            return 0;
        int profit_bound = u.profit;
        int j = u.level + 1;
        int totweight = u.weight;

        while ((j < n) && (totweight + arr[j].weight <= W))
        
            totweight    += arr[j].weight;
            profit_bound += arr[j].value;
            j++;
        
        if (j < n)
            profit_bound += (W - totweight) * arr[j].value /
                                             arr[j].weight;

        return profit_bound;
    
    int knapsack(int W, Item arr[], int n)
    
        sort(arr, arr + n, cmp);

        queue<Node> Q;
        Node u, v;
        u.level = -1;
        u.profit = u.weight = 0;
        Q.push(u);
        int maxProfit = 0;
        while (!Q.empty())
        
            u = Q.front();
            Q.pop();

            if (u.level == -1)
                v.level = 0;
            if (u.level == n-1)
                continue;

            v.level = u.level + 1;

            v.weight = u.weight + arr[v.level].weight;
            v.profit = u.profit + arr[v.level].value;

            if (v.weight <= W && v.profit > maxProfit)
                maxProfit = v.profit;
            v.bound = bound(v, n, W, arr);

            if (v.bound > maxProfit)
                Q.push(v);

            v.weight = u.weight;
            v.profit = u.profit;
            v.bound = bound(v, n, W, arr);
            if (v.bound > maxProfit)
                Q.push(v);
        

        return maxProfit;
    


    void main()
    
        int W = 10;   // Weight of knapsack
        Item arr[] = 2, 40, 3.14, 50, 1.98, 100,
                      5, 95, 3, 30;
        int n = sizeof(arr) / sizeof(arr[0]);

        printf("Maximum possible profit =%d " ,knapsack(W, arr, n));

        getch();
    

【问题讨论】:

typedef enum false, truebool; 为什么?!? C++ 有一个内置的bool 这是用c编写的代码。 您的标题和代码表明您正在寻求有关 bool 的帮助,但您将其标记为 C++。 这不能是直接的 C 代码。 queue&lt;Node&gt; Q;, !Q.empty(), Q.front();, ... 都是 C++ 结构。 @GillBates 绝对不是。现代 C++ 与您在 C 中编写相同内容的方式不同。 【参考方案1】:

这是因为ItemNode 的任何使用都需要struct

bool cmp(struct Item a, struct Item b)

等等。

【讨论】:

以上是关于编译c代码时出错的主要内容,如果未能解决你的问题,请参考以下文章

c/c++ 数据库连接时编译出错

C语言中,为啥这样的代码编译时出错i undeclared(first use in this function),

编译 C 文件时出错。致命错误:找不到“conio.h”文件

VS2012怎么写C语言编译出错啊

使用 MatlabR2012a 编译到 LINUX Matlab 代码时出错

ARM (UBOOT)编译出错问题