2017-04-14 12 views
0

私は同様の回答を見てきました。変数 'test'を抽象型 'OurStack <int>'のように宣言することはできません

私はint型のスタックを作成しようとしていますが、push関数に問題があります。

正確なエラーがある:

StackInterface.h

/** @file StackInterface.h */ 
#ifndef _STACK_INTERFACE 
#define _STACK_INTERFACE 
template<class T> class StackInterface 
{ public: 

    /** Sees whether this stack is empty. @return True if the stack is empty, or false if not. */ 
virtual bool isEmpty() const = 0; 

/** Adds a new entry to the top of this stack. @post If the operation was successful, newEntry is at the top of the stack. @param newEntry The object to be added as a new entry. @return True if the addition is successful or false if not. */ 
virtual bool push(const T& newEntry) = 0; 

/** Removes the top of this stack. @post If the operation was successful, the top of the stack has been removed. @return True if the removal is successful or false if not. */ 
virtual bool pop() = 0; 

/** Returns the top of this stack. @pre The stack is not empty. @post The top of the stack has been returned, and the stack is unchanged. @return The top of the stack. */ 
virtual T peek() const = 0; 
}; 

// end StackInterface 
#endif 

OurStack.h

#ifndef _STACK_H_ 
#define _STACK_H_ 

#include "StackInterface.h" 

template <class T> 
class OurStack : public StackInterface<T> 
{ 
    private: 
    std::stack<T> ourStack; 

    public: 
     OurStack(); 
     bool isEmpty() const; 
     bool push(const T& newEntry) const; 
     bool pop(); 
     T peek() const; 

}; 
#include "OurStack.cpp" 
#endif 

OurStack.cpp

0123:

OurStack<int> test; 
      ^
In file included from StackTester.cpp:5:0: 
OurStack.h:7:7: note: because the following virtual functions are pure within 'OurStack<int>': 
class OurStack : public StackInterface<T> 
    ^
In file included from OurStack.h:4:0, 
       from StackTester.cpp:5: 
StackInterface.h:11:15: note: bool StackInterface<T>::push(const T&) [with T = int] 
    virtual bool push(const T& newEntry) = 0; 

は、ここに私のコードです ​​

StackTester.cpp

#include <iostream> 
#include <cstdlib> 
#include <string> 
#include <stack> 
#include "OurStack.h" 

using namespace std; 

OurStack<int> test; 
int any; 

int main() 
{ 
    cout<<"press any number"; 
    cin>>any; 
    return 0; 
} 
+0

Visual Studioを使用していますか? – Omore

+0

nope、notepad ++ –

答えて

2

あなたはbool OurStack<T>::push(const T& newEntry) const;を宣言するが、あなたのベースクラスはbool push(const T& newEntry);を宣言します。 pushconstではありません。これらの問題を回避するには、overrideキーワードを使用します。

+0

ありがとう、それは提供されたStackInterfaceでconstだったし、奇妙に思えました、間違いだったでしょう 編集:いいえ、私は間違いをしました。おそらく良い –

0

どのようにプッシュ機能することができます:

bool push(const T& newEntry) const; 

はおそらくconstのこと?

はまた、このような名前:

_STACK_H_ 

は、実装のために予約されています。単純に使用します。

STACK_H 
関連する問題