我有这样的功能:
#include <iostream>
using namespace std;
// function to generate and retrun random numbers.
template<typename T>
T * getRandom( ) {
static T r[10];
for (int i = 0; i < 10; ++i) {
r[i] = 111;
cout << r[i] << endl;
}
return r;
}
// main function to call above defined function.
int main () {
// a pointer to an int.
int *p;
p = getRandom();
for ( int i = 0; i < 10; i++ ) {
cout << "*(p + " << i << ") : ";
cout << *(p + i) << endl;
}
return 0;
}
但是,当我使用g ++ 5.4和c ++ 11编译代码时。编译器给了我这个错误:
main.cpp: In function 'int main()':
main.cpp:25:18: error: no matching function for call to 'getRandom()'
p = getRandom();
^
main.cpp:25:18: note: candidate is:
main.cpp:8:5: note: template<class T> T* getRandom()
T * getRandom( ) {
^
main.cpp:8:5: note: template argument deduction/substitution failed:
main.cpp:25:18: note: couldn't deduce template parameter 'T'
p = getRandom();
^
似乎C ++不支持返回指向模板的指针?
有人可以告诉我我的玩具示例有什么问题,提前谢谢!!
答案 0 :(得分:6)
模板参数不能是返回类型的deduced,而只能来自函数参数。因此,您必须明确指定模板参数。 e.g。
p = getRandom<int>();
// ~~~~~