во первых оператор << перегружается внешне, если-бы он перегружался внутренне, надо было бы писать somestring<<cout; (у тебя получается что ему передается ТРИ параметра, два тобой явно указаны, а третий - string*, котрый this.
кстати, судя по реализации, тебе нао перегружать >> не?
#include <iostream>
#include <cstdlib>
char* v;
class string
{
private:
char* data;
public:
string(char* value_)
{
int b = 0;
char value__ = ' ';
while(value__ != 0)
value__ = value_[b++];
this->data = (char*)realloc(this->data, b);
for(int c = 0; c < b; ++c)
this->data[c] = value_[c];
}
void echo()
{
std::cout << this->data << std::endl;
}
friend std::ostream& operator<<(std::ostream& stream,string& obj);
};
std::ostream& operator<<(std::ostream& stream,string& obj)
{
stream << obj.data;
return stream;
}
string str = "123456789";
int main()
{
std::cout << str << std::endl;;
std::cin >> v;
}
теперь собственно придирки:
1. char *v - глобальная переменная. совершенно ненужная причем.
2. value__ - двойное подчеркивание зарезервированно компиляторами и стандартной библиотекой, не стоит его использовать в своих именах.
3.
while(value__ != 0)
value__ = value_[b++];
не проще ли было просто написать:
while(value_[b++])?? или даже еще лучше:
b = strlen(value_)
4. самое главное - что за тупой, не, ТУПОЙ, realloc? понтанулся что знаешь такую команду? или зачем? ты вкурсе что у тебя в data на момент вызова realloc-а, мусор? вот поситай:
http://www.codenet.ru/progr/cpp/spru/realloc.php
malloc и все тут.
еще лучше new char[b];
по крайней мее так твоя программа не валится.
5. приведение типа в старом стиле ненужны. учи static, reinterpret, const и dynamic cast-ы. если не хочешь учить - используй static_cast заместо приведения в старом стиле.