VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 740|回复: 7

使用STL中的list类问题

[复制链接]

4

主题

16

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
发表于 2020-1-20 07:40:02 | 显示全部楼层 |阅读模式
我定义了一个商品类:
class CMerchandise
{
public:
   CMerchandise();
   CMerchandise(string goodsname,string modnum,\
string goodsnum,int count,double price,string provider,string manname);
   ~CMerchandise();
   void SetGoodsName(string goodsname);
   void SetModelNum(string modnum);
   void SetGoodsNum(string goodsnum);
   void SetCount(int count);
   void SetPrice(double price);
   void SetProfits(double profits);
   void SetManName(string manname);
   void SetProvider(string provider);

   string GetGoodsName() const;
   string GetModelNum() const;
   string GetGoodsNum() const;
   string GetManName() const;
   string GetProvider() const;
   int    GetCount() const;
   double GetPrice() const;
   double GetProfits() const;
   
   //重载"<"运算符,便于使用STL排序
   bool  operator<(const CMerchandise &m) const   
  {   
        return   m_nCount > m.m_nCount;  //按商品数量从大到小排
   }  
       
private:
    string m_strGoodsName; //货名
    string m_strModelNum;  //商品型号
    string m_strGoodsNum;  //货号
    int    m_nCount;       //商品数量   
    double m_dwPrice;      //商品进货价格
    double m_dwProfits;    //商品利润()
    string m_strProvider;  //供货商
    string m_strManName;   //商品负责人(进货或者销售)
};

typedef list<CMerchandise> MerchandiseList; //商品链
我在另一个类中使用下面语句:
其中m_MerchandiseList是这样定义的:MerchandiseList m_MerchandiseList;

............

MerchandiseList *pMerchandiseList          =new MerchandiseList;

for(MerchandiseListIte = m_MerchandiseList.begin();
MerchandiseListIte!=m_MerchandiseList.end();MerchandiseListIte++)<-error!!
{
if((*MerchandiseListIte).GetGoodsName() ==Merchandise.GetGoodsName()&&
(*MerchandiseListIte).GetGoodsNum() ==Merchandise.GetGoodsNum()&&
        (*MerchandiseListIte).GetManName() ==Merchandise.GetManName())
{
        pMerchandiseList->push_back(*MerchandiseListIte);
        bFlag = true;
}
}

编译时for语句就是报错!不知道什么原因,请大虾指点,急!!!

error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class std::list<class CMerchandise,class std::allocator<class CMerchandise> >::const_iterator' (or there is no acce
回复

使用道具 举报

0

主题

49

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-29 09:00:01 | 显示全部楼层
m_MerchandiseList.begin();取得的是iterator,而不是指针,改成这样:

for(MerchandiseList::iterator MerchandiseListIte  = m_MerchandiseList.begin();
MerchandiseListIte!=m_MerchandiseList.end();MerchandiseListIte++)
{
if((*MerchandiseListIte).GetGoodsName() ==Merchandise.GetGoodsName()&&
(*MerchandiseListIte).GetGoodsNum() ==Merchandise.GetGoodsNum()&&
        (*MerchandiseListIte).GetManName() ==Merchandise.GetManName())
{
        pMerchandiseList->push_back(*MerchandiseListIte);
        bFlag = true;
}
}
回复

使用道具 举报

0

主题

49

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-29 09:45:01 | 显示全部楼层
iterator只是行为像指针而已,具体是不是指针得看程序库的实现
回复

使用道具 举报

4

主题

16

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
 楼主| 发表于 2020-1-29 13:00:01 | 显示全部楼层
楼上的请你看清楚点,我也忘说了,上面应该有:
MerchandiseList::iterator  MerchandiseListIte; 这句的,原因不是你说的这个问题。
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-29 14:36:01 | 显示全部楼层
不知道是不是你MerchandiseListIte 定义错了还是怎么回事,我这边是没有问题的,测试代码如下:
#include <iostream>
#include <string>
#include <list>
#include <vector>
using namespace std;

class CMerchandise
{
public:
        CMerchandise();
        CMerchandise(string goodsname,string modnum,\
        string goodsnum,int count,double price,string provider,string manname);
        ~CMerchandise();
        void SetGoodsName(string goodsname);
        void SetModelNum(string modnum);
        void SetGoodsNum(string goodsnum);
        void SetCount(int count);
        void SetPrice(double price);
        void SetProfits(double profits);
        void SetManName(string manname);
        void SetProvider(string provider);
       
        string GetGoodsName() const;
        string GetModelNum() const;
        string GetGoodsNum() const;
        string GetManName() const;
        string GetProvider() const;
        int GetCount() const;
        double GetPrice() const;
        double GetProfits() const;
       
        //重载"<"运算符,便于使用STL排序
        bool operator<(const CMerchandise &m) const
        {
        return m_nCount > m.m_nCount; //按商品数量从大到小排
        }

private:
        string m_strGoodsName; //货名
        string m_strModelNum; //商品型号
        string m_strGoodsNum; //货号
        int m_nCount; //商品数量
        double m_dwPrice; //商品进货价格
        double m_dwProfits; //商品利润()
        string m_strProvider; //供货商
        string m_strManName; //商品负责人(进货或者销售)
};

int main()
{
        bool bFlag=  false;
        typedef list<CMerchandise> MerchandiseList;
        MerchandiseList m_MerchandiseList;
        CMerchandise Merchandise;
        MerchandiseList *pMerchandiseList =new MerchandiseList;
        list<CMerchandise>::iterator MerchandiseListIte;
        for(MerchandiseListIte = m_MerchandiseList.begin();
        MerchandiseListIte!=m_MerchandiseList.end();
        MerchandiseListIte++)
        {
                if(        (*MerchandiseListIte).GetGoodsName() ==Merchandise.GetGoodsName()&&
                        (*MerchandiseListIte).GetGoodsNum() ==Merchandise.GetGoodsNum()&&
                        (*MerchandiseListIte).GetManName() ==Merchandise.GetManName())
                {
                        pMerchandiseList->push_back(*MerchandiseListIte);
                        bFlag = true;
                }
        }
}
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-30 01:27:01 | 显示全部楼层
请查看是否你的成员或成员函数加了const限定符
不妨用MerchandiseList::const_iterator 试一下
回复

使用道具 举报

4

主题

16

帖子

15.00

积分

新手上路

Rank: 1

积分
15.00
 楼主| 发表于 2020-1-30 09:54:01 | 显示全部楼层
intoblue00 兄,果真如你所说,我类里确实多处使用了const成员函数,松了口气(开始确实检查不出那里错^_^),还有其他文件没编译呢。
回复

使用道具 举报

0

主题

49

帖子

34.00

积分

新手上路

Rank: 1

积分
34.00
发表于 2020-1-30 20:18:02 | 显示全部楼层
呵呵,那可真是不好意思了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表