2016-06-08 71 views
-2

以下問題: 我得到了一個抽象的motherclass,兩個子類和一個使用子類的函數的類。必須實現繼承的母類虛擬方法

motherclass:

Vektor.h

class Vektor { 
public: 
    Vektor(); 
    virtual bool range() const = 0; 
    virtual ~Vektor(); 
}; 

子類:

Absolutvektor.h

class Absolutvektor: public Vektor { 
public: 
    Absolutvektor(int x, int y); 
    int x; 
    int y; 
    virtual ~Absolutvektor(); 
    virtual bool range (int x, int y); 
}; 

Einheitsvektor.h

class Einheitsvektor : public Vektor { 
public: 
    Einheitsvektor(int x, int y, int richtung); 
    int x; 
    int y; 
    int richtung; 
    virtual ~Einheitsvektor(); 

    virtual bool Einheitsvektor::range (int richtung); 

}; 

「正常班」: schiff.h

#pragma once 
#include <Einheitsvektor.h> 
#include <Absolutvektor.h> 

class Schiff { 
    public: 
     Schiff(int schiffId, int schiffLaenge, Absolutvektor absolutvektor, Einheitsvektor einheitsvektor, bool segmentestati[]); 
     int schiffId; 
     int schiffLaenge; 
     Absolutvektor absolutvektor; 
     Einheitsvektor einheitsvektor; 
     bool segmentestati[] = false; 
     // c++ vektor 
}; 

Schiff.cpp:

#include "Schiff.h" 

Schiff::Schiff(int schiffId, int schiffLaenge, Absolutvektor absolutvektor, Einheitsvektor einheitsvektor, bool segmentestati[]){ 
    this -> schiffId = schiffId; 
    this -> schiffLaenge = schiffLaenge; 
} 

洙現在我得到以下錯誤在希夫文件:

類型'Einheitsvektor'必須實現繼承的純虛擬 我的ThOD「VEKTOR ::範圍」

錯誤出現六次,在Schiff.cpp 2倍和4倍Schiff.h

我不知道爲什麼要實現該功能爲「VEKTOR」因爲這是一個抽象類,並且我有兩個不同的函數範圍用例。

+3

虛擬函數上的簽名需要與實現中的簽名相匹配。 – Tyler

+2

'bool range();''和'bool range(int richtung);'不是同一個函數。您可能認爲您在'Einheitsvektor :: range'中重寫'Vektor :: range',但C++不會。如果你的意思是重寫一個函數,使用'override'關鍵字。 – nwp

回答

0

Einheitsvektor中,您需要聲明方法range,因爲它在母類(Vektor)中。所以它應該看起來像這樣:bool range(){ ... },不像bool range (int richtung)。如果你想要它有一個參數,你必須聲明一個方法來接受你的基類中的參數,或者修改當前的參數,這樣它有一個這樣的參數:virtual bool range(int richtung) const = 0;。你必須爲virtual bool range (int x, int y);做同樣的事情(在這種情況下,唯一的選擇是聲明第二個範圍方法,有兩個參數,所以你將有一個範圍方法接受一個參數和一個接受2)。

class Vektor { 
public: 
    Vektor(); 
    virtual bool range(int richtung) = 0 ; 
    virtual bool range (int x, int y) = 0; 
    virtual ~Vektor(); 
}; 
+0

不幸的是,錯誤保持不變 – kellerprogger

+0

我也試過 ''''''''''''''' \t int x; \t int y; \t virtual〜Absolutvektor(); \t virtual bool Vektor :: range(int x,int y); };'因爲錯誤說我必須繼承方法Vektor :: blabla – kellerprogger

相關問題