使用模板c ++的输出流不起作用

时间:2016-09-27 21:31:10

标签: c++

我有一个模板类,我想重载输出操作符<<,但我的代码不起作用,我不知道为什么......我不知道如何做同样的事情,但是输入操作员......你能帮助我吗?

这是我的代码:

#include <iostream>

template<class TypeData, int S>
class TD{
  private:
      int size;
      int augmentation;
      int capacity;

      TypeData * array;

      void changeCapacity();

  public:
    TD();

    TD(const TD<TypeData,S> & array);

    TypeData & operator [](int position) const;

    void addElement(TypeData element);

    friend std::ostream & operator << (std::ostream & output, const TD<TypeData, S> & array);

    ~TD();
};

template<class TypeData, int S>
TD<TypeData, S>::TD(): 
size(0), augmentation(S), capacity(S){
    this->array = new TypeData[S];
}

template<class TypeData, int S>
TD<TypeData, S>::TD(const TD<TypeData,S> & array): size (array.size),
augmentation(array.augmentation), capacity(array.capacity){
    this->array = new TypeData[array.capacity];

    for (int i = 0; i < array.size; i++){
        this->array[i] = array[i];
    }
}

template<class TypeData, int S>
TypeData& TD<TypeData, S>::operator [](int position) const{
    if (position > this->size){
            return this->array[0];
    }

    return this->array[position];
}

template<class TypeData, int S>
void TD<TypeData, S>::addElement(TypeData element){
    if (this->capacity <= this->size){
        TypeData * ptTmp = new TypeData[this->capacity];

        for (int i = 0; i < this->size; i++){
            ptTmp[i] = this->array[i];
        }

        delete this->array;

        this->capacity += this->augmentation;
        this->array = new TypeData[this->capacity];

        for (int i = 0; i < this->size; i++){
            this->array[i] = ptTmp[i];
        }

        delete[] ptTmp;
    }

    this->array[size] = element;
    size++;
}

template<class TypeData, int S>
std::ostream & operator << (std::ostream & output, const TD<TypeData, S> & array){
    for (int i = 0; i < array.size; i++){
        output << array[i] << " - ";
    }

    return output;
}

template<class TypeData, int S>
TD<TypeData, S>::~TD(){
    delete [] this->array;
}

这里主要是:

int main(){

   TD<int,20> t;
   t.addElement(5);
   t.addElement(10);

   std::cout << t << std::endl;

   return 0;
}

我有这个错误:

Undefined symbols for architecture x86_64:
"operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&,  TD<int, 20> const&)", referenced from:
      _main in test9-8bd618.o
ld: symbol(s) not found for architecture x86_64

1 个答案:

答案 0 :(得分:1)

以下是将for($i = 9000; $i < 11000; $i++) { echo notation($i), "\r\n<br>"; } // Round and abbreviate an integer function notation($int, $precision=0.01) { // We cannot shorten small numbers if(is_int($int) && $int >= 1000) { $best = $int; // For each decimal place $l = strlen($int); for($i = 3; $i <= $l - 1; $i++) { // Round to the deciaml place $newInt = round($int, -$i); // Check precision $ratio = $int / $newInt; if($ratio < (1 - $precision) || $ratio > (1 + $precision)) { break; } // Save the best option $best = $newInt; } // Count and remove trailing zeros $l = strlen($best); $best = rtrim($best, '0'); $i = $l - strlen($best); // Check that we can actually shorten the int if ($i >= 3) { // Add scientific Notation return $best . 'e' . $i; } } return $int; } 函数声明为类operator<<的一种方法。

friend