我有一个关于c ++中泛型类的(简单)问题。我有一些在C#中使用它们的知识,但现在我尝试在c ++中实现一个,我有一个错误,我不知道我应该做什么让程序工作。这不是我需要做的功课,也不是我自己的研究。
代码:
#include <iostream>
using namespace std;
template<class A>class genericClass
{
A ceva;
char* clasa;
public:
void afisClasa(void);
genericClass(A);
~genericClass(void);
};
template<class A>genericClass<A>::afisClasa()
{
cout << clasa;
}
template<class A>genericClass<A>::genericClass(A myType)
{
myType = ceva;
if((int)ceva == ceva)
{
clasa = "INT";
goto label;
}
if((float)ceva == ceva)
{
clasa = "FLOAT";
goto label;
}
if((double)ceva == ceva)
{
clasa = "DOUBLE";
goto label;
}
label:
//cout << clasa;
}
template<class A>genericClass<A>::~genericClass(void)
{
}
int main()
{
int n;
genericClass<float> A(6.2);
cin >> n;
}
这个程序应该采用通用数字并说明它是什么类型,但是当我实现afisClass方法时,我得到一个错误:
C4430: Missing type specifier - int assumed. Note c++ does not support default-in
答案 0 :(得分:6)
你必须说:
template <class A> void genericClass<A>::afisClasa() { cout << clasa; }
// ^^^^
函数定义必须与前一个声明具有完全相同的形式。
答案 1 :(得分:0)
这是您可能想要进行模板专业化的情况。 C ++允许您基于其实例化类型自定义模板的行为。例如
template <typename T>
void PrintMyType(T& arg) {
cout << "Unknown type" << endl;
}
template <>
void PrintMyType<int>(int& arg) {
cout << "int" << endl;
}
template <>
void PrintMyType<float>(float& arg) {
cout << "float" << endl;
}
PrintMyType(42); // prints "int"
PrintMyType("hello"); // prints "Unknown type"