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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Коварный
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 24
#1

Компилятор выдает ошибку "Could not find a match for 'stringstream" - C++

26.09.2016, 14:30. Просмотров 659. Ответов 16

Добрый вечер форумчане!

Мне необходимо разбить строку полученную из базы данных на слова. На данный момент я смог получить необходимое значение из базы данных и занести его в переменную. Но однако компилятор билдера жалуется на строку "stringstream s(IDQes); "
И выдает ошибку:

[BCC32 Error] Unit1.cpp(60): E2285 Could not find a match for 'stringstream::basic_stringstream(UnicodeString)'
Full parser context
Unit1.cpp(37): parsing: void _fastcall TForm1::Button1Click(TObject *)

Самое смешное, что в визуал студии все прекрасно работает!
Буду признателен за любую помощь

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
#include <sstream>
#include <iostream>
#include <vector>
#include <string>
#include <iterator>
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
    String  IDQes;
 
    GAMEQUERY->SQL->Clear();                                                         //поиск варианта с наибольшей вероятностью
    GAMEQUERY->SQL->Add("SELECT ИмяПерсонажа,IDвопросов FROM ИгровыеОтветы WHERE НачальнаяВероятность = (SELECT MAX(НачальнаяВероятность) FROM ИгровыеОтветы)");
    GAMEQUERY->Open();
    IDQes = GAMEQUERY->FieldByName("IDвопросов")->AsString;         
 
/////////////Разбитие строки на слова
 
    stringstream s(IDQes);      
    vector <string> svec;                                                           
 
    for (string word; s >> word; svec.push_back(word));                                //в этом цикле строка разбивается на слова
    {
    //  copy(svec.begin(), svec.end(), ostream_iterator <string>(cout, "\n"));          //вывод слов на экран
    }
 
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2016, 14:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Компилятор выдает ошибку "Could not find a match for 'stringstream" (C++):

