Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > не компилит << для string


Автор: Syberex 15.2.2007, 17:16
Вот такая ерунда ,

Код

string u(mas,poz-LenthWord,LenthWord);
cout<<u<<endl;


это чудестно компилится на Borland 6 , но в Borland Developer Studio 2006 строчка    cout<<u<<endl; не компилится и пишет:
 [C++ Error] Universal.cpp(229): E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'string'

что это такое? и как от этого избавится? 

Автор: TaNK 15.2.2007, 17:26
Цитата(Syberex @ 15.2.2007,  17:16)
Вот такая ерунда ,

Код

string u(mas,poz-LenthWord,LenthWord);
cout<<u<<endl;


это чудестно компилится на Borland 6 , но в Borland Developer Studio 2006 строчка    cout<<u<<endl; не компилится и пишет:
 [C++ Error] Universal.cpp(229): E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'string'

что это такое? и как от этого избавится?

ругается на << может попробуешь без вторых << обойтись

Автор: Syberex 15.2.2007, 17:29
он и без второй всё равно ругается

Автор: profispb 15.2.2007, 17:32
Тогда перегрузка оператора <<

Автор: Syberex 15.2.2007, 17:35
чёто не понял, как это перегрузить оператор ввода вывода, он ведь от меня не зависит, по крайней мере тут.

Автор: profispb 15.2.2007, 17:37
У меня была проблема, только с классом вот помогла только перегрузка оператора <<

Автор: Syberex 15.2.2007, 17:40
а примерчик скинешь?

Автор: profispb 15.2.2007, 17:44
Давно было. года 2-а назад, щас уже и не вспомню. Посмотри в любой книге по программированию на С++ или в нете. Тебе стандартная перегрузка нужна есть в любой книге.

Автор: Syberex 15.2.2007, 17:55
я слабо представляю перегрузку << , это тут даже не уместно.

Автор: Fazil6 15.2.2007, 17:59
что за тип string ?
не может быть, чтобы std::cout не понимал std::string

Автор: Xenon 15.2.2007, 18:32
Ну конечно глобально можно так:
Код

std::ostream& operator<< (std::ostream& os,const std::string& str)
{
    for (int i=0;i<str.size();++i)
    {
        os << str[i];
    }
    return os;
}


Но по-любому хрень - std::string работает с <<

Автор: _stranger_ 15.2.2007, 18:50
сильно сомневаюсь, но может все-таки:
Код

#include <string>

 smile 

Автор: V.A.KeRneL 15.2.2007, 21:29
Блин, по-моему, _stranger_ прав: 
Код

//#include <cstdio>
#include <iostream>
#include <string>

using namespace std;


З.Ы. А имхо, всё-таки, лучше так: 
Код

std::cout << u << std::endl;

Писать чуть побольше, зато философски правильнее и даже в большой программе (с многими пространствами имён) путаницы не будет.
А если уж неймётся непременно сделать «юзинг», то лучше каждую переменную по отдельности заносить: 
Код

using std::string;

using std::cin;
using std::cout;
using std::cerr;

using std::endl;

using std::>>;
using std::<<;

Не ленитесь больше, чем нужно, и проблем будет меньше. smile

Автор: vinter 15.2.2007, 23:38
а это 
Код
using std::>>;
using std::<<;


зачем??

Автор: V.A.KeRneL 16.2.2007, 00:10
На всякий пожарный. smile Если будут в дальнейшем какие-нибудь странные проблемы, можно попробовать...

З.Ы. Syberex, если проблема решена, не забудь пометить тему как решённую.

Автор: Syberex 16.2.2007, 09:25
всё что вы снаписали чудестно работает в Borland 6, а Borland Developer Studio 2006 ругается на << но только для стринг, если там вывод char то всё работает, а string не хочет.
Не работает!
 
Код

string x="ddddddd";
 std::cout<<x;
 cout<<x;


Работает!
 
Код

char x[50]="ddddddd";
cout<<x;


всё перепробовал, но от этого избавится не удалось
[C++ Error] Universal.cpp(229): E2094 'operator<<' not implemented in type 'ostream' for arguments of type 'string'

как быть?

Добавлено @ 09:33 
а это справка его, что он хочет от меня не пойму:

Operator 'operator' not implemented in type 'type' for arguments of type 'type' (E2094)
 
The operator you are calling is not defined in this class. When you have an expression: x + x, where x is of type class X, the operator + has to be defined in class X and be accessible.
 

