对模板类成员的未定义引用

时间:2018-11-25 03:28:42

标签: c++

尝试使用示例输入运行我的Pairwise类后,得到了未定义的引用。我的Pairwise类是在头文件中制作的,我制作了一个主要函数,将键和值作为字符串传入,以根据需要设置其格式。

我的预期输出:

key:value

我的头文件:

#pragma once

#include<iostream>
using std::ostream; using std::cout; using std::endl;
#include<string>
using std::string;
#include<sstream>
using std::ostringstream;

template<typename K, typename V> 
   struct Pairwise { 
   K first; 
   V second; 
   Pairwise() = default; 
   Pairwise(K,V); 
   friend ostream& operator<<(ostream &out, const Pairwise &p){
        out << p.first << ":" << p.second;
        return out;
    }
   };

我的主要功能:

#include "file.h"

#include<iostream>
using std::cout; using std::endl;
#include<sstream>
using std::ostringstream;
#include<string>
using std::string;

int main()
{
    Pairwise<string,string> p("key", "value");

    ostringstream oss;
    oss<<p;
    string example = oss.str();
    cout << example << endl;
}

我得到的错误:

/tmp/ccfv4iaY.o: In function `main':
main_program.cpp:(.text+0x8b): undefined reference to `Pairwise<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Pairwise(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: error: ld returned 1 exit status

1 个答案:

答案 0 :(得分:3)

您的模板包含;的声明,但从未在任何地方定义/实现。

您需要将定义添加到相同(或另一个)头文件中。为了进行验证,将{}替换为Pairwise(K,V) {},链接器错误应该消失了:@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = {CascadeType.ALL}) private List<Team> teams; (它不起作用,但可以编译并很好地链接)。