我想编译:
#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你的时间:-) 欢呼声。
答案 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}}扩展无论如何?)