-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の前の定義を移動することで、それを機能させることができます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 に答える