我想在模板中将默认类类型设置为默认比较类型,然后我想使用模板比较两个字符串,我确实编写了代码,但它给出了错误。代码和错误如下,
class CaseSenCmp{
public:
static int isEqual(char x, char y){ return x==y; }
};
template<typename c=CaseSenCmp>
int compare(char* str1, char* str2){
for(int i=0; i<strlen(str1) && i<strlen(str2); i++)
if(!c::isEqual(str1[i], str2[i]))
return str1[i]-str2[i];
return strlen(str1)-strlen(str2);
}
main(){
char *x = "hello", *y = "HELLO";
compare(x,y);
}
但是当我添加了这个模板原型时,它可以正常工作
template<typename c>
编译器提供此错误
error: default template arguments may not be used in function templates without -std=c++11 or -std=gnu++11|
此外,当我尝试使用此代码在main函数中进行类型转换时,它也可以正常工作
compare<CaseSenCmp>(x,y);
但我想设置默认策略
答案 0 :(得分:0)
将-std=c++11
添加到编译标志中,因为它不会编译的另一种方式。
答案 1 :(得分:0)
我还在code :: blocks中遇到过这个问题。要解决此问题,您必须启用
-std=c++11
进入你的编译器。如果是code :: blocks,你必须按照下面的说明进行操作。
设置 - &gt;编译器 - &gt;编译器标志...查找并选中&#34;让g ++遵循C ++ 11 ISO C ++语言标准&#34;的选项。如果它没有得到它,那么也要检查它上面的框以获得C ++ 0x标准。