C ++重载运算符,编译器看不到该运算符

时间:2018-12-20 01:52:15

标签: operator-overloading overloading

CMagazin.h

class ApplicationController < ActionController::Base
  def default_url_options(options = {})
    if controller_name == 'my_controller'
      options[:test] = session[:test]
    end

    options
  end
end

CMagazin.cpp

class CMagazin
{
    char *m_nume;
    list<CProdus*>List_produse;
public:
    void printExpirabile( const char* data);
    ~CMagazin();
};

CAliment.h

void CMagazin::printExpirabile(const char *xdata)
{
    list<CProdus*>::iterator it;
    for (it = List_produse.begin(); it != List_produse.end(); ++it)
    {
         CProdus* p = *it;
        if (p->get_tip()=='A')
        {
            **if (p > xdata)**->this problem

        }
    }
}

CAliment.cpp

class CAliment :
    public CProdus
{
    char *m_expirare;
public:
    bool operator >(const char*date);
    ~CAliment();    
};

关于“>” operator.in CMagazin.cpp的内容不使用我的运算符...我需要帮助。 我该怎么办?我在CMagazin类中需要“>”。 class CAliment它是派生自CProdus的类。

2 个答案:

答案 0 :(得分:0)

答案是:在CProdus类中,必须将操作员声明为虚拟,而在 CMagazin.cpp

        void CMagazin::printExpirabile(const char *xdata)
    {
        list<CProdus*>::iterator it;
        for (it = List_produse.begin(); it != List_produse.end(); ++it)
        {
             CProdus* p = *it;
            if (p->get_tip()=='A')
            {
                if (p->operator>( xdata))-> make this!
                     {
                       p->print();
                     }
            }
        }
    }

答案 1 :(得分:0)

CProdus * p-是一个指针,需要使用该运算符的对象->试试(* p)> xdata

  void CMagazin::printExpirabile(const char *xdata)
{
    list<CProdus*>::iterator it;
    for (it = List_produse.begin(); it != List_produse.end(); ++it)
    {
         CProdus* p = *it;
        if (p->get_tip()=='A')
        {
            if ((*p)>( xdata))-> make this!
                 {
                   p->print();
                 }
        }
    }
}