C++模板类定义出错
C++ Template Class definition getting error
我正在学习C++模板。我创建了一个模板类来添加两个字符串但是我遇到了错误:请帮助我理解此错误。
main.cc:65:52: error: no matching function for call to TheNameHolder<std::basic_string<char> >::TheNameHolder(const char [8], const char [7])
using namespace std;
template <class T>
class TheNameHolder{
T *a, *b;
public:
TheNameHolder(T *first, T *last)
{
a= first;
b= last;
}
T getName();
};
template <class T>
T TheNameHolder<T> :: getName()
{
T returnVal;
returnVal = strcat (returnVal,a);
returnVal = strcat (returnVal, " ");
returnVal = strcat (returnVal, b);
return returnVal;
}
int main()
{
TheNameHolder <string> obj ("Hi", "");
cout << obj.getName ();
return 0;
}
什么?不。这不是模板的用途
您在模板化对象上使用strcat
(实际上,在T*
上,在指向对象的指针上
strcat
只接受char *
。因此,T
必须字符才能正常工作。如果你知道T
是char
,那么它就不是一个模板,因为你知道它是什么。(顺便说一句 - 您有另一个错误,returnval
应该T*
,并且您正在使用未初始化的(
您似乎错过了模板的整个概念 - 这没关系,因为您正在学习。
看 - 句子"我想使用模板添加两个字符串"是错误的 - 因为你没有任何未知数!你想添加 2 个字符串,你知道你的类型是什么。它不是模板。
模板将是"我想添加两个未知类型的列表"(那么你显然不能使用strcat
,也不能假设你的列表是"零分隔的",因为这仅适用于 c 样式字符串(。
你的模板参数是std::string
,所以你的构造函数
TheNameHolder(T *first, T *last)
期望两个指针std::string
.您正在向其传递 char
的常量数组(字符串文字(。在我看来,你可以用std::string
来表达一切:
template <class T>
class TheNameHolder{
T a, b;
public:
TheNameHolder(const T& first, const T& last) : a(first), b(last)
{
}
T getName() { return a + " " + b; }
};
int main()
{
TheNameHolder<std::string> obj("Hi", "");
std::cout << obj.getName();
}
请注意,这里是否需要类模板并不完全清楚。这样做的唯一优点是,您还可以使用 std::wstring
或任何其他支持从字符串文本和 +
运算符初始化的字符串类型。
如上所述,这将是使用模板的错误位置,因为您已经知道数据类型。但是,如果您实际上可能希望"添加两个未知类型的列表",则可以使用模板专用化来处理特定(在本例中为非数字(数据类型,例如字符串。您将按如下方式专门化此模板:
template <>
class TheNameHolder <std::string> {
...
};
- 在定义的函数中使用常量时出错
- 在头文件中定义变量不会出错
- TraciMobility::getExternalId 将自定义模块添加到示例中时出错Veins_Inet (Omne
- PCL 出错:体系结构x86_64 @pcl的未定义符号
- 从 ParaView 构建自定义 Qt 应用程序示例时出错
- 在f2c.h文件中定义min()max()宏时出错
- 从 Arduino 中的自定义C++库构造对象时出错
- 包含适当的标头时,实现文件中的多个定义出错
- 为什么在定义类之前声明类的对象会在友元类中给出错误,而在友元函数中不会出错
- '未定义对..'的引用;将APP_STL从gnustl_static切换到c++_shared后出错
- 使用静态变量未解析的外部符号/未定义的引用时出错
- 迭代器关系运算符出错(带单独链接和迭代器的自定义哈希表)
- 在类外部定义显式运算符 bool() 时出错
- C++ Linux 加载共享库时出错“未定义的符号:pthread_create”
- 模板化函数重载和类外定义时出错
- 链接webrtc本机时出错,因为未定义对具有std::string的方法的引用
- C2057构造函数初始化列表中的常量值定义出错
- 流定义出错
- 函数的多个定义出错
- C++模板类定义出错