从模板链接错误

时间:2016-12-01 18:06:16

标签: c++ templates metaprogramming

来自以下代码

template<int N>
struct fibo{
    static const int value = fibo<N-1>::value + fibo<N-2>::value;
};

template<>
struct fibo<1>{
    static const int value = 1;
};

template<>
struct fibo<0>{
    static const int value = 1;
};

constexpr int count_which_fibo(int which, int max, int n_1, int n_2){
    return max<n_1 + n_2 ? which : count_which_fibo(which + 1, max, n_1 + n_2,n_1);
}

template<int first, int... args>
struct container_creator{
    typedef typename container_creator<first-1,first, args...>::type type;

};

template<int... args>
struct container_creator<0,args...>{
    typedef container_creator<0,args...> type;

    static auto create(){
        return std::make_tuple(fibo<args>::value...);
    }
 };

int main(void){
    auto var = container_creator<5>::type::create();
}

我收到以下链接错误: /tmp/ccV91mii.o:在函数container_creator<0, 1, 2, 3, 4, 5>::create()': fibo.cpp:(.text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv[_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv]+0x12): undefined reference to fibo&lt; 5&gt; :: value&#39; fibo.cpp :(。text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv [_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv] + 0x18):对fibo<4>::value' fibo.cpp:(.text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv[_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv]+0x1d): undefined reference to fibo&lt; 3&gt; :: value&#39;的未定义引用 fibo.cpp :(。text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv [_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv] + 0x22):对fibo<2>::value' fibo.cpp:(.text._ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv[_ZN17container_creatorILi0EJLi1ELi2ELi3ELi4ELi5EEE6createEv]+0x27): undefined reference to fibo&lt; 1&gt; :: value&#39;的未定义引用 collect2:错误:ld返回1退出状态 你能告诉我为什么吗?它看起来像静态方法创建是一个问题。

0 个答案:

没有答案