在C+中生成泛型函数+; 我尝试在C++中生成一个泛型函数,创建一个依赖于使用的数组(当调用它时),如int或char数组。

在C+中生成泛型函数+; 我尝试在C++中生成一个泛型函数,创建一个依赖于使用的数组(当调用它时),如int或char数组。,c++,C++,这是我的头文件中的代码: template<class T> T** makeArray(...); 模板 T**makeArray(…); 这在.cpp文件中: template<class T> T** ClassA::makeArray(...){ //... } 模板 T**ClassA::makeArray(…){ //... } 这就是我在主文件中对它的称呼: char** charArr = cg.makeArray<char>(

这是我的头文件中的代码:

template<class T>
T** makeArray(...);
模板
T**makeArray(…);
这在.cpp文件中:

template<class T>
T** ClassA::makeArray(...){
    //...
}
模板
T**ClassA::makeArray(…){
//...
}
这就是我在主文件中对它的称呼:

char** charArr = cg.makeArray<char>(...);
//...
int** intArr = cg.makeArray<int>(...);
char**charArr=cg.makeArray(…);
//...
int**intArr=cg.makeArray(…);
但在编译时,我会遇到以下错误:

undefined reference to `char** ClassA::makeArray<char>( ...
undefined reference to `int** ClassA::makeArray<int>( ...
对'char**ClassA::makeArray(。。。
对`int**ClassA::makeArray(。。。

错误是什么意思?我如何修复它?

< p>你必须在标题中包含C++模板函数的整个体。


这是C++模板工作的方式:模板参数替换只在实际使用模板时发生,整个模板定义必须在那时可见。另一种方法是说,你不能编译和链接到<代码>模板函数——只能编译一个模板函数。一旦被实例化为<代码>模板功能>代码>或任何内容。为此,您不能将模板函数定义放在.CPP文件中,而必须将其放入H./Cux>文件中。

< P>必须在标题中包含C++模板函数的整个体。< /P>

这是C++模板工作的方式:模板参数替换只在实际使用模板时发生,整个模板定义必须在那时可见。另一种方法是说,你不能编译和链接到<代码>模板函数——只能编译一个模板函数。一旦它被实例化为

templateFunction
或其他任何类型的函数,就需要重新编译。因此,您不能将模板函数定义放在
.cpp
文件中,而必须将它们放在
.h
文件中。

编译器需要访问整个模板定义(而不仅仅是签名)为了为模板的每个实例化生成代码,您需要将函数的定义移动到头中


这称为。也可读取。编译器需要访问整个模板定义(而不仅仅是签名),以便为模板的每个实例化生成代码,因此需要将函数的定义移动到标头


这称为。也可以读取。

如果您的代码在不同的cpp文件上使用模板,则模板应放在头文件上。

如果您的代码在不同的cpp文件上使用模板,则模板应放在头文件上。

通常,源文件中不能有模板定义;它们应放在hea中这样编译器就可以看到它们

这里反复出现,所以我不想再给出完整的解释,我建议您从C++ FAQ:./P>中阅读。


[顺便提一下,为什么要返回指向指针的指针?指针应该足够了…][/p>通常,源文件中不能有模板定义;它们应该在头文件中,以便编译器可以看到它们

这里反复出现,所以我不想再给出完整的解释,我建议您从C++ FAQ:./P>中阅读。 [顺便提一下,为什么要将指针返回到指针?指针应该足够了…]