我正在为OOP开发一个“糖果店”分配项目,C ++和编译器再次抱怨我的代码:)我在论坛中找到了一个类似的命名主题,但它指出了一些其他问题而不是我......所以,我得到了一个基类来推导一些产品(糖果,饼干,对比)和购物类的模板,如下所示:
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 &);
};
在程序中,我需要将我的产品保存在动态数组中,该数组首先创建并通过添加新实例进行扩展,如下所示:
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);
.....
这是我从编译器中得到错误的地方
错误LNK2019未解析的外部符号“public:__thiscall Shop :: Shop(class Cookie)”(?? 0?$ Shop @ VCookie @@@@ QAE @ VCookie @@@ Z)在函数_main <中引用/ em>
我认为它是由我的模板的构造函数引起的,并尝试通过一些例子来修复它,例如通过引用传递和使用基类指针甚至根本不使用基类,但我觉得这个问题是其他东西,如缺少参数或错误的东西,但无法弄清楚:(所以这些是我的模板类的方法,我正在寻找原因......
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();
}
}
这个模板用法令我困惑;我会在没有使用它的情况下完成,但另一方面我需要学习它:) 那么我失踪的可能是什么呢?
提前感谢您的任何指导或帮助。