我有以下C ++代码,它给出了以下错误:
#include <iostream>
using namespace std;
int main()
{
MyPrinter(100);
MyPrinter(100.90);
getchar();
return 0;
}
template <class T>
void MyPrinter(T arr)
{
cout<<"Value is: " + arr;
}
我在这里缺少什么?
答案 0 :(得分:4)
您在声明或定义标识符之前尝试使用标识符。
在使用它之前定义它将起作用:
#include <iostream>
using namespace std;
template <class T>
void MyPrinter(T arr)
{
cout<<"Value is: " + arr;
}
int main()
{
MyPrinter(100);
MyPrinter(100.90);
getchar();
return 0;
}
或者,您可以通过将以下代码放在MyPrinter
之前声明 main
(并保留其余代码):
template <class T>
void MyPrinter(T arr);
答案 1 :(得分:2)
模板定义应在首次使用之前放置。您需要将模板定义放在main
上方
#include <iostream>
using namespace std;
//Template Definition here
template <class T>
void MyPrinter(T arr)
{
cout<<"Value is: " + arr;
}
int main()
{
MyPrinter(100);
MyPrinter(100.90);
getchar();
return 0;
}
另一种方法是使用forward declaration:
#include <iostream>
using namespace std;
//Forward Declaration
template <class T> void MyPrinter(T arr);
int main()
{
MyPrinter(100);
MyPrinter(100.90);
getchar();
return 0;
}
template <class T>
void MyPrinter(T arr)
{
cout<<"Value is: " + arr;
}
答案 2 :(得分:2)
MyPrinter
在您使用它时不可见,因为它在源代码中声明并定义。您可以通过在MyPrinter
之前移动main
的定义来使其工作:
template <class T>
void MyPrinter(T arr)
{
cout<<"Value is: " + arr;
}
int main()
{
MyPrinter(100);
MyPrinter(100.90);
getchar();
return 0;
}
或通过向前声明MyPrinter
:
template <class T>
void MyPrinter(T arr);
int main()
{
MyPrinter(100);
MyPrinter(100.90);
getchar();
return 0;
}
template <class T>
void MyPrinter(T arr)
{
cout<<"Value is: " + arr;
}