C++ 如何使用模板将字符作为类内函数的参数传递

C++ 如何使用模板将字符作为类内函数的参数传递,c++,arrays,templates,C++,Arrays,Templates,我试图将一个字符数组传递到这个类(BaseStack)中的一个函数(push): 模板 类基栈 { 无效推送(常数T和项目){ //忽略 } } 我尝试的是: char finalstring[L]; for(int i = 0 ; i < 5; i++) finalstring[i] = 'x'; BaseStack<char> c; c.push(finalstring); charfinalstring[L]; 对于(int i=0;i

我试图将一个字符数组传递到这个类(BaseStack)中的一个函数(push):

模板
类基栈
{
无效推送(常数T和项目){
//忽略
}
}
我尝试的是:

char finalstring[L];
for(int i = 0 ; i < 5; i++) 
  finalstring[i] = 'x';

BaseStack<char> c;
c.push(finalstring);
charfinalstring[L];
对于(int i=0;i<5;i++)
最后一环[i]=“x”;
基态堆栈c;
c、 推动(最后一环);
但是我的编译器说我正在做一个无效的转换

 BaseStack<char> c;
这就是发生的情况,因为模板参数是
char
T
是char,由于模板中的参数是
void push(const T&item)
,因此这就是您得到的结果

 c.push(finalstring);
finalstring
是一个
char
数组,它衰减为
char*
。这试图将
char*
传递给一个类方法,该类方法采用(
const
引用a)
char
。C++中不允许这样做,这就是编译错误的原因。


这里不清楚您的意图是什么,模板参数应该是
常量T*
,还是只需要传递
finalstring
的第一个字符。执行这两种操作都可以解决这个特定的编译错误。

最后一个字符串的类型不是
char
,它的
char[L]
(在许多情况下会衰减为
char*
),因为它与
char
不同,所以您会得到一个编译错误。谢谢!通过仅传递finalstring的第一个字符,这是否意味着我将以字符或数组第一个元素的引用的形式传递它?根据定义,您将传递数组中第一个字符的引用。由于函数将其作为
const
对象的引用接收,因此
push()
将无法修改它。
class BaseStack
{
  void push(const char &item){
     //Ignore
    }
 }
 c.push(finalstring);