c++列表,操作符==问题

C++ list, operator == problems

本文关键字:问题 操作符 列表 c++      更新时间:2023-10-16

是的,我忘了包括头文件。我添加了内联bool操作符==如你所建议的,但仍然一堆麻烦出现了自己。也许我现在应该停下来,但我不想顺便说一下,getTytul()返回字符串。所以这就是我得到的:标题:

#include "Pozycja.h"
#include "IZarzadzaniePozycjami.h"
#include <iostream>
#include <list>
inline bool operator==(std::string& s, Katalog& katalog)
{
    return katalog == s;
}
class Katalog 
    : public IZarzadzaniePozycjami
{
private:
    std::string dzialTematyczny;
public:
    void ZnajdzPozycjePoTytule(std::string tytul);
    void ZnajdzPozycjePoId(int id);
    void WypiszWszystkiePozycje();
    Katalog(void);
    Katalog(std::string dzialTematyczny_);
    void DodajPozycje(Pozycja);
    std::list<Pozycja> lista;
    ~Katalog(void);
};

cpp:

#include "Katalog.h"
#include <iterator>
Katalog::Katalog(void)
{
    dzialTematyczny= "Nieznany dzial tematyczny";
}
Katalog::Katalog(std::string dzialTematyczny_):dzialTematyczny(dzialTematyczny_){}
void Katalog::DodajPozycje(Pozycja a){
    std::cout << " Dodano pozycje";
    lista.push_back(a);
}
void Katalog::ZnajdzPozycjePoTytule(std::string tytul){
    for(std::list<Pozycja>::iterator iter = lista.begin(); iter!= lista.end();++iter)
    {
        if(tytul == iter->getTytul())
        {
            //std::cout << " Mamy tytul: "<< iter->getTytul() << std::endl;
        }
    }
}
void Katalog::ZnajdzPozycjePoId(int id){
    for(std::list<Pozycja>::iterator iter = lista.begin(); iter!= lista.end();++iter)
    {
        if(id == iter->getId())
        {
            std::cout << " Mamy id: "<< iter->getId() << std::endl;
        }
    }
}
void Katalog::WypiszWszystkiePozycje(){
    for(unsigned int i=0; i<lista.size(); ++i)
    {
        lista.front().WypiszInfo();
    }
}
Katalog::~Katalog(void)
{
}

错误:

 1>c:userskomputerdocumentsvisual studio 2012projectsproject1katalog.h(6): error C2061: syntax error : identifier 'Katalog'
    1>c:userskomputerdocumentsvisual studio 2012projectsproject1katalog.h(7): error C2805: binary 'operator ==' has too few parameters
1>c:userskomputerdocumentsvisual studio 2012projectsproject1katalog.h(8): error C2065: 'katalog' : undeclared identifier

两个直接的问题:您没有在任何地方声明IZarzadzaniePozycjami类。在类中使用相等操作符会强制将类的实例放在比较操作的左侧,将实参放在右侧。

第一个问题可以通过包含定义IZarzadzaniePozycjami的文件来解决。

第二个问题可以通过添加一个独立的全局帮助函数来解决:
inline bool operator==(const std::string& s, const Katalog& katalog)
{
    return katalog == s;  // "Reverse" the arguments
}

注意:我在inline上面做了这个函数,所以你可以把它添加到头文件中。

第一条错误信息说在类定义中

class Katalog 
    : public IZarzadzaniePozycjami
{
//...

编译器对其基类IZarzadzaniePozycjami的定义一无所知也许您忘记在标题中包含相应的定义。

第二个错误意味着在条件

    if(tytul == iter->getTytul())

如果tytul具有std::string类型,则functionj iter->getTytul()返回的右操作数不具有std::string类型