C指针结构,不兼容的类型

时间:2014-05-25 23:34:02

标签: c debugging

如何在结构中获取指针,指向另一个结构中的相同类型的数据?

链接列表:

typedef struct Item {
    struct Item *ptr; //point to next one
} MyItem;

    typedef struct Collection {
     int x;        
     MyItem coll_ptr; //structure, not a pointer
    } MyCollection

在我的一个功能中:

functionX(MyCollection* collection)
{
    MyItem *var= malloc(sizeof(MyItem));
    var->ptr = collection->coll_ptr;   //ERROR: incompatible types
}

假设coll_ptr正在寻找有效的MyItem结构,我怎样才能让new-> ptr指向相同的结构?

但是,如果我var->ptr = &collection->coll_ptr;我没有收到错误,

但这是整个结构的地址吗?

或集合结构中的特定项目? (说集合有其他项目,而不仅仅是指针)?

澄清问题

var-> prt需要指向coll_ptr结构,即内部集合。

这是正确的方法:var->ptr = collection->coll_ptr;

或者是:var->ptr = &(collection->coll_ptr);

从下面的帮助中回答
collection->coll_ptr;不是指针,所以&需要在声明前面引用该元素的地址。

2 个答案:

答案 0 :(得分:2)

编译.c文件时,单词new没有问题。当我使用Code :: Blocks默认的C / C ++编译器编译它时,你的代码没有任何问题,如下所述:

  

此插件是各种编译器的接口:

     

GNU GCC编译器

     

Microsoft Visual C ++ Free Toolkit 2003

     

Borland C ++编译器5.5

您的代码有0错误,请查看您的编译器。

    #include <stdlib.h>

    typedef struct Item {
        struct Item *ptr;
    } MyItem;

    typedef struct Collection {
        MyItem *coll_ptr;
    } MyCollection;

    void functionX(MyCollection* collection)
    {
        MyItem *new = malloc(sizeof(MyItem));
        new->ptr = collection->coll_ptr;   //ERROR: incompatible types
    }

    int main(){
            MyCollection Ha ;
            functionX(&Ha);
            return 0;
    }

编译器:

  

进程终止,状态为0(0分0秒)

     

0个错误,0个警告(0分0秒)

答案 1 :(得分:0)

首先,观察new是C ++中的保留字,不能用作变量名。

无论如何,您要将var->ptr的值设置为collection->coll_ptr->ptr,因为这是MyItem类型的位置。

相关问题