Модератор: Модераторы разделов
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 09.07.2007 19:51
Код: Выделить всё
string texture [ languages ] [ strings ] =
Строка 27:{
{
"а","б","в"
},
{
"г","д","е"
}
Строка 54: };
main.cpp:27: error: a brace-enclosed initializer is not allowed here before ‘{’ token
main.cpp:54: error: ISO C++ forbids initialization of member ‘texture’
main.cpp:54: error: making ‘texture’ static
main.cpp:54: error: invalid in-class initialization of static data member of non-integral type ‘std::string [2][12]’
Что-то не работает. Кстати, инициализация идет в классе, с доступом private.
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64
Сообщение
Uncle_Theodore » 09.07.2007 20:05
А, ну да, в классе не получится...
Присваивай поэлементно. Присваивание списком делает переменную static.
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 09.07.2007 20:30
Uncle_Theodore писал(а): ↑ 09.07.2007 20:05
А, ну да, в классе не получится...
Присваивай поэлементно. Присваивание списком делает переменную static.
Решил, что присваивание поэлементно - извращение и сделал texture глобальной переменной. Нормальное решение?
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64
Сообщение
Uncle_Theodore » 09.07.2007 20:34
-DooM- писал(а): ↑ 09.07.2007 20:30
Uncle_Theodore писал(а): ↑ 09.07.2007 20:05
А, ну да, в классе не получится...
Присваивай поэлементно. Присваивание списком делает переменную static.
Поэлементно в private можно присваивать?
Не понял вопроса. Функции класса могут изменять приватные поля этого класса. Или что ты имеешь в виду?
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 09.07.2007 20:59
Uncle_Theodore писал(а): ↑ 09.07.2007 20:34
-DooM- писал(а): ↑ 09.07.2007 20:30
Uncle_Theodore писал(а): ↑ 09.07.2007 20:05
А, ну да, в классе не получится...
Присваивай поэлементно. Присваивание списком делает переменную static.
Поэлементно в private можно присваивать?
Не понял вопроса. Функции класса могут изменять приватные поля этого класса. Или что ты имеешь в виду?
Не успел изменить вопрос.
Решил, что присваивание поэлементно - извращение и сделал texture глобальной переменной. Нормальное решение?
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 15.07.2007 10:18
Изучаю указатели и не пойму почему в этом коде результатом является не то, что ожидается:
Код:
#include <iostream>
#include <string.h>
using namespace std;
const int DAYS = 7;
void daysort ( char** );
void sortp (char*, char* );
int main()
{
char* arrptrs [ DAYS ] = { "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье" };
daysort( arrptrs );
cout << "--------------------------------\n";
for ( int i =0; i < DAYS; i++)
cout << *(arrptrs + i) << '\n';
return 0;
}
void daysort(char** ptr )
{
for ( int i = 0; i < DAYS -1; i++)
for ( int j = i + 1; j < DAYS; j++)
{
if ( strcmp(*(ptr + j), *(ptr + i )) > 0 )
sortp(*(ptr+j), *(ptr + i) );
}
}
void sortp ( char* p1, char* p2 )
{
char* temp = p1;
p1 = p2;
p2 = temp;
}
В принипе все должно отсортировать и понедельник должен быть после вторника, а выводится так, как было при первой инициализации.
В блок условия входит.
stopka2top
Сообщения: 76
Сообщение
stopka2top » 15.07.2007 10:54
-DooM-
А условие задачи где?
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 15.07.2007 12:59
stopka2top писал(а): ↑ 15.07.2007 10:54
-DooM-
А условие задачи где?
Отсортировать массив в алфовитном порядке. Не важно, по убыванию или по возрастанию.
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks
Сообщение
Alxn1 » 15.07.2007 14:59
Посмотрите на эту функцию повнимательнее:
Код: Выделить всё
void sortp ( char* p1, char* p2 )
{
char* temp = p1;
p1 = p2;
p2 = temp;
}
Для корректной работы нужно бы изменить её прототип на
И внутренности переписать, естено.
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 16.07.2007 09:59
Alxn1 писал(а): ↑ 15.07.2007 14:59
Посмотрите на эту функцию повнимательнее.....
И внутренности переписать, естено.
Вы правы, но я не понимаю: почему?
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux
Сообщение
v04bvs » 16.07.2007 10:28
-DooM- писал(а): ↑ 16.07.2007 09:59
Alxn1 писал(а): ↑ 15.07.2007 14:59
Посмотрите на эту функцию повнимательнее.....
И внутренности переписать, естено.
Вы правы, но я не понимаю: почему?
p1 = p2
Здесь изменяется переменная, локальная для функции sortp, это изменение никак не отражается на переменной, передаваемой как параметр этой функции.
Это прямое следствие того, что в C аргументы функции всегда передаются по значению. Если необходима имитация передачи аргумента по ссылке, надо передавать адрес переменной.
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Сообщение
Assuri » 16.07.2007 17:54
v04bvs писал(а): ↑ 16.07.2007 10:28
p1 = p2
Здесь изменяется переменная, локальная для функции sortp, это изменение никак не отражается на переменной, передаваемой как параметр этой функции.
Это прямое следствие того, что в C аргументы функции всегда передаются по значению. Если необходима имитация передачи аргумента по ссылке, надо передавать адрес переменной.
Большое спасибо за пояснение. Теперь все понятно.