在此C ++代码中找不到标识符

时间:2013-02-19 17:46:26

标签: c++

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

enter image description here

我在这里缺少什么?

3 个答案:

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