3

我有以下代码,我只是为了练习函数模板而构思的。

#include <iostream>

template <typename T>
T fun( const T &t ) { return t; }

struct A {
    int dataf;
    A( int a ) : dataf(a) { std::cout << "birth\n"; }
    friend A fun( const A & );
};

int main(){
    A a( 5 );
    fun( a );   
    return 0;
}

虽然我收到以下错误:

code.cc:(.text+0x32): undefined reference to `fun(A const&)'
collect2: ld returned 1 exit status

我很好理解类模板,但我仍然对函数模板感到困惑。

4

2 回答 2

6

将朋友声明更改为:

template <class T> friend T fun( const T & );

或者:

friend A fun<A>( const A & );
于 2013-01-21T15:13:41.100 回答
0

在重载解决期间,普通函数优先于函数模板。内部自由友元函数的声明与Ain 中的调用完全匹配main。声明是编译器需要的全部,所以它编译得很好,但是链接器找不到定义,因为你从来没有定义过它。

于 2013-01-21T15:19:10.967 回答