Форум программистов, компьютерный форум CyberForum.ru

istream - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.79
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
31.07.2013, 13:39     istream #1
В 12 стоке ошибка no matching function for call to `std::basic_istream<char, std::char_traits<char> >::basic_istream(char*&, size_t)'
В книге Страуструпа говорится, что нужно включить <strstream.h>, но мой компилятор его не находит, в интернете советуют включать sstream, что я и сделал. В книге точно так же, только нет std::. Я так понял, вызывается функция неправильно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <cstdlib>
#include <sstream>
#include <iostream>
#include "data.h"
 
int main(int argc, char *argv[])
{
    switch (argc) {
        case 1:
            break;
        case 2:
            std::cin = *new std::istream(argv[1],strlen(argv[1]));
            break;
        default:
            error ("too many parametrs");
            return 1;
    }
    insert("pi")->value = 3.1415926535897932385;
    insert ("e")->value = 2.7182818284590452354;
    while (std::cin) {
        get_token ();
        if (curr_tok == END) break;
        if (curr_tok == PRINT) continue;
        std::cout << expr () << '\n';
    }
    system("PAUSE");
    return no_of_errors;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.07.2013, 14:59     istream #2
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
C++
1
std::cin = *new std::istream(argv[1],strlen(argv[1]));
Чего Вы хотите этим добиться?
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
31.07.2013, 15:11  [ТС]     istream #3
Цитата Сообщение от Tulosba Посмотреть сообщение
Чего Вы хотите этим добиться?
"можно определить cin
так, чтобы символы читались из строки, а не из стандартного входного потока"
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.07.2013, 15:23     istream #4
Цитата Сообщение от tramp_1-3 Посмотреть сообщение
"можно определить cin
так, чтобы символы читались из строки, а не из стандартного входного потока"
Что, прямо так и написано у Страуструпа?
Хотите читать из как бы из std::cin, но на самом деле из строки, используйте rdbuf():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <sstream>
#include <string>
 
int main() {
    
    std::stringstream ss("hello");
    std::cin.rdbuf( ss.rdbuf() );
    std::string s;
    std::cin >> s;
    std::cout << s << endl;
    
    return 0;
}
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
31.07.2013, 15:37  [ТС]     istream #5
Tulosba, посмотрю
Миниатюры
istream  
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
31.07.2013, 15:44     istream #6
tramp_1-3, какое это издание? У std::istream нет конструктора с двумя параметрами
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
31.07.2013, 15:56  [ТС]     istream #7
Цитата Сообщение от Tulosba Посмотреть сообщение
какое это издание?
Бьерн Страуструп.
Язык программирования С++
Второе дополненное издание
Языки программирования/ С++
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.07.2013, 15:59     istream #8
tramp_1-3, Второе издание... Вы ничего старее не смогли найти?
Год издания: 1997, книге уже 16 лет так-то.
И кстати да, strstream != stringstream. Совершенно.
Tulosba
31.07.2013, 16:02
  #9

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Год издания: 1997, книге уже 16 лет так-то.
Чем старее, тем знания ценнее Проверено годами, так сказать.

ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
31.07.2013, 16:05     istream #10
Как бы то ни было. Там просто опечатка.
C++
1
cin = *new istream(argv[1],strlen(argv[1]));
А дальше идет
При этом istrstream - это функция istream, которая считывает
символы из строки, являющейся ее первым параметром.
Соотстветнно должно быть
C++
1
cin = *new istrstream(argv[1], strlen(argv[1]));
, который действительно имеет такой конструктор, однако strstream является deprecated и вполне может не присутсвовать в конкретной реализации STL. Соответственно, достаньте себе третье-четвертое издание.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2013, 16:38     istream
Еще ссылки по теме:

std::istream часть кода C++
C++ istream состояние bad
Почему istream::get() ? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
tramp_1-3
 Аватар для tramp_1-3
14 / 14 / 1
Регистрация: 13.10.2012
Сообщений: 428
31.07.2013, 16:38  [ТС]     istream #11
Цитата Сообщение от ForEveR Посмотреть сообщение
, который действительно имеет такой конструктор, однако strstream является deprecated и вполне может не присутсвовать в конкретной реализации STL. Соответственно, достаньте себе третье-четвертое издание.
Этой функции там не оказалось. Спасибо.
Yandex
Объявления
31.07.2013, 16:38     istream
Ответ Создать тему
Опции темы

Текущее время: 00:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru