c ++ 11重载<< (流插入)运算符

时间:2015-12-22 22:24:59

标签: c++ templates c++11 operator-overloading cout

我正在尝试重载<<运算符,以便我可以使用它cout。我没有任何课程,代码分为test.h/test.cppmain.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

发生了什么事?

0 个答案:

没有答案