我在學校和作業中學習 C ,我的任務是為這些創建 FooClass:
int main()
{
int x[] = {3, 7, 4, 1, 2, 5, 6, 9};
FooClass<int> ui(x, sizeof(x) / sizeof(x[0]));
std::string s[] = {"Car", "Bike", "Bus"};
FooClass<std::string> us(s, sizeof(s) / sizeof(s[0]));
}
然后修改代碼,以便它可以寫出串列的大小和串列的元素。
我設法撰寫了 size 函式的代碼。但我在元素部分苦苦掙扎,得到一個
error: missing template arguments before '.' token.
到目前為止,這是我的代碼:
template <typename T>
class FooClass
{
private:
T *items;
int itemsSize;
bool mergeOn;
public:
FooClass(T items[], int itemsSize)
{
items = new T[itemsSize];
this->itemsSize = itemsSize;
};
int getItemsSize()
{
return this->itemsSize;
}
void print(const FooClass <T>& items)
{
for (int i=0; i< items.getItemsSize(); i)
{
std::cout<<items[i]<<std::endl;
}
}
};
int main()
{
int x[] = {3, 7, 4, 1, 2, 5, 6, 9};
FooClass<int> ui(x, sizeof(x) / sizeof(x[0]));
std::string s[] = {"Car", "Bike", "Bus"};
FooClass<std::string> us(s, sizeof(s) / sizeof(s[0]));
std::cout<<ui.getItemsSize()<<std::endl;
FooClass.print(us); //this is where I get the compilation error.
}
我應該如何實作列印功能?
uj5u.com熱心網友回復:
您的建構式不會將源元素復制到它分配的陣列中。而且,您需要一個解構式來在使用完畢后釋放分配的陣列。
而且,您的print()方法不是static,因此它應該起作用this而不是將FooClass物件作為引數。
試試這個:
template <typename T>
class FooClass
{
private:
T *m_items;
int m_itemsSize;
bool m_mergeOn;
public:
FooClass(T items[], int itemsSize)
{
m_items = new T[itemsSize];
for (int i = 0; i < itemsSize; i) {
m_items[i] = items[i];
}
m_itemsSize = itemsSize;
};
~FooClass()
{
delete[] m_items;
}
int getItemsSize() const
{
return m_itemsSize;
}
void print() const
{
for (int i = 0; i < m_ItemsSize; i)
{
std::cout << m_items[i] << std::endl;
}
}
};
int main()
{
int x[] = {3, 7, 4, 1, 2, 5, 6, 9};
FooClass<int> ui(x, sizeof(x) / sizeof(x[0]));
std::cout << ui.getItemsSize() << std::endl;
ui.print();
std::string s[] = {"Car", "Bike", "Bus"};
FooClass<std::string> us(s, sizeof(s) / sizeof(s[0]));
std::cout << us.getItemsSize() << std::endl;
us.print();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/477234.html
