C++ 如何使用模板将字符作为类内函数的参数传递
我试图将一个字符数组传递到这个类(BaseStack)中的一个函数(push):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
模板
类基栈
{
无效推送(常数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);