模板错误代码块,c ++,代码块,错误

时间:2016-07-14 15:15:27

标签: c++

我想编译:

#include<iostream>
#include"gettype.*"
using namespace std;


int main() { 
int i;
cout << getType(i) << endl; 
unsigned int ui;
cout << getType(ui) << endl; 
char c;
cout << getType(c) << endl; 
double d;
cout << getType(d) << endl;
bool b;
cout << getType(b) << endl; 
float f;
cout << getType(f) << endl; 
}

将此作为模板:

#ifndef GETTYPE_T
#define GETTYPE_T

template <typename T>
std::string getType(T t) { return "unbekannter Typ";}
template<typename T> std::string getType(int t) { return "int";}
template<typename T> std::string getType(unsigned int t) { return "unsigned                  int";}
template<typename T> std::string getType(double t) { return "double";}
template<typename T> std::string getType(char t) { return "char";}
template<typename T> std::string getType(bool t) { return "bool";}
#endif

我在代码块中从控制台收到此错误:

||=== Build: Debug in gettype.t (compiler: GNU GCC Compiler) ===|
gettype.t.c|6|error: expected '=', ',', ';', 'asm' or '__attribute__' before     '<' token|
gettype.t.c|9|error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token|
gettype.t.c|10|error: expected '=', ',', ';', 'asm' or '__attribute__'        before '<' token|
gettype.t.c|11|error: expected '=', ',', ';', 'asm' or '__attribute__'    before '<' token|
gettype.t.c|12|error: expected '=', ',', ';', 'asm' or '__attribute__' before '<' token|
gettype.t.c|13|error: expected '=', ',', ';', 'asm' or '__attribute__'  before '<' token|
||=== Build failed: 6 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

我不知道这里有什么问题...... :-(提前thx你的时间:-) 欢呼声。

2 个答案:

答案 0 :(得分:1)

你不需要'专门化'函数的模板化版本,你只需要重载,没有template<typename T>已知类型:

std::string getType(int t) { return "int";}
std::string getType(bool t) { return "bool";}

等等。这些将使模板化版本超载。

答案 1 :(得分:0)

您已写过:

#include "gettype.*"

错误消息告诉您GCC包含一个名为gettype.t.c的文件,并尝试将其编译为C文件。

我不知道您要尝试做什么,但如果您修复了我的内容,那么它只包含gettype.t而不是gettype.*它会起作用(为什么您的标题有{{} 1}}扩展无论如何?)