C++,继承,虚拟

标签 c++ inheritance virtual

我这里遇到了一些问题。我试图让我的代码像 java 中的接口(interface)一样工作。这个类被其他 2 个继承,因为它们导致了一些问题。 而且我还想知道我是否做对了,以及改进我的代码的方法。我是新手。 看:

接口(interface)类:

#include <iostream>
#include <string>
class IZarzadzaniePozycjami{

public:
    IZarzadzaniePozycjami(void);
    ~IZarzadzaniePozycjami(void);

public:
    virtual void ZnajdzPozycjePoTytule();
    virtual void ZnajdzPozycjePoId();
    virtual void WypiszWszystkiePozycje();


};

#include "Pozycja.h"
#include "IZarzadzaniePozycjami.h"
#include <iostream>
#include <list>

继承自 IZarzadzanie... 类的目录类。

#include "Pozycja.h"
#include "IZarzadzaniePozycjami.h"
#include <iostream>
#include <list>

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;
    friend bool operator==(const Katalog & kat, const std::string & s);
    ~Katalog(void);
};
inline bool operator==(std::string& s, Katalog& katalog)
{
    return katalog == s;
}

然后是从接口(interface)继承的库类(biblioteka.h)

#include<iostream>
#include "IZarzadzaniePozycjami.h"
#include "Bibliotekarz.h"
#include  "Pozycja.h"
#include "Katalog.h"

class Biblioteka :
    public IZarzadzaniePozycjami
{
public:
    Biblioteka(void);
    ~Biblioteka(void);
    Biblioteka(std::string adres_);
    void DodajBibliotekarza(Bibliotekarz);
    void WypiszBibliotekarzy();
    void DodajKatalog(Katalog);
    void DodajPozycje(Pozycja p, std::string dzialTematyczny);

    void ZnajdzPozycjePoTytule(std::string tytul);
    void ZnajdzPozycjePoId(int id);
    void WypiszWszystkiePozycje();
private: std::string adres;



};

这里有一些错误。很抱歉发了很长的帖子。不知道要切断什么。

c:\users\komputer\documents\visual studio 2012\projects\project1\izarzadzaniepozycjami.h(3): error C2011: 'IZarzadzaniePozycjami' : 'class' type redefinition
1>          c:\users\komputer\documents\visual studio 2012\projects\project1\izarzadzaniepozycjami.h(3) : see declaration of 'IZarzadzaniePozycjami'
1>c:\users\komputer\documents\visual studio 2012\projects\project1\katalog.h(7): error C2504: 'IZarzadzaniePozycjami' : base class undefined
1>c:\users\komputer\documents\visual studio 2012\projects\project1\biblioteka.h(9): error C2504: 'IZarzadzaniePozycjami' : base class undefined
1>  Generating Code...
1>c:\users\komputer\documents\visual studio 2012\projects\project1\katalog.cpp(16): warning C4717: 'operator==' : recursive on all control paths, function will cause runtime stack overflow

最佳答案

在所有头文件中使用#pragma once:

#pragma once

#include <iostream>
#include <string>
class IZarzadzaniePozycjami{

public:
    IZarzadzaniePozycjami(void);
    ~IZarzadzaniePozycjami(void);
....

并确保在使用 IZarzadzaniePozycjami 之前包含 IZarzadzaniePozycjami 的 header 。

关于C++,继承,虚拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22598169/

相关文章:

c++ - 我如何通知独立的应用程序依赖 DLL 的位置?

c++ - 在 C++ 中传递变量 "name"

c# - 如何在虚拟模式下以编程方式编辑 datagridview 的单元格值?

inheritance - 在 SCSS 中包含另一个类

c# - 为什么要在 C# 中显式重写虚方法?

c++ - 在派生类 C++ 上访问方法的最佳方式

c++ - 为什么 C++ 为我的动态数组分配如此大的内存空间?

c++ - CMake OS X CLion。如何链接自定义动态库?

java - 如何调用父类(super class)的重写方法?

c++ - 如果所包含的对象也继承,如何定义相互继承的容器? (以QObject为基础)