В настоящее время я пишу программу на C ++, которая случайным образом выбирает роли для людей, использующих ввод / вывод файлов.
Я почти закончил и часто строю, чтобы убедиться, что мой код работает, а не псевдокод. Я получил ошибку в своем фрагменте кода -
randomPrefs.open ("Preferences/"members[random]"-Preferences");
Я пытаюсь получить доступ к текстовому файлу в Preferences / foo-Preferences, и переменная становится случайной с помощью некоторого кода над ней. Я разместил случайный фрагмент, и он отлично работает, поэтому мне не нужно включать его здесь. Я получаю следующую ошибку:
Avalon - Omnipotent.cpp:61:21: error: unable to find string literal operator 'operator""members' with 'const char [13]', 'unsigned int' arguments
Итак, я искал эту ошибку, но ничего не нашел. Я подумал сделать вокруг него мини-круглые скобки, и это привело к другой ошибке - Avalon - Omnipotent.cpp: 61: 51: error: выражение не может использоваться как функция
Любая помощь была бы признательна.
Небольшая заметка здесь, когда вокруг нее нет круглых скобок, я получаю предупреждение о том, что моя переменная не используется -
Avalon - Omnipotent.cpp:39:21: warning: unused variable 'members' [-Wunused-variable]
Однако вторая ошибка не дает предупреждения о неиспользованной переменной.
Привет, как выглядит моя переменная:
unsigned const char members[22] =
И я присвоил значение "random", которое выбирает случайное число от 0 до 21, и я присваиваю сгенерированное число значению random и объявляю переменную как члены [random]. Работает отлично, мне просто нужна помощь с этими ошибками.
Помогите!
3 ответа
Чтобы объединить строки, сделайте следующее:
std::string s = std::string("Preferences/") + members[random] + "-Preferences";
randomPrefs.open(s);
Если вам не нужна промежуточная именованная переменная, тогда:
randomPrefs.open(std::string("Preferences/") + members[random] + "-Preferences");
Если члены не содержат таких символов, как 'A'
, 'B'
, 'C'
или '4'
, а вместо этого содержат числа 4
, 28
, или 153
, тогда вы можете преобразовать число в соответствующую строку с помощью std::to_string
.
std::string s = std::string("Preferences/") + std::to_string(members[random]) + "-Preferences");
Предупреждение о неиспользуемой переменной бесполезно и связано с тем, что компилятор обнаружил более ранние ошибки в вашем коде. Если вы исправите вышеуказанное, это тоже должно исчезнуть.
Если вы пытаетесь выполнить конкатенацию строк, вероятно, лучше всего использовать itoa() -> std::string(const char*)
или to_string()
для числа, которое нужно преобразовать в строку, и использовать operator+()
или std::string.append()
для конкатенации.
Обратите внимание, что to_string()
- это C ++ 11:
http://coliru.stacked-crooked.com/a/eb3677d7abffca00
#include <iostream>
#include <string>
int main() {
std::string str1 = "Hello ";
int i = 2;
std::string str2 = " World!";
std::string output = "";
output.append(str1).append(std::to_string(i)).append(str2);
std::cout << output << std::endl;
return 0;
}
@YoBro: ЗДЕСЬ! - Билл Линч 7 минут назад
Немного смоделировал свой код после того, как он заставил его работать!
std::string s = std::string("Preferences/") + std::to_string(members[random]) + "-Preferences";
randomPrefs.open(s);
Сейчас я использую нечто подобное.
Похожие вопросы
Новые вопросы
c++
C++ — это язык программирования общего назначения. Изначально он разрабатывался как расширение C и имел аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде, который будет скомпилирован с помощью компилятора C++. Используйте тег версии для вопросов, связанных с конкретной стандартной версией [C++11], [C++14], [C++17], [C++20] или [C++23]. и т.д.