编译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<Node> Q;
, !Q.empty()
, Q.front();
, ... 都是 C++ 结构。
@GillBates 绝对不是。现代 C++ 与您在 C 中编写相同内容的方式不同。
【参考方案1】:
这是因为Item
或Node
的任何使用都需要struct
:
bool cmp(struct Item a, struct Item b)
等等。
【讨论】:
以上是关于编译c代码时出错的主要内容,如果未能解决你的问题,请参考以下文章
C语言中,为啥这样的代码编译时出错i undeclared(first use in this function),
编译 C 文件时出错。致命错误:找不到“conio.h”文件