Несколько вопросов по C++

Модератор: Модераторы разделов

Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Контактная информация:

Re: Несколько вопросов по C++

Сообщение Assuri »

Код: Выделить всё

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

Re: Несколько вопросов по C++

Сообщение Uncle_Theodore »

А, ну да, в классе не получится...
Присваивай поэлементно. Присваивание списком делает переменную static.
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Контактная информация:

Re: Несколько вопросов по C++

Сообщение Assuri »

Uncle_Theodore писал(а):
09.07.2007 20:05
А, ну да, в классе не получится...
Присваивай поэлементно. Присваивание списком делает переменную static.

Решил, что присваивание поэлементно - извращение и сделал texture глобальной переменной. Нормальное решение?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Несколько вопросов по C++

Сообщение Uncle_Theodore »

-DooM- писал(а):
09.07.2007 20:30
Uncle_Theodore писал(а):
09.07.2007 20:05
А, ну да, в классе не получится...
Присваивай поэлементно. Присваивание списком делает переменную static.

Поэлементно в private можно присваивать?

Не понял вопроса. Функции класса могут изменять приватные поля этого класса. Или что ты имеешь в виду?
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Контактная информация:

Re: Несколько вопросов по C++

Сообщение Assuri »

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
Контактная информация:

Re: Несколько вопросов по C++

Сообщение Assuri »

Изучаю указатели и не пойму почему в этом коде результатом является не то, что ожидается:

Код:

#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
Контактная информация:

Re: Несколько вопросов по C++

Сообщение stopka2top »

-DooM-
А условие задачи где?
Затрать 15 минут в неделю. Сделай OpenOffice.org лучше Сделай OpenOffice.org лучше + FAQ по OO.o
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Контактная информация:

Re: Несколько вопросов по C++

Сообщение Assuri »

stopka2top писал(а):
15.07.2007 10:54
-DooM-
А условие задачи где?

Отсортировать массив в алфовитном порядке. Не важно, по убыванию или по возрастанию.
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks
Контактная информация:

Re: Несколько вопросов по C++

Сообщение Alxn1 »

Посмотрите на эту функцию повнимательнее:

Код: Выделить всё

void sortp ( char* p1, char* p2 )
{
    char* temp = p1;
    p1 = p2;
    p2 = temp;
}


Для корректной работы нужно бы изменить её прототип на

Код: Выделить всё

void sortp( char **p1, char **p2 )


И внутренности переписать, естено.
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Контактная информация:

Re: Несколько вопросов по C++

Сообщение Assuri »

Alxn1 писал(а):
15.07.2007 14:59
Посмотрите на эту функцию повнимательнее.....
И внутренности переписать, естено.

Вы правы, но я не понимаю: почему?
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Несколько вопросов по C++

Сообщение v04bvs »

-DooM- писал(а):
16.07.2007 09:59
Alxn1 писал(а):
15.07.2007 14:59
Посмотрите на эту функцию повнимательнее.....
И внутренности переписать, естено.

Вы правы, но я не понимаю: почему?

p1 = p2
Здесь изменяется переменная, локальная для функции sortp, это изменение никак не отражается на переменной, передаваемой как параметр этой функции.
Это прямое следствие того, что в C аргументы функции всегда передаются по значению. Если необходима имитация передачи аргумента по ссылке, надо передавать адрес переменной.
Спасибо сказали:
Аватара пользователя
Assuri
Сообщения: 678
Статус: #include <brain.h>
ОС: Fedora 12
Контактная информация:

Re: Несколько вопросов по C++

Сообщение Assuri »

v04bvs писал(а):
16.07.2007 10:28
p1 = p2
Здесь изменяется переменная, локальная для функции sortp, это изменение никак не отражается на переменной, передаваемой как параметр этой функции.
Это прямое следствие того, что в C аргументы функции всегда передаются по значению. Если необходима имитация передачи аргумента по ссылке, надо передавать адрес переменной.

Большое спасибо за пояснение. Теперь все понятно.
Спасибо сказали:
Ответить