是的,我忘记了包含头文件。 我按照你的建议添加了内联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
答案 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。