2 symptoms216 symptoms216 于 2016.03.06 14:50 提问

C语言 结构体嵌套 中的问题,

问题还没有解决。。。[请看到的老师们 帮忙看看,谢谢,麻烦了]

等待中~

图片说明我大概的想法是用结构体嵌套,

嗯~ 打个比喻, 班上每个同学的学号是外结构体的数据, 之后用学号来找同学。

每个同学的各科成绩是内结构体。

我现在想做一个同学个各科成绩录入, 可是在科目一 链接 科目二 在这儿错了,

图中是DeV C++ 编译软件

而VC++ 报错是:E:\C\GG\GGGG.CPP(42) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct date *' (or there is no acceptable conversion)

如果把图中阴影部分改为: head->full = * front; 则不报错。

希望老师们 说下如何解决, 以及为何该为 head->full = * front; 之后不报错,却会终止程序,[ 其中的问题是什么 ]

刚刚创建的CSDN账号,没有财富值,-。-

图片说明

老师, 不怎么会动态分配 啊。。。

typedef struct date{
int prestoreboole; // 1/0 进行位与运算;与grade中boole 相同;
int cut; // 代表时候被删掉,1代表删掉,0代表不被删掉。
struct date *neinext; // 内表中的指针域

}Date,*linklist;

typedef struct grade{
int boole;
int number;
double result;
struct date *full;

struct grade *next;
}Grade,*LinkList;

struct grade *Copy( struct grade *prestorehead , struct grade *originalhead){

struct grade *neworiginalhead = originalhead; 
struct grade *newprestorehead = prestorehead; 
struct date *front = NULL , *newpoint;
LinkList head;

do{ 
//******************************************************************************
front = (linklist)malloc(sizeof(Date));     //     [     这是我刚刚加的,是这样分配吗?     老师您能凑合这些代码,  分配一下,标注出来吗?]

//*******************************************************************






newpoint = (linklist)malloc(sizeof(Date)); 
newpoint->prestoreboole = neworiginalhead->boole;
newpoint->neinext = NULL;

        if( front == NULL ){
            front = newpoint;
            head->full = front;     
        }else{
          front->neinext = newpoint->neinext;
          front = front->neinext;

        }
neworiginalhead = neworiginalhead->next;

}while(neworiginalhead != NULL);
head->full->cut = 1;  //  这是第一个数,需要删除   
return head;

}

5个回答

bealing
bealing   Rxr 2016.03.06 15:01

你定义的grade中的full 是 struct data 类型的,阴影处你却将,strcut data *类型的front赋给了 struct data 类型,所以会报error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct date *' (or there is no acceptable conversion)
建议将grade中的full 改为 struct data *类型的,注意动态分配内存

symptoms216
symptoms216 谢谢老师, 不过暂时还不能采纳, 因为我还要根据您的回答去尝试, 您说的我只听懂了大概, 我尝试成功就会回来采纳, 如果成功的过程中还有不明白的,我会想您追问,麻烦了。谢谢。
接近 2 年之前 回复
WinsenJiansbomber
WinsenJiansbomber   2016.03.06 15:26

binary '=' : no operator defined 提示你没有定义拷贝赋值

symptoms216
symptoms216 2. 为什么改为: head->full = * front; 就不报错了? 3. 如果需要拷贝赋值, 大概是怎么拷贝,[不好意思,学链表 链表连接是, 只知道链接。。。]
接近 2 年之前 回复
symptoms216
symptoms216 1.请问为什么还需要拷贝赋值值。
接近 2 年之前 回复
WinsenJiansbomber
WinsenJiansbomber   2016.03.06 15:46

head/front是指向 grade 结构体的指针,而成员 full 是 date 结构的引用,当代码这样写时,就意味将指针赋值给引用,在C++中是不存在这样的操作的,所以提示要求实现这样的赋值定义:

head->full = front;

这就编译程序为什么提示“binary '=' : no operator defined”

WinsenJiansbomber
WinsenJiansbomber   2016.03.06 15:48

参考《那年声明理解不了定义与初始化(三)》指针与引用部分的内容 - http://blog.csdn.net/winsenjiansbomber/article/details/50659505

bealing
bealing   Rxr 2016.03.06 15:51

这是动态分配:front = (linklist)malloc(sizeof(Date));
但是其实这一步可以不用,因为newpoint = (linklist)malloc(sizeof(Date)); 已经分配过了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!