Автор: Syberex 16.2.2007, 10:01
Цитата(Xenon @ 15.2.2007,  18:32)
Ну конечно глобально можно так:
Код

std::ostream& operator<< (std::ostream& os,const std::string& str)
{
    for (int i=0;i<str.size();++i)
    {
        os << str[i];
    }
    return os;
}


Но по-любому хрень - std::string работает с <<

эта штука работает, но как обойтись без перегрузки оператора?

Автор: V.A.KeRneL 16.2.2007, 10:18
Использовать другую среду разработки или поставить другую версию этой. smile 
Обойтись в текущей версии без данной перегрузки оператора, похоже, не удастся, потому что компилер, как раз-таки, и ругается на её (перегрузки) отсутствие. smile

Автор: Syberex 16.2.2007, 10:33
версию врятли,  она самая свежая, но я не думаю что программеры забыли << её туда включить, наверно как по другому делается без перезагрузки, может что то включить или инициализировать, а перегрузка,это крайний выход.

Автор: Fazil6 16.2.2007, 10:53
Цитата

версию врятли,  она самая свежая, но я не думаю что программеры забыли << её туда включить, наверно как по другому делается без перезагрузки, может что то включить или инициализировать, а перегрузка,это крайний выход.

тебе же сказали, что включить

Код

#include <iostream>
#include <string>    // если нет вот этой строки то
            //получишь такую ошибку как у тебя
//---------------------------------------------------------------------------

#pragma argsused

using namespace std;

int main(int argc, char* argv[])
{
    string s("111111");
        cout << s;
    return 0;
}

проверь подключен ли у тебя string

Автор: Syberex 16.2.2007, 11:02
подключён был всё время

Код

#include <vcl.h>
#include <iostream.h>
#pragma hdrstop
#include <stdlib.h>
#include "fstream.h"
#include "stdio.h"
#include "conio.h"
#include "io.h"
#include "alloc.h"
#include "vector.h"
#include "string.h"
#include "ostream.h"
#include "iostream.h"
using namespace std;
using std::string;
using std::cin;
using std::cout;
using std::cerr;
using std::endl;


от этого ничего не поменялось

Автор: Fazil6 16.2.2007, 11:08
ну и где он подключен??????
и вообще, на кой ты эти старые хедеры повтыкал ?
досконально не разбирался, но должно быть так
Код

#include <vcl.h>
#include <iostream>
#pragma hdrstop
#include <stdlib.h>
#include <fstream>
#include "stdio.h"
#include "conio.h"
#include "io.h"
#include "alloc.h"
#include <vector>
#include <string>   
#include <ostream>


Автор: Vyacheslav 16.2.2007, 11:09

Код

#include <vcl.h>
#include <iostream.h>
//
#include "iostream.h"


Надо 
Код

#include <iostream>


Автор: Syberex 16.2.2007, 11:33
ну растолкуйте , действительно , без h работает! , в чём же прикол ? так пашет
Код

 #include <string> 

  а так категорически не видит мой <<
Код

#include <string.h> 
 


в чём прикол??? в чём разница???  это же ведь одно и тоже  smile 

Автор: Fazil6 16.2.2007, 12:13
Цитата

это же ведь одно и тоже 

с чего ты взял? Это не одно и тоже

Автор: V.A.KeRneL 16.2.2007, 12:20
Цитата(Syberex @  16.2.2007, 11:33 Найти цитируемый пост)

Код

#include <string>

Код

#include <string.h>
 
в чём прикол??? в чём разница???  это же ведь одно и тоже  smile

Шо?! smile Не-е-ет!!
<string.h> — это чисто сишный хидер для функций strlen(), strcat(), strstr() и т.д. (В C++ это бутет <cstring>)
<string> — а вот это уже плюсовый, для подключения класса String (и, соответственно, методов для работы с ним).

Автор: profispb 16.2.2007, 14:21
Когда я учился на С++ в тереме наш препод говорил что оператор <<, лучше всего перегружать, ошибок меньше да и головной боли.

Автор: Xenon 16.2.2007, 14:50
Ну блин, ты подключаешь, на сколько я понимаю, С`ишный заголовочный файл. А в C же не было потоков и всяких << smile

Автор: vinter 16.2.2007, 17:37
сишный  string.h,  в плюсах cstring 

Автор: Rockie 16.2.2007, 19:04
Syberex, 
Цитата(profispb @  16.2.2007,  14:21 Найти цитируемый пост)
Когда я учился на С++ в тереме

гдее?.. 

smile


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)