У меня есть программа, которая компилируется в XCode. В этой программе я пользуюсь возможностью stringstream хранить значения в соответствии с типом, которому они назначаются.
Например) Пользователь вводит букву, цифру и символ, разделенные пробелами в консоли. Я делаю вызов getline, который получает все три значения и сохраняет их в строке. Затем я создаю поток строк с данными этой строки и присваиваю значения некоторым переменным, char, int и char в этом случае. Я компилирую и запускаю в XCode, и это работает. Затем я беру этот же файл в терминал и вызываю g ++ -o имя-файла-исполняемого-файла-файла.cpp. Здесь я получаю сообщение об ошибке.
Рабочий пример:
main.cpp
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main() {
string buffer;
char letter;
int number;
char symbol;
cout << "Enter (letter) (number) (symbol): ";
getline(cin, buffer);
stringstream(buffer) >> letter >> number >> symbol; //The error occurs here
cout << letter << " " << number << " " << symbol << endl;
return 0;
}
Я компилирую и запускаю в XCode:
Enter (letter) (number) (symbol): B 145 #
B 145 #
Program ended with exit code: 0
Я компилирую с g ++:
$ g++ -o test main.cpp
main.cpp:14:26: error: invalid operands to binary expression ('std::__1::stringstream' (aka 'basic_stringstream<char>') and 'int')
stringstream(buffer) >> letter >> number >> symbol;
~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~
, а затем следует все это:
/ Applications / Xcode.app / Contents / Developer / Toolchains / XcodeDefault.xctoolchain / usr / include / c ++ / v1 / istream: 789: 1: note: функция-кандидат недопустима: нет известного преобразования из 'char' в ' знак без знака 'для 2-го
аргумент
оператор >> (basic_istream & __is, беззнаковый символ __s)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:797:1: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'подписанный char для 2-го
аргумент
оператор >> (basic_istream & __is, подписанный символ __s)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:804:1: note: функция кандидата [with _CharT = char, _Traits = std :: __ 1 :: char_traits ] нежизнеспособно:
неизвестное преобразование из 'std :: __ 1 :: stringstream' (он же 'basic_stringstream') в 'basic_istream> &' для первого аргумента
оператор >> (basic_istream <_CharT, _Traits> & __is, _CharT & __c)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:832:1: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'неподписанный символ & для 2-го
аргумент
оператор >> (basic_istream & __is, unsigned char & __c)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:840:1: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'подписанный char & для 2-го
аргумент
оператор >> (basic_istream & __is, подписанный символ & __c)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:220:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в
'std :: __ 1 :: basic_istream & () (std :: __ 1 :: basic_istream &)' для первого аргумента
basic_istream & operator >> (basic_istream & ( __ pf) (basic_istream &))
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:224:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в
'basic_ios> :: char_type, std :: __ 1 :: basic_istream> :: traits_type> & () (basic_ios> :: char_type, std :: __ 1 :: basic_istream> :: traits_type> &)' (aka ' basic_ios> & () (basic_ios> &) ') для 1-го аргумента
basic_istream & operator >> (basic_ios &
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:229:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в
'std :: __ 1 :: ios_base & () (std :: __ 1 :: ios_base &)' для первого аргумента
basic_istream & operator >> (ios_base & ( __ pf) (ios_base &))
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:232:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в
'basic_streambuf> :: char_type, std :: __ 1 :: basic_istream> :: traits_type> *'
(он же basic_streambuf> ) для первого аргументаbasic_istream & operator >> (basic_streambuf __sb);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:233:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'bool &' за 1-й аргумент
basic_istream & operator >> (bool & __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:234:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'short &' для 1-го
аргумент
basic_istream & operator >> (короткий & __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:235:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'unsigned short & ' за
1-й аргумент
basic_istream & operator >> (без знака short & __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:236:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'int &' за 1-й аргумент
basic_istream & operator >> (int & __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:237:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'unsigned int & для 1-го
аргумент
basic_istream & operator >> (без знака int & __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:238:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'long &' за 1-й аргумент
basic_istream & operator >> (long & __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:239:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'unsigned long & для 1-го
аргумент
basic_istream & operator >> (без знака long & __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:240:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'long long & для 1-го
аргумент
basic_istream & operator >> (long long & __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:241:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'unsigned long long &»
за 1-й аргумент
basic_istream & operator >> (unsigned long long & __n);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:242:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'float &' для 1-го
аргумент
basic_istream & operator >> (float & __f);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:243:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'double &' для 1-го
аргумент
basic_istream & operator >> (double & __f);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:244:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'long double & для 1-го
аргумент
basic_istream & operator >> (long double & __f);
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:245:20: примечание: функция-кандидат недопустима: нет известного преобразования из 'char' в 'void & 'для 1-го
аргумент
basic_istream & operator >> (void & __p);
^/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:740:1: примечание: шаблон кандидата игнорируется: не может соответствовать _CharT против 'char'
оператор >> (basic_istream <_CharT, _Traits> & __is, _CharT __s)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:1506:1: примечание: шаблон кандидата игнорируется: не удалось сопоставить «basic_string» с «char»
оператор >> (basic_istream <_CharT, _Traits> & __is,
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/istream:1638:1: примечание: шаблон кандидата игнорируется: невозможно сопоставить «bitset <_Size>» с «char»
оператор >> (basic_istream <_CharT, _Traits> & __is, bitset <_Size> & __x)
^
1 сгенерированная ошибка.
Правильно ли я использую stringstream? (кроме того, почему XCode позволяет компилировать код, а g ++ - нет? Я думал, что XCode использует тот же g ++)