-1

我有以下 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;
}

在此处输入图像描述

我在这里想念什么?

4

3 回答 3

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;
}

或者,您可以通过将以下代码放在前面来声明 (并将其余代码保持原样):MyPrintermain

template <class T>
void MyPrinter(T arr);
于 2013-02-19T17:48:40.577 回答
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;
}

另一种方法是使用前向声明

#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;
}
于 2013-02-19T17:48:50.763 回答
2

MyPrinter在您使用它时不可见,因为它是在源代码中声明和定义的。MyPrinter您可以通过移动before的定义来使其工作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;
}
于 2013-02-19T17:48:58.393 回答