Сразу же нет это не дубликат. Я искал часы, чтобы сделать это, но это может быть просто, поскольку я начал кодировать несколько недель назад.
Я хочу быть в состоянии сделать это, но это не работает:
system("xdotool mousemove " << $2 << " " << $3);
Да, это C ++, просто я использую это внутри Bison, поэтому $ 2 и $ 3 являются переменными (которые являются числами с плавающей точкой). Как и в файле Bison, у меня много чего происходит, Я был бы признателен за решение в одной строке, например, формат, который у меня здесь.
Проблема здесь на самом деле с конкатенацией. Я сделал это, но это все еще не работает, и дал мне ту же ошибку:
string temp = "xdotool mousemove " << $3 << " " << $4; system(temp.c_str());
Извините за так много правок, но я попытался сделать
system(("xdotool mousemove " + to_string($3) + " " + to_string($4)).c_str());
но это все еще не работает 🙁 Есть другие идеи? На этот раз ошибка говорит ‘to_string’ was not declared in this scope
С уважением,
Мэтью Санетра
<<
не является оператором конкатенации строк Использование, о котором вы думаете:
std::cout << "The value is " << x << '\n';
Тщательное изучение вышеуказанной строки покажет, что она не предполагает использованиеstd::string
совсем; левый аргумент<<
оператор всегда std::ostream&
, (Первый явно указан, а два других — результат предыдущего <<
оператор, который в этом случае возвращаетstd::ostream&&
.)
Сообщение об ошибке, которое вы получаете от компилятора, является абсолютно правильным, и вам следует потратить время на то, чтобы понять, что он говорит вам, по крайней мере, если ваша цель — научиться писать программы на C ++.
Стандартная библиотека C ++ перегружает +
оператор для объединения std::string
объекты. Но строковый литерал вроде "xdotool"
это не std::string
; это массив char
, Вы также можете использовать +
соединить std::string
со строкой в стиле C (то есть с символьным массивом, оканчивающимся NUL), но должен быть std::string
как минимум один, если аргументы.
И нет автоматического преобразования из числа в строку, а также нет перегрузки +
который занимает std::string
и номер. Если вы используете C++11
или более поздний, то вы могли бы использовать std::to_string
явно конвертировать.
Обычный способ использования <<
Оператор, который вы пытаетесь сделать, включает в себя использование объекта, похожего на поток, который просто создает строковый буфер в памяти: std::ostringstream
, Thar объект реализует str
метод для извлечения буфера как std::string
; посмотрите пример Вот за то, что похоже на то, что вы хотите сделать.
Но, как я уже говорил, std::string
не простой массив char
, так что вы не можете передать его функции, ожидающей строку в стиле C. Это включает в себя все функции в стандартной библиотеке C, как system
, которые ничего не знают о C ++ std::string
, Так что вам нужно использовать c_str
функция-член std::string
объект для извлечения его данных в виде строки в стиле C.
Других решений пока нет …