Компилятор выдает ошибку: error C2041: недопустимая цифра "8" для основания "8" - C++
Собственно код: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main(){ long double gramm; long double...

Компилятор выдает ошибку " in function int main ()" - C++
#include &lt;cstdlib&gt; #include &lt;iostream&gt; using namespace std; int main() { int a,b,v,z,n,i,mas; cout&gt;&gt;&quot;vvedite...

Ошибка в программе, адресная арифметика(Компилятор выдает ошибку "Cannot conver int* to int") - C++
#include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; #include &lt;alloc.h&gt; int size=(int*)malloc(50*sizeof (int)) { for...

Выдает ошибку c:\proect\8\8\8.cpp(60): error C2040: ==: "char [20]" отличается по уровням косвенного обращения от "int" - C++
Программа должна выводить фамилии всех нападающих с датой рождения из основного состава #include&quot;stdafx.h&quot; #include&quot;iostream&quot; ...

Устранить ошибку "no match for operator" - C++
#include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class Firm { public: Firm(); Firm(string n,...

Исправить ошибку "/usr/bin/ld: cannot find -lrtdk" - C++
Доброго времени суток! при выполнении вот этой задачи 3. В рабочем каталоге необходимо создать файл lab11.c содержащий код программы...

16
nonedark2008
925 / 664 / 141
Регистрация: 28.07.2012
Сообщений: 1,806
26.09.2016, 15:41 #2
Коварный, stringstream, vector и прочее находятся в пространстве имен std.
0
Коварный
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 24
26.09.2016, 15:58  [ТС] #3
Спасибо, дописал: using namespace std;
Правда теперь ошибка изменилась на: [BCC32 Error] Unit1.cpp(68): E2451 Undefined symbol 'Stringstream'

В интернете говорят, что в этом случае нужно подключить модуль <sstream>. Однако он и так подключен
0
MrGluck
Модератор
Эксперт CЭксперт С++
7417 / 4532 / 671
Регистрация: 29.11.2010
Сообщений: 12,281
26.09.2016, 16:04 #4
Stringstream
Должно быть с маленькой буквы. Ругается на какую строчку?
0
Коварный
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 24
26.09.2016, 16:10  [ТС] #5
На 19тую
0
MrGluck
Модератор
Эксперт CЭксперт С++
7417 / 4532 / 671
Регистрация: 29.11.2010
Сообщений: 12,281
26.09.2016, 16:20 #6
Конструктор stringstream может принимать только объект типа std::string, конвертируйте String в std::string.
0
Коварный
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 24
26.09.2016, 16:26  [ТС] #7
А для этого недостаточно объявить using namespace std; ?
0
nmcf
5349 / 4669 / 1562
Регистрация: 14.04.2014
Сообщений: 18,595
26.09.2016, 16:37 #8
Разумеется, нет.
0
Коварный
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 24
26.09.2016, 16:46  [ТС] #9
То есть код будет выглядеть примерно так, я правильно понимаю?

C++
1
2
3
4
5
6
7
8
9
10
 std::string  IDQes;
 
    GAMEQUERY->SQL->Clear();                                                         //поиск варианта с наибольшей вероятностью
    GAMEQUERY->SQL->Add("SELECT ИмяПерсонажа,IDвопросов FROM ИгровыеОтветы WHERE НачальнаяВероятность = (SELECT MAX(НачальнаяВероятность) FROM ИгровыеОтветы)");
    GAMEQUERY->Open();
    IDQes = GAMEQUERY->FieldByName("IDвопросов")->AsString;         
 
/////////////Разбитие строки на слова
 
    std::stringstream s(IDQes)
0
nmcf
5349 / 4669 / 1562
Регистрация: 14.04.2014
Сообщений: 18,595
26.09.2016, 17:53 #10
А оно так работает? Через c_str(), наверное, надо.
0
Коварный
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 24
26.09.2016, 18:05  [ТС] #11
Написал string IDQes; с маленькой буквы. Теперь компилятор перестал ругаться на строчку stringstream s(IDQes); .
Однако теперь он кричит на строчку:IDQes = GAMEQUERY->FieldByName("IDвопросов")->AsString;

И выдает такую ошибку: [BCC32 Error] Unit1.cpp(57): E2285 Could not find a match for 'operator string::=(UnicodeString)'
Full parser context
Unit1.cpp(39): parsing: void _fastcall TForm1::Button1Click(TObject *)

C++
1
2
3
4
5
6
7
8
9
10
string  IDQes;
 
    GAMEQUERY->SQL->Clear();                                                         //поиск варианта с наибольшей вероятностью
    GAMEQUERY->SQL->Add("SELECT ИмяПерсонажа,IDвопросов FROM ИгровыеОтветы WHERE НачальнаяВероятность = (SELECT MAX(НачальнаяВероятность) FROM ИгровыеОтветы)");
    GAMEQUERY->Open();
    IDQes = GAMEQUERY->FieldByName("IDвопросов")->AsString;         
 
/////////////Разбитие строки на слова
 
    stringstream s(IDQes)
Добавлено через 7 минут
И да и нет=)
пропала ошибка в строке stringstream s(IDQes).
Однако появилась другая ошибка в строчке IDQes = GAMEQUERY->FieldByName("IDвопросов")->AsString;
0
nmcf
5349 / 4669 / 1562
Регистрация: 14.04.2014
Сообщений: 18,595
26.09.2016, 18:27 #12
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если там UnicodeString, то надо использовать wstring и wstringstream. Так попробуй:
C++
1
2
3
4
wstring  IDQes;
UnicodeString us = AMEQUERY->FieldByName("IDвопросов")->AsString;
IDQes = us.c_str();
wstringstream s(IDQes)
1
Коварный
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 24
27.09.2016, 03:36  [ТС] #13
Спасибо, заработало! Однако теперь компилятор уже ругается на строчку:
for (string word; s >> word; svec.push_back(word));

И выдает ошибку:
[BCC32 Error] Unit1.cpp(77): E2285 Could not find a match for 'operator UnicodeString::=(wstringstream)'

Насколько понимаю тут нужна так называемая перезагрузка оператора или инициализация какой-то дополнительной библиотеки?
0
nmcf
5349 / 4669 / 1562
Регистрация: 14.04.2014
Сообщений: 18,595
27.09.2016, 08:15 #14
Ты там везде типы заменил? string -> wstring. В векторе, в цикле и т. д.
0
Коварный
0 / 0 / 0
Регистрация: 18.01.2016
Сообщений: 24
27.09.2016, 15:35  [ТС] #15
Спасибо, все заменил.
Насколько я понял, то элементы из вектора теперь просто так не получится использовать в программе? И их придется каким-то образом преобразовывать обратно в обычный string?
0
27.09.2016, 15:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2016, 15:35
Привет! Вот еще темы с ответами:

Компилятор g++ выдает ошибку: "Версия этого файла несовместима с используемой версией Windows" - C++
Когда запускаю программу с указателями, то виндовс ее сразу закрывает. Почему и как исправить? Все на скришоте

Компилятор выдаёт ошибку: error C2011: Confection::Date: переопределение типа "struct". Как исправить? - C++
#pragma once #pragma warning #ifndef Confection_H #define Confection_H #include &lt;string&gt; #include &quot;Filling.h&quot; using namespace...

Выдает ошибку invalid conversion from "int*" to "int" - C++
Добрый вечер! Что за ошибка?invalid conversion from &quot;int*&quot; to &quot;int&quot; #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;string&gt; ...

Выдает ошибку "Не удается открыть файл include: iostream.h" - C++
fatal error C1083: Не удается открыть файл include: iostream.h: No such file or directory #include &lt;iostream.h&gt; class base { ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru