| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2761 人关注过本帖
标题:error C2106: “=”: 左操作数必须为左值 求解!
只看楼主 加入收藏
学c艹的废柴
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-7-28
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
error C2106: “=”: 左操作数必须为左值 求解!
本人c++菜鸟,我编了一个结构体

程序代码:
struct teacher
{
    char name[9],title[7];
    teacher* next;
};


定义了一个变量 teacher head;

并给 head.hext=NULL;

然后我又 head.next= new teacher;

结果就显示了上面的报错    1>e:\ropes\linked_list\linked_list\linked_list.cpp(43): error C2106: “=”: 左操作数必须为左值

本人用的是vs2017,不知道这是怎么回事,请大家帮帮忙!

搜索更多相关主题的帖子: 操作数 teacher next head new 
2019-07-28 23:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
为什么不肯贴代码?
程序代码:
struct teacher
{
    char name[9], title[7];
    teacher* next;
};

int main( void )
{
    teacher head;
    head.next = NULL;
    head.next= new teacher;
}
编译没问题

2019-07-29 08:48
学c艹的废柴
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2019-7-28
收藏
得分:0 
回复 2楼 rjsp
这是我的代码,我想做一个类似链表的东西,能随时添加新的“教师”,我自认为我的代码可以实现这个功能,但是不可以,请您帮我看看

程序代码:
#include <iostream>
#include<conio.h>
#include<string.h>
using namespace std;
struct teacher
{
    char name[10], title[7];
    teacher *next;
};
teacher find(teacher head)
{

    if (head.next == NULL)
        return head;
    else
        find(*(head.next));
}
int main()
{
    teacher head ;
    head.next = NULL;
    strcpy_s(head.name, "spname");
    strcpy_s(head.title, "stitle");
    while (true)
    {
        cout << "是否要添加教师?(y/n)";
        char c;
        char name[10], title[7];
        c = _getch();
        if (c == 'y' || c == 'Y')
        {
            teacher* tem;
            find(head).next = tem;
            cout << "教师的姓名是?\n";
            cin >> name;
            cout << "教师的职称是?\n";
            cin >> title;
            strcpy_s(find(head).next->name, name); strcpy_s(find(head).next->title, title);
            find(head).next->next = NULL;
            cout << "添加成功!";
        }
        else break;
    }
}
2019-07-29 09:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <iostream>
#include <list>
#include <string>

struct teacher
{
    std::string name;
    std::string title;

    teacher()
    {
    }
    teacher( const std::string& name, const std::string& title ) : name(name),title(title)
    {
    }

    friend std::istream& operator>>( std::istream& is, teacher& tcr );
    friend std::ostream& operator<<( std::ostream& os, const teacher& tcr );
};

std::istream& operator>>( std::istream& is, teacher& tcr )
{
    return is >> tcr.name >> tcr.title;
}
std::ostream& operator<<( std::ostream& os, const teacher& tcr )
{
    return os << tcr.name << '\t' << tcr.title;
}

int main( void )
{
    std::list<teacher> teachers;

    std::cout << "请输入教师的名称与职称:\n";
    for( teacher tcr; std::cin>>tcr; )
        teachers.push_back( tcr );

    std::cout << "您输入教师的名称与职称:\n";
    for( std::list<teacher>::const_iterator itor=teachers.begin(); itor!=teachers.end(); ++itor )
        std::cout << *itor << '\n';
}

输入:
张三 校长
李四 主任
王五 教工
^Z (Windows上是Ctrl+Z,linux上是Ctrl+D)
输出:
您输入教师的名称与职称:
张三    校长
李四    主任
王五    教工


2019-07-29 11:08
uouo99
Rank: 2
等 级:论坛游民
威 望:3
帖 子:30
专家分:98
注 册:2019-9-30
收藏
得分:0 
感觉下面这句有问题啊:
find(head).next = tem;
find(head) 返回的是一个teacher类型的临时对象,find(head).next是临时对象的一个指针成员,是一个右值,在上面这句赋值语句结束后即将销毁,所以赋值应该是没有意义的行为。
感觉你可以考虑修改一下find函数的返回值类型为一个引用类型,可能会解决这个问题


[此贴子已经被作者于2019-10-1 15:10编辑过]

2019-10-01 15:08
快速回复:error C2106: “=”: 左操作数必须为左值 求解!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022005 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved