Перегрузка >> и << ( C++ ) помогите

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Huster, 2 Apr 2010.

  1. Huster

    Huster Member

    Joined:
    8 May 2009
    Messages:
    42
    Likes Received:
    18
    Reputations:
    0
    Перегрузка >> и << ( C++ ) помогите ( не актуально )

    Люди, для "усовершенствования" своих навыков программирования, попытался для класса перегрузить операторы вводы\выводы из потока ( << >> )
    Есть такой простой класс
    Он еще ничего не делает, только создается и удаляется.
    Code:
    #include<iostream>
    class String
    {
    friend ostream& operator<<( ostream &stream, String &obj);
    public:
    	String ( char *str); // конструктор
    	~String () { delete []ptr; } // деструктор
    private:
    	int lenght;
    	char *ptr;
    };
    String::String ( char *str ) // опис. конструктора
    {
    	if ( str == NULL || strlen(str) == 0 )
    	{
    		ptr = new char[1];
    		ptr[0] = '\0';
    		lenght = 0;
    	}
    	else
    	{
    		lenght = strlen(str);
    		ptr = new char[lenght];
    		for ( int i=0; i<lenght; i++)
    			ptr[i] = '0';
    		ptr[lenght] = '\0';
    	}
    }
    int main()
    {
    // тут какой то код 
    }
    ostream& operator << (ostream &stream, String &obj)
    {
    // тут описание оператора ввода в поток.
    }
    
    Но это не очень важно. Важно другое. Компилятор ругается строки и выдает такое
    Code:
    friend ostream& operator<<( ostream &stream, String &obj);
    error C2143: syntax error : missing ';' before '&'
    error C2433: 'ostream' : 'friend' not permitted on data declarations
    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    error C2061: syntax error : identifier 'ostream'
    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    error C2805: binary 'operator <<' has too few parameters
    
    Code:
    friend ostream& operator << (ostream &stream, String &obj)
    error C2143: syntax error : missing ';' before '&'
    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    error C2086: 'int ostream' : redefinition
    error C2065: 'stream' : undeclared identifier
    error C2065: 'obj' : undeclared identifier
    error C2275: 'String' : illegal use of this type as an expression
    error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    fatal error C1903: unable to recover from previous error(s); stopping compilation
    В чем проблема ?
    p.s использую Microsoft Visual Studio 2005 Version 8.0.50727.42
    p.s.p.s в Borland 3.1 все компилируется
     
    #1 Huster, 2 Apr 2010
    Last edited: 2 Apr 2010
  2. Huster

    Huster Member

    Joined:
    8 May 2009
    Messages:
    42
    Likes Received:
    18
    Reputations:
    0
    Хмм..... все, я баран, разобрался :(
    Надо было добавить
    using namespace std;
     
    #2 Huster, 2 Apr 2010
    Last edited: 2 Apr 2010
  3. Jingo Bo

    Jingo Bo Member

    Joined:
    25 Oct 2009
    Messages:
    368
    Likes Received:
    51
    Reputations:
    7
    Убивать надо...RTFM