gpt4 book ai didi

c++ - 将对象传递给模板构造函数或方法的正确方法是什么

转载 作者:行者123 更新时间:2023-11-27 23:54:04 24 4
gpt4 key购买 nike

我有一个 Shop 模板类和一个 Cookie 类,并尝试创建一个 Cookie 类型的动态数组(或其他类型,因为它是一个模板),如果需要,我会在我的主要函数中添加更多内容,例如:

template <typename shopType>
class Shop {
private:
int noi; // number of items
double totalcost;
shopType * sTptr; // for dynamic array
public:
Shop(shopType &);
void add(shopType &);
.....

int main() {
.....
Cookie cookie1("Chocolate Chip Cookies", 10, 180);
Cookie cookie2("Cake Mix Cookies", 16, 210);

Shop<Cookie> cookieShop(cookie1); // getting error here
cookieShop.add(cookie2); // and here
.....

我写的构造函数和方法如下:

template<typename shopType>
Shop<shopType>::Shop(shopType & sT)
{
sTptr = new shopType;
sTptr = sT; // not allowed, how can I fix ?
noi = 1;
totalcost = sT.getCost();
}

template<typename shopType>
void Shop<shopType>::add(shopType & toAdd)
{
if (noi == 0) {
sTptr = new shopType;
sTptr = toAdd; // not allowed, how can I fix ?
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();
}
}

我自然会遇到 C2440 '=': cannot convert from 'Cookie' to 'Cookie *' 错误...

我明白我做错了什么,但我不知道如何以正确的方式去做......

应该创建一个新的 Cookie 指针并将参数中的指针复制到它,还是其他什么?有什么建议 ?提前致谢。

最佳答案

编译器的错误信息非常清楚。您正在尝试将 shopType 分配给行中的 shopType*:

sTptr = toAdd;

除非您有非常充分的理由自己管理数组的内存,否则请使用 std::vector 将对象存储在 Shop 中。

template <typename shopType>
class Shop {
private:
// There is no need for this.
// int noi; // number of items
double totalcost;
std::vector<shopType> shopItems;

// ...
};

然后,Shop::add 可以简单地实现为(我将参数类型更改为 const 引用):

template<typename shopType>
void Shop<shopType>::add(shopType const& toAdd)
{
shopItems.push_back(toAdd);
}

关于c++ - 将对象传递给模板构造函数或方法的正确方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com