尝试使用示例输入运行我的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
答案 0 :(得分:3)
您的模板包含;
的声明,但从未在任何地方定义/实现。
您需要将定义添加到相同(或另一个)头文件中。为了进行验证,将{}
替换为Pairwise(K,V) {}
,链接器错误应该消失了:@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
private List<Team> teams;
(它不起作用,但可以编译并很好地链接)。