c++列表,操作符==问题
C++ list, operator == problems
是的,我忘了包括头文件。我添加了内联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类型
相关文章:
- 在使用放置新操作符时,我真的需要担心对齐问题吗
- Assert()函数抛出一个错误——操作符有问题
- 操作符+重载问题
- 下标操作符重载:返回引用问题
- 操作符重载问题
- 操作符重载问题
- 关于操作符new()和操作符delete()的问题
- c++操作符重载性能问题
- c++中切换操作符的问题
- 操作符重载问题
- 涉及数组指针时delete[]操作符的问题
- 编译问题相等/不相等操作符
- 操作符过载问题
- 矩阵类操作符重载,析构函数问题
- 类赋值操作符=问题
- c++ boost::线程操作符()()问题
- 关于()操作符重载的问题
- 关于模板中随机访问迭代器的操作符+重载的问题
- 三元操作符的指针转换问题
- 基类中操作符重载的问题