C ++列表,运算符==问题

时间:2014-03-23 18:46:20

标签: c++ list visual-studio-2012

是的,我忘记了包含头文件。 我按照你的建议添加了内联bool操作符==但仍然出现了一堆麻烦。也许我现在应该停下来,但我不想要:D 顺便说一句,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:\users\komputer\documents\visual studio 2012\projects\project1\katalog.h(6): error C2061: syntax error : identifier 'Katalog'
    1>c:\users\komputer\documents\visual studio 2012\projects\project1\katalog.h(7): error C2805: binary 'operator ==' has too few parameters
1>c:\users\komputer\documents\visual studio 2012\projects\project1\katalog.h(8): error C2065: 'katalog' : undeclared identifier

2 个答案:

答案 0 :(得分:0)

两个直接问题:您尚未在任何地方声明IZarzadzaniePozycjami类。在类中使用相等运算符会强制您在比较的左侧创建类的实例,并在右侧创建参数。

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

您可以通过添加独立和全局帮助函数来解决第二个问题:

inline bool operator==(const std::string& s, const Katalog& katalog)
{
    return katalog == s;  // "Reverse" the arguments
}

注意:我在inline上面创建了函数,因此您可以将其添加到头文件中。

答案 1 :(得分:0)

第一条错误消息表明在类定义中

class Katalog 
    : public IZarzadzaniePozycjami
{
//...

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

第二个错误意味着在条件

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

其中tytul的类型为std :: string,functionj iter->getTytul()返回的右操作数没有类型std :: string。