C++でOOP用の「Candy Shop」割り当てプロジェクトに取り組んでいて、コンパイラが自分のコードについて再度不満を抱いています:)フォーラムでも同様の名前のトピックが見つかりましたが、私が持っている...だから、次のように私はいくつかの製品(キャンディー、クッキー、対)、ショッピングクラス用のテンプレートを導き出すために、基本クラスを得た:派生したオブジェクトをテンプレートに渡す
class productBase{
protected:
string name;
double amount;
double ppAmount;
public:
productBase(){}
productBase(string na, double am, double pp){
name = na;
amount = am;
ppAmount = pp;
}
string getName() const;
double getAmount() const;
double getppAmount() const;
//virtual double getCost() const = 0; // make it abstract ?
};
// Templete for shopping
template <typename shopType>
class Shop {
private:
int noi; // number of items
double totalcost;
shopType * sTptr;
public:
Shop();
Shop(shopType);
~Shop() { delete[] sTptr; }
void add(shopType &);
void setDiscount(const double);
friend ostream& operator<<(ostream&, const Shop<shopType> &);
shopType operator[](int);
};
そして、私の製品クラスの一つは、このようなものです:
class Cookie: public productBase {
private:
const double taxRate;
public:
Cookie() :taxRate(8) {}
Cookie(string nm, double am, double pp) :productBase(nm, am, pp), taxRate(8) {}
~Cookie() {}
double getCost() const;
friend ostream& operator<<(ostream &, Cookie &);
};
プログラムでは、最初に作成されたダイナミックアレイで製品を保持する必要があります次のようにi番目の新しいインスタンスを追加:
私はコンパイラエラーLNK2019未解決の外部シンボル「パブリック:__thiscallショップ::ショップ(クラスクッキー)」からのエラーを取得しています
int main() { ..... Cookie cookie1("Chocolate Chip Cookies", 10, 180); Cookie cookie2("Cake Mix Cookies", 16, 210); Shop<Cookie> cookieShop(cookie1); // << this is where I am gettin error cookieShop.add(cookie2); .....
と、この(?? 0?$ Shop @ VCookie @@@@ QAE @ VCookie @@@ Z)は、関数_mainで参照されています
私はテンプレートのコンストラクタに起因すると思っています。参照渡しとベースクラスのポインタを使用するか、まったく基本クラスを使用しないでも、私は問題がsometのように感じる何かの欠落しているパラメータまたは誤用のような他の興が、したがって、これらは私が原因を探しています私のテンプレートクラスのメソッドです:(それを把握することはできません...
template<typename shopType>
Shop<shopType>::Shop()
{
noi = 0;
totalcost = 0;
sTptr = NULL;
}
template<typename shopType>
Shop<shopType>::Shop(shopType sT) // I guess the problem is here
{
sTptr = sT;
noi++;
totalcost = sT.getCost();
}
template<typename shopType>
void Shop<shopType>::add(shopType & toAdd)
{
if (noi == 0) {
sTptr = new shopType;
sTptr = toAdd;
totalcost = toAdd.getCost();
noi++;
}
else {
shopType * ptr = new shopType[noi + 1];
for (int a = 0; a < noi; a++) {
ptr[a] = sTptr[a];
}
delete[] sTptr;
sTptr = ptr;
sTptr[noi++] = toAdd;
totalcost += toAdd.getCost();
}
}
このテンプレートの使用が混乱しています私。私はすでにそれを使用せずに済むでしょうが、私はそれをもう一度学ぶ必要があります:) どうして私は見えなくなったのでしょうか?
事前にガイダンスや援助をお寄せいただきありがとうございます。
はい、テンプレートのメソッドは、基本クラスとテンプレートクラス定義を持つshop.hファイル(#include "shop.h")を含む別のshop.cppファイルにあります。 – alios