【发布时间】:2011-08-02 16:53:13
【问题描述】:
开发人员您好!我正在从 Skiena 的算法设计手册中学习算法。我有以下代码:
#include <stdio.h>
#include <stdlib.h>
typedef int item_type;
typedef struct{
item_type item;
struct list* next;
}list;
void insert_list(list **l, item_type x){
list *p;
p = malloc(sizeof(list));
p->item = x;
p->next = *l;
*l = p;
}
int main(){
return 0;
}
编译时给我警告:
gcc -Wall -o "test" "test.c"(在目录中: /home/akacoder/Desktop/Algorithm_Design_Manual/chapter2) test.c:在 函数‘insert_list’:test.c:15:警告:赋值来自 指针类型不兼容 编译成功。
但是当我将这段代码重写为 C++ 时:
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
typedef int item_type;
typedef struct{
item_type item;
struct list* next;
}list;
void insert_list(list **l, item_type x){
list *p;
p = malloc(sizeof(list));
p->item = x;
p->next = *l;
*l = p;
}
int main(){
return 0;
}
它给出了以下内容:
g++ -Wall -o "chapter2" "chapter2.cpp" (在目录中: /home/akacoder/Desktop/Algorithm_Design_Manual/chapter2) Chapter2.cpp:15:错误:声明冲突'typedef struct list list' chapter2.cpp:14: 错误:'struct list' 有一个先前的声明 作为‘结构列表’chapter2.cpp:在函数‘void insert_list(list**, item_type)': chapter2.cpp: 在函数'void insert_list(list**, item_type)’:chapter2.cpp:19:错误:来自‘void*’的无效转换 到“列表*”
谁能解释为什么会这样?以及如何用 C++ 重写它?
【问题讨论】: