我有一个模板类,我想重载输出操作符<<,但我的代码不起作用,我不知道为什么......我不知道如何做同样的事情,但是输入操作员......你能帮助我吗?
这是我的代码:
#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
答案 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