在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++模板工作的方式:模板参数替换只在实际使用模板时发生,整个模板定义必须在那时可见。另一种方法是说,你不能编译和链接到<代码>模板函数——只能编译一个模板函数。一旦被实例化为<代码>模板功能>代码>或任何内容。为此,您不能将模板函数定义放在
这是C++模板工作的方式:模板参数替换只在实际使用模板时发生,整个模板定义必须在那时可见。另一种方法是说,你不能编译和链接到<代码>模板函数——只能编译一个模板函数。一旦它被实例化为
templateFunction
或其他任何类型的函数,就需要重新编译。因此,您不能将模板函数定义放在.cpp
文件中,而必须将它们放在.h
文件中。编译器需要访问整个模板定义(而不仅仅是签名)为了为模板的每个实例化生成代码,您需要将函数的定义移动到头中
这称为。也可读取。编译器需要访问整个模板定义(而不仅仅是签名),以便为模板的每个实例化生成代码,因此需要将函数的定义移动到标头
这称为。也可以读取。如果您的代码在不同的cpp文件上使用模板,则模板应放在头文件上。如果您的代码在不同的cpp文件上使用模板,则模板应放在头文件上。通常,源文件中不能有模板定义;它们应放在hea中这样编译器就可以看到它们
这里反复出现,所以我不想再给出完整的解释,我建议您从C++ FAQ:./P>中阅读。
[顺便提一下,为什么要返回指向指针的指针?指针应该足够了…][/p>通常,源文件中不能有模板定义;它们应该在头文件中,以便编译器可以看到它们
这里反复出现,所以我不想再给出完整的解释,我建议您从C++ FAQ:./P>中阅读。 [顺便提一下,为什么要将指针返回到指针?指针应该足够了…]