gpt4 book ai didi

C++ 模板类定义出错

转载 作者:太空宇宙 更新时间:2023-11-04 15:21:35 25 4
gpt4 key购买 nike

我正在学习 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 必须是 char 才能工作。如果您知道 Tchar,那么它就不是您所知道的模板。 (顺便说一句 - 你有另一个错误,returnval 应该是 T*,而你使用的是未初始化的)

您似乎错过了模板的整个概念 - 这没关系,因为您正在学习。

看 - “我想使用模板添加两个字符串”这句话是错误的 - 因为你没有任何未知数!你想添加 2 个字符串,你知道你的类型是什么。它不是模板。

模板将是“我想添加两个未知类型的列表”(那么你显然不能使用 strcat ,你也不能假设你的列表是“零分隔的”,因为那只是对于 c 风格的字符串是正确的)。

关于C++ 模板类定义出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17818853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com