C++类继承错误C2509

标签 c++ class inheritance

我有两个类(class) 第一的: .h文件

 #ifndef Vandenynas_H
#define Vandenynas_H
#include <cstdlib>
#include <iostream>
#include <string>
#include "skaicioti.h"
using namespace std;

class Vandenynas {
public:
    void danne (int i,int a, int a0);
    void getdan();
    string GetName ();
};
#endif  

.cpp文件

  #include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
#include "Vandenynas.h"

skaicioti::v vektorV;
void Vandenynas::danne(int i,int a, int a0)
{ 
    switch (i)
    {
        case 0:
            vektorV.x=a-a0;
            break;
        case 1:
            vektorV.y=a-a0;
            break;
        default:
            vektorV.z=a-a0;
            break;
    }
}

第二个: .h文件

    #ifndef Zuvis_H
#define Zuvis_H
#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>
#include "Vandenynas.h"
class Zuvis:public Vandenynas
{
public:
    void plaukti();
};
#endif  

.cpp文件

#include <cstdlib>
#include <iostream>
#include <string>
#include <sstream>

#include "Zuvis.h"
skaicioti::v vektorZ;
void Zuvis::plaukti()
{
    cout<<"plaukia\n";
}
void Zuvis::danne (int i,int a, int a0)
{
        switch (i)
    {
        case 0:
            vektorZ.x=a-a0;
            break;
        case 1:
            vektorZ.y=a-a0;
            break;
        default:
            vektorZ.z=a-a0;
            break;
    }
}

当我编译时出现错误: zuvis.cpp(14) : error C2509: 'danne' : 成员函数未在 'Zuvis' 中声明 也许有人可以告诉我我的错误在哪里?

最佳答案

我认为您需要以下内容:

  1. danne 应该是虚拟的,
  2. danne 应该在 Zuvis 类的 header 中声明。

class Vandenynas
{
public:
    virtual void danne (int i,int a, int a0);
    void getdan();
    string GetName ();
};

class Zuvis : public Vandenynas
{
public:
    void plaukti();
    virtual void danne (int i,int a, int a0);
};

问题是 (1) 如果您不在基类中将 danne 声明为虚拟的,您将无法在派生类中提供替代实现(即 < em>override 它),以及 (2) 如果您要覆盖派生类中的函数,您应该在类声明时就说明这一点。

或者,您可能只想重载派生类中的函数。对于这种情况,您在这两种情况下都不需要 virtual(尽管您仍然需要在 Zuvis 的 header 中声明该函数)。这样您的函数就会隐藏基类中具有相同名称的函数,并且不会覆盖它。

隐藏和覆盖的区别可以看这里:

Vandenynas* pv = new Zuvis();
pv -> danne(0, 0, 0); // (*)

标记为(*)的行在隐藏的情况下执行Vandenynasdanne的实现,而Zuvis 在覆盖的情况下的实现。看到了吗?

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

相关文章:

c# - 如何让子类实现接口(interface)?

c++ - 获取异常的正确堆栈

C++11 继承构造函数和访问修饰符

java - 静态类是否只包含java中的静态方法?

c++ - 虚函数错误(vtable?)

c# - 奇怪的通用继承模式

c++ - 用 C++ 编写和读取 Unicode 文件?

c++从输出中接收 "-1.#IND"?

php - 函数中的类成员函数?

java - 类设计问题【可选实现】