В настоящее время я пишу программу на 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]. Работает отлично, мне просто нужна помощь с этими ошибками.

Помогите!

2
Yo Bro 29 Май 2016 в 22:50

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");

Предупреждение о неиспользуемой переменной бесполезно и связано с тем, что компилятор обнаружил более ранние ошибки в вашем коде. Если вы исправите вышеуказанное, это тоже должно исчезнуть.

3
Bill Lynch 29 Май 2016 в 20:06

Если вы пытаетесь выполнить конкатенацию строк, вероятно, лучше всего использовать 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;
}
0
CinchBlue 29 Май 2016 в 19:55

@YoBro: ЗДЕСЬ! - Билл Линч 7 минут назад

Немного смоделировал свой код после того, как он заставил его работать!

 std::string s = std::string("Preferences/") + std::to_string(members[random]) + "-Preferences";
  randomPrefs.open(s);

Сейчас я использую нечто подобное.

0
Yo Bro 29 Май 2016 в 20:30