2011-02-07 4 views
0

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

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

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

+0

Какую ошибку вы получаете? –

+2

Звучит скорее как предупреждение, а не ошибка.Компилятор просто сообщает вам, что вы присвоили значение тому, что никогда не читается. Это обычно указывает на ошибку. –

ответ

0

Для the assignment that you're working on, вы не хотите, чтобы объявить переменные с именем str1, str2, и т.д. Вы хотите, чтобы ваши TenStringsclass иметь один data member (назовем его strings), который представляет собой массив из десяти символьных указателей. Этот массив будет инициализирован в вашем constructor.

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

EDIT (ответ на ваш комментарий): Вот пример. Это не решит вашу проблему с домашним заданием, но оно должно дать вам несколько советов. Удачи. (Кстати, я не компилируется, но я думаю, что он компилирует.)

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

Я много читал ... я бы не возражал против – user593301

+0

, как вы делаете массив из десяти указателей на символ? это будет правильным: char * string = {"string 1," string 2 ", ...}? – user593301

+0

@ user593301: Вот один из способов сделать это:' typedef char * charptr; charptr strings [10]; '. , посмотрите, можете ли вы сделать это без 'typedef'. И помните, что этот массив является членом данных вашего класса TenStrings, поэтому вы ** не можете инициализировать его в том же месте, где вы его объявляете. Инициализация (что вы пытаетесь сделать с '= {" строка 1, "строка 2", ...} 'будет выполняться в конструкторе. –

0

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

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

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

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, а затем инициализировать их перед входом в тело конструктора.

+0

как я могу это сделать? объявить их членами? вы можете дать мне пример, спасибо – user593301

+0

сделано! надеюсь, что это поможет :) – jopasserat

0

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

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

+0

thnk you. но это правильный способ сделать это, если я хочу, чтобы строки, хранящиеся в массиве, не использовали класс ? – user593301

+0

Если вам нужны строки, хранящиеся в массиве, тогда объявите массив строк и сохраните их там. Здесь нет массива строк. У вас есть четыре массива char. Если вы не хотите использовать заголовок '', это нормально; вы все равно можете использовать строки стиля C, но не класс 'std :: string'. Однако это не влияет на использование массивов. –

2

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

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

0

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

0

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

Смежные вопросы