G ++:从模板调用函数:未定义的符号

时间:2012-10-23 16:02:11

标签: templates g++

我无法使用Comeau和G ++编译器在C ++中编译小代码。我认为我的代码存在问题。这是:

template < typename T > void f(T t) { g(t); }
void g(int){}
int main() {
    int a = 0;
    f(a);
    return 0;
}

编译器找不到函数g()。 但是如果我使用用户定义的类型(不是int),则编译为OK:

template < typename T > void f(T t) { g(t); }
struct A {};
void g(A a) {}
int main() {
    A a;
    f(a);
    return 0;
}

任何人都可以帮我用int(double,char等)编译这段代码吗?

1 个答案:

答案 0 :(得分:0)

可能没有关系,但在VC ++ 2012中,这为int a行中的a提供了未初始化的变量警告。第二个示例(由于您在void g(A a)之后缺少大括号而编译)会创建一个带有默认构造函数的结构,因此不会发生错误。尝试在顶部代码中初始化int变量,看看是否仍然出现错误。