2016-12-04 10 views
0

私はこのようなクラスBasicAlgoへのクラスのアルゴリズムから純粋なメソッドを実装しようとしている:実装されていない純粋な仮想メソッド

class Algorithm 
{ 
    public: 
     virtual void solve() = 0; 
}; 

class BasicAlgo : public Algorithm 
{ 
    public: 
     void solve() { }; 
}; 

Algorithm a = BasicAlgo(); 
a.solve(); 

しかし、私はこのエラーを取得しています:

variable type 'Algorithm' is an abstract class 
    Algorithm a = BasicAlgo(); 
      ^
unimplemented pure virtual method 'solve' in 'Algorithm' 
      virtual void solve() = 0; 

後ソリューションを探しているStackoverflowの多くの時間、私はまだ実際になぜエラーがあるか理解していません。私にはa.solve()BasicAlgo::solveの魔女がうまく実装されています。

答えて

5

C++はJavaではありません。

Algorithm a = BasicAlgo(); 

BasicAlgoからそれを初期化コピーによってタイプAlgorithmオブジェクトを定義する上記の試み。たとえそれが機能していても(この場合は、Algorithmオブジェクトをインスタンス化することを禁止する純粋な仮想関数のために)、AlgorithmsliceBasicAlgoオブジェクトだけがあります。あなたの目的のために

は、あなたはこのように、ポインタや参照が必要:

std::unique_ptr<Algorithm> a = std::make_unique<BasicAlgo>(); 
a->solve(); 
+0

ありがとうございました!あなたは正しいです。私はJavaを書くことを試みていました... –

+0

@GuillaumeWuip、よろしくです。私はあなたのJavaの知識を脇に置いて、初心者のプログラマーのようにC++にアプローチすることをお勧めします。彼らはいくつかのキーワードを共有し、どちらも "中括弧"言語ですが、それが類似点が終わるところです。彼らは全く異なるイディオムを扱う。 – StoryTeller

+0

それは私の先生が言っていることです。時には難しいです。 C++にはこのような非常に強力な機能がたくさんあります。 –

2

Algorithm a = BasicAlgo();多型の行動を許さない - クラスが抽象的でなかった場合、実際には、あなたが遭遇するだろうslicing

あなたは、継承ポリモーフィズムを可能にするためにstd::unique_ptrを使用することができます。

std::unique_ptr<Algorithm> a = std::make_unique<BasicAlgo>(); 
関連する問題