如何用袋子容器制作袋子

时间:2013-09-16 06:25:32

标签: c++

我刚刚介绍了Bag容器,需要一些帮助。 我得到了一些代码,演示了如何使用行李容器。问题是我的教师给出的代码包含一些我无法弄清楚的错误。 当他试图制作一个新包时会弹出错误。 这是头文件和实际的cpp文件

#include <iostream> // For cout and cin
#include <string> // For string objects
#include "BagInterface.h"// For ADT bag
#include <vector>
#include <string>
using namespace std;
int main()
{
string clubs[] = { "Joker", "Ace", "Two", "Three",
"Four", "Five", "Six", "Seven",
"Eight", "Nine", "Ten", "Jack",
"Queen", "King" };
// Create our bag to hold cards
Bag <string> grabBag;                  //<<<<<<<<<<<<error is on this line
// Place six cards in the bag
grabBag.add(clubs[1]);
grabBag.add(clubs[2]);
grabBag.add(clubs[4]);
grabBag.add(clubs[8]);
grabBag.add(clubs[10]);
grabBag.add(clubs[12]);
// Get friend's guess and check it
int guess = 0;
while (!grabBag.isEmpty())
{
cout << "What is your guess?"
<< "(1 for Ace to 13 for King):";
cin >> guess;
// Is card in the bag?
if (grabBag.contains(clubs[guess]))
{
// Good guess – remove card from the bag
cout << "You get the card!\n";
grabBag.remove(clubs[guess]);
}
else
{
cout << "Sorry, card was not in the bag.\n";
} // end if
} // end while
cout << "No more cards in the bag.\n";
return 0;
}; // end main

和头文件

/** @file BagInterface.h */
#ifndef _BAG_INTERFACE
#define _BAG_INTERFAE
#include <vector>
template<class ItemType>
class BagInterface
{
public:
/** Gets the current number of entries in this bad.
@return The integer number of entries currently in the bag */
virtual int getCurrentSize() const = 0;
/** Sees whether this is empty
@return True if the bag is empty, or false if not */ virtual bool isEmpty() const = 0;
/** Adds a new entry to this bag
@post If successful, newEntry is stored in the bag and
the count of items in the bag has increased by 1
@param newEntry The object to be added as an new entry
@return True is addition was successful, or false if not */
virtual bool add(const ItemType& newEntry) = 0;
/** Removes one occurrence of a given entry from this bag,
if possible
@post If successful, anEntry has been removed from the bag
and the count of items in the bad has decreased by 1.
@param anEntry The entry to be removed
@return True if removal was successful, or false if not */
virtual bool remove(const ItemType& anEntry) = 0;
/** Removes all entries from this bag
@post Bag contains no items, and the count of items is 0 */
virtual void clear() = 0;
/** Counts the number of times a given entry appears in bag.
@param anEntry The entry to be counted
@return The numer of times anEntry appears in the bag */
virtual int getFrequencyOf(const ItemType& anEntry) const = 0;
/** Tests whether this bag contains an given entry
@param anEntry The entry to locate
@return True if bag contains anEntry, or false otherwise */
virtual bool contains(const ItemType& anEntry) const = 0;
/** Empties and then fills a given vector with all entries that
are in this bag
@return A vector containing all the entries in the bag */
virtual vector<ItemType> toVector() const = 0;
}; // end BagInterface

我坚持这个,不知道如何让它发挥作用。 感谢

1 个答案:

答案 0 :(得分:2)

您获得了“界面”(abstract class)。

(或许你也得到了Bag.hpp / Bag.cpp,你没有显示/忘记包括在内)

template<class ItemType>
class BagInterface
{
public:
    virtual int getCurrentSize() const = 0;
    virtual bool isEmpty() const = 0;
    virtual bool add(const ItemType& newEntry) = 0;
    virtual bool remove(const ItemType& anEntry) = 0;
    virtual void clear() = 0;
    virtual int getFrequencyOf(const ItemType& anEntry) const = 0;
    virtual vector<ItemType> toVector() const = 0;
}; // end BagInterface

您必须实例化它并根据评论实施方法!

查看评论中链接的“虚拟”实现:程序打印

What is your guess?(1 for Ace to 13 for King): 1 
You get the card!
What is your guess?(1 for Ace to 13 for King): 2 
You get the card!
What is your guess?(1 for Ace to 13 for King): 4 
You get the card!
What is your guess?(1 for Ace to 13 for King): 8 
You get the card!
What is your guess?(1 for Ace to 13 for King): 10 
You get the card!
What is your guess?(1 for Ace to 13 for King): 12 
You get the card!
No more cards in the bag.