我正在尝试重载<<
运算符,以便我可以使用它cout
。我没有任何课程,代码分为test.h/test.cpp
和main.cpp
个文件 -
首先test.h
:
#ifndef _TEST_H_
#define _TEST_H_
#include <ostream>
#include <vector>
using std::ostream ; using std::vector ;
template <typename T>
ostream& operator<< (ostream &os, const vector<T> &vec);
#endif
现在test.cpp
:
#include <vector>
#include <iostream>
#include "test.h"
using std::ostream ; using std::cout ; using std::endl ;
using std::vector ;
template <typename T>
ostream& operator<< (ostream &os, const vector<T> &vec) {
if(vec.size() > 0) {
os << "[ " << vec[0] << ", " ;
for(int i = 1 ; i < vec.size()-1 ; i++) os << vec[i] << ", ";
os << vec[vec.size()-1] << " ]" ;
}
else
os << "" ;
return os ;
}
main.cpp
看起来像这样 -
#include <vector>
#include <string>
#include <iostream>
#include "test.h"
using std::cout ; using std::endl ;
using std::vector ; using std::string ; using std::to_string ;
int main()
{
vector<string> vec ;
for(int i = 0 ; i < 10 ; i++)
vec.push_back(to_string(i));
cout << vec << endl ; // printing the vector here
return 0;
}
我正在编译代码 -
g++ -g -Wall -std=c++11 *.cpp -I. -o test
代码非常简单,没什么复杂的,但我收到此链接器错误 -
/tmp/ccczf9Rq.o: In function `main':
/tmp/mdp/main.cpp:18: undefined reference to `std::ostream& operator<< <std::string>(std::ostream&, std::vector<std::string, std::allocator<std::string> > const&)'
collect2: error: ld returned 1 exit status
发生了什么事?