【发布时间】:2022-01-18 04:29:00
【问题描述】:
我正在尝试使用std::string 作为typename T 和const char 创建一个模板:
test.cpp
template <typename T, const char N>
class MyClass
{
public:
static const char Get()
{
return N;
}
};
template <>
class MyClass<std::string, const char N>
{
public:
static const char Get()
{
return n;
}
};
测试.h
int main(){
const char c = 's';
std:: cout << MyClass<std::string, c>::Get() << std::endl;
};
但我收到以下错误:
template argument 2 is invalid
class MyClass<std::string, const char N>
【问题讨论】:
-
为什么
main()在.h文件中,而类在.cpp文件中?您的文件扩展名向后。无论如何,如果您将字符文字直接传递给模板,您是否会遇到相同的错误,例如:MyClass<std::string, 's'>::Get()?另外,您对Get()的专业化正在返回未定义的n,您的意思是不是N? -
由于您只是部分专门化了类模板,它应该是
template<const char N> class MyClass<std::string, N> -
我建议你把你的问题改成
Why do I get this error "template argument 2 is invalid" in c++? When trying to create a template with std::string我这边的诚实问题,你的问题中的“”是什么意思?我不熟悉那个符号。 -
请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。