类型为“的参数”;常量字符*”;与类型为“的参数不兼容”;char"; 我试图用指针和模板在C++中实现一个动态数组,这样我就可以接受所有类型。使用int时代码运行良好,但使用char会产生错误。我在网上尝试了其他的SO问题,但对我的场景一无所获。 代码:
编辑:类型为“的参数”;常量字符*”;与类型为“的参数不兼容”;char"; 我试图用指针和模板在C++中实现一个动态数组,这样我就可以接受所有类型。使用int时代码运行良好,但使用char会产生错误。我在网上尝试了其他的SO问题,但对我的场景一无所获。 代码:,c++,arrays,pointers,dynamic-arrays,C++,Arrays,Pointers,Dynamic Arrays,编辑: 我试着使用dynamicIntArray myarray这次它给出了分段错误。myarray.insert(“A”).“A”是一个常量字符[],但insert需要字符。您可以将其更改为myarray.insert('A')对于初学者,代码有几个bug 例如,函数size返回无效值 template <typename T> int dynamicIntArray<T>::size(void) { return capacityIndex + 1; } 但函数返
我试着使用
dynamicIntArray myarray代码>这次它给出了分段错误。myarray.insert(“A”)
.“A”
是一个常量字符[]
,但insert需要字符
。您可以将其更改为myarray.insert('A')
对于初学者,代码有几个bug
例如,函数size
返回无效值
template <typename T>
int dynamicIntArray<T>::size(void)
{
return capacityIndex + 1;
}
但函数返回5(capacityIndex+1
)
在函数insert
中,可以访问分配数组之外的内存。例如,当filledIndex为euql tocapacityIndex-1
时,则在该if语句中
if (filledIndex < capacityIndex)
{
arrPtr[++filledIndex] = n;
return true;
}
数据成员capacityIndex
增加
capacityIndex *= 2;
但是,您正在for循环中使用此新值
for (int i = 0; i < capacityIndex; i++)
{
newarrPtr[i] = arrPtr[i];
}
您正在使用字符串文本。例如,字符串literal“A”
的类型为常量字符[2]
,在参数表达式中,该类型转换为常量字符*
您试图将此指针分配给char
类型的对象,即分配给元素类型为char
的动态数组的对象
你应该这样写
myarray.insert( 'A' );
这不是字符串文字,您必须使用具有类型
char
-类型模板参数类型的字符文字。谢谢,这真的很有帮助。你能看到我问题末尾的编辑吗?如果你能解决这个问题,那么我可以接受这个答案。这是一个不同的问题,应该得到不同的帖子,那么;)@古龙先生,请每个问题回答一个问题。如果你有后续问题,你可以问一个新问题。这个答案确实回答了你原来的问题。
capacityIndex *= 2;
T *newarrPtr = new T[capacityIndex]();
// Copy old array
for (int i = 0; i < capacityIndex; i++)
{
newarrPtr[i] = arrPtr[i];
}
capacityIndex *= 2;
for (int i = 0; i < capacityIndex; i++)
{
newarrPtr[i] = arrPtr[i];
}
myarray.insert("A");
myarray.insert( 'A' );