类型为“的参数”;常量字符*”;与类型为“的参数不兼容”;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 to
capacityIndex-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' );