C ++ строковый массив char вопросы - PullRequest
0 голосов
/ 08 февраля 2011

почему, когда я пытаюсь скомпилировать этот код:

TenStrings::TenStrings()
{
char str1[10] = "String 1";
char str2[10] = "String 2";
char str3[10] = "String 3";
char str4[10] = "String 4";
}
;

я получаю ошибку: неиспользуемая переменная str1, str2, str 3, str4? Я пытаюсь сделать массив символов, который будет соответствовать "строка 1", "строка 2" и т. Д.

Ответы [ 6 ]

2 голосов
/ 08 февраля 2011

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

В настоящее время вы ничего не делаете с str1-4.

0 голосов
/ 08 февраля 2011

Для присвоения, над которым вы работаете , вы не не хотите объявлять переменные с именами str1, str2 и т. Д. Вам нужен класс TenStrings чтобы иметь один элемент данных (назовите его strings), который представляет собой массив из десяти указателей на символы. Этот массив будет инициализирован в вашем конструкторе .

Вы потратили так много времени, задавая вопросы здесь, большая часть которых охватывает один и тот же основной материал. Вам почти наверняка будет лучше отдохнуть от StackOverflow и использовать это свободное время для изучения некоторых из тех руководств, с которыми я только что связан (или любых других, которые могут у вас быть в вашем распоряжении).

РЕДАКТИРОВАТЬ (отвечая на ваш комментарий): Вот пример. Это не решит вашу домашнюю проблему, но должно дать вам несколько советов. Удачи. (Кстати, я не скомпилировал это, но я думаю это компилируется.)

class SimpleExample {
    public:
        SimpleExample();
        SimpleExample& operator += (const SimpleExample&);
        friend ostream& operator cout(ostream&, const SimpleExample&);

    private:
        int myData[5];
}

SimpleExample::SimpleExample()
{
    // Initialize a new SimpleExample instance. (Note that myData[i] is
    // the exact same thing as this->myData[i] or (*this).myData[i] . )
    for (int i = 0; i < 5; i++) {
         myData[i] = i;
}

SimpleExample& operator += (const SimpleExample& that)
{
    for (int i = 0; i < 5; i++) {
        myData[i] += that.myData[i];
    }

    return *this;
}

ostream& operator << (ostream& os, const SimpleExample& simp)
{
    for (int i = 0; i < 5; i++) {
        os << that.myData[i] << " ";
    }

    return os;
}
0 голосов
/ 08 февраля 2011

Это предупреждение, а не ошибка.Просто мог (но не должен) просто игнорировать это.

0 голосов
/ 08 февраля 2011

Может быть, это предупреждение рассматривается как ошибка? Вы просто создаете четыре строки, но ничего с ними не делаете.

0 голосов
/ 08 февраля 2011

Компилятор предупреждает , что эти переменные не используются, потому что вы их не используете. Компилятор обеспокоен тем, что вы оставили свой код наполовину реализованным - вы объявили кучу переменных, но еще не использовали их.

Это ошибка , если вы настроили свой компилятор для обработки предупреждений как ошибок.

0 голосов
/ 08 февраля 2011

Только потому, что вы объявляете эти переменные, но никогда не используете их позже в своем коде (насколько мы и компилятор можем видеть).

Полагаю, вы хотите инициализировать эти переменные в конструкторе, чтобы использовать их в других частях вашего кода.
Чтобы это работало, вы должны объявить эти переменные как члены. После этого вы сможете инициализировать их без жалоб «неиспользуемая переменная».

Вот пример переменных-членов:

class TenStrings {
  private:
    char str1[10] = "String 1";
    char str2[10] = "String 2";
    char str3[10] = "String 3";
    char str4[10] = "String 4";


  public:
    TenStrings();
};

TenStrings::TenStrings()
  :str1("String 1"), str2("String 2"), str3("String 3"), str4("String 4"), 
{
}

Этот код объявляет ваши 4 переменные как члены класса TenStrings, а затем инициализирует их перед вводом тела конструктора.

...