我正在嘗試創建我自己的陣列類(類似于 std::vector)只是為了好玩,但有一些問題...... Array 類代碼本身可以作業并成功編譯,但如果我嘗試實體化 Array 物件,則會引發錯誤班級。
#include<iostream>
template<typename type, int size>
class Array
{
private:
type _mArray[size] = new type[size];
public:
int Access(int index)
{
return _mArray[index];
}
int Len()
{
return size;
}
void Insert(int index, type val)
{
_mArray[index] = val;
}
~Array()
{
delete[] _mArray;
}
};//All code above compiles successfully
int main()
{
Array<int, 2> name; //this line throws an error
}
我對 C 有點陌生,所以如果有人能解釋一下,那么我將非常感激......
順便說一句,這里是錯誤 陣列初始值設定項必須是初始值設定項串列
uj5u.com熱心網友回復:
type _mArray[size] = new type[size];
模板實體化為:typeis int,并且size是 2。因此,這變為:
int _mArray[2] = new int[2];
這顯然沒有多大意義。如果你把這個逐字放在你main()的 C 編譯器中,你也會收到同樣的抱怨。
很明顯,這里的意圖很簡單:
type _mArray[size];
沒有別的。
PS 現在,讓我們回過頭來重讀受苦的 C 編譯器在這里努力傳達的內容:
陣列初始化器必須是初始化器串列
int _mArray[2]顯然,是一個陣列。=后面有一個卡住。好的,這一定是陣列初始化。你如何在 C 中初始化一個陣列?當然,使用帶括號的初始化串列。這將是這樣的,例如:
int _mArray[2]={1, 2};
C 編譯器沒有看到這種情況,并試圖告訴你。
uj5u.com熱心網友回復:
#include<iostream>
template<typename type, int size>
class Array
{
private:
type * _mArray ;
public:
int Access(int index)
{
return _mArray[index];
}
int Len()
{
return size;
}
Array()
{
_mArray = new type[size];
}
~Array()
{
delete[] _mArray;
}
int& operator[](int index){
return _mArray[index];
}
};//All code above compiles successfully
int main()
{
Array<int, 2> name;
name[0] = 1024;
name[1] = 100;
for(int i= 0; i< name.Len(); i )
{
std::cout<< name[i] << std::endl;
}
}
uj5u.com熱心網友回復:
您可以使用以下最小更改來構建它:
@@ -4,7 4,7 @@ template<typename type, int size>
class Array
{
private:
- type _mArray[size] = new type[size];
type* _mArray;
public:
int Access(int index)
{
@@ -18,6 18,10 @@ class Array
{
_mArray[index] = val;
}
Array()
{
_mArray = new type[size];
}
~Array()
{
delete[] _mArray;
基本上,您應該在建構式中初始化陣列,并將指向它的指標存盤為類成員。以下代碼構建:
#include<iostream>
template<typename type, int size>
class Array
{
private:
type* _mArray;
public:
int Access(int index)
{
return _mArray[index];
}
int Len()
{
return size;
}
void Insert(int index, type val)
{
_mArray[index] = val;
}
Array()
{
_mArray = new type[size];
}
~Array()
{
delete[] _mArray;
}
};//All code above compiles successfully
int main()
{
Array<int, 2> name; //this line throws an error
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395626.html
下一篇:在js中映射串列的更好方法
