Название: Передача массива в метод класса Отправлено: StatuS74 от Февраль 27, 2012, 08:22 Объявил мето дв классе
Код: void FullTestAdapter (QString [11][11]); в самом классе делаю следующее Код: void test::FullTestAdapter(QString Data[11][11]) Код: QString DataTester [11][11]; Не могу понять в чем проблема если типы одинаковые Название: Re: Передача массива в метод класса Отправлено: Kurles от Февраль 27, 2012, 10:48 Тебе же компилятор подсказывает, где именно проблема.
Код А вообще стоит почитать, что представляют собой встроенные массивы в С++. Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 27, 2012, 10:55 А вообще стоит почитать, что представляют собой встроенные массивы в С++. И использовать контейнеры:) Название: Re: Передача массива в метод класса Отправлено: Kurles от Февраль 27, 2012, 11:00 И да, код
Код
а именно часть Код не пройдет, ибо в с++ возможна лишь поэлементное копирование массивов, так как массив в с++ по сути есть указатель. Название: Re: Передача массива в метод класса Отправлено: StatuS74 от Февраль 27, 2012, 11:02 а я думал в с++ можно как в с# просто один массив к другому приравнять
Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 27, 2012, 11:04 а я думал в с++ можно как в с# просто один массив к другому приравнять Нельзя Название: Re: Передача массива в метод класса Отправлено: StatuS74 от Февраль 29, 2012, 13:20 У меня новая беда с массивами тут.
Делаю коннект,а возвращается мне false (коннекта нету). подскажите в чем я ошибся ? Код: connect (t,SIGNAL(sig_update(QString[][])),SLOT(UpdateData(QString[][])),Qt::QueuedConnection); Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 29, 2012, 13:25 Не передавай в сигнал-слот обычные массивы, используй QList
Название: Re: Передача массива в метод класса Отправлено: StatuS74 от Февраль 29, 2012, 13:33 А он подойдет для передачи одномерного массива ?
Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 29, 2012, 13:35 Название: Re: Передача массива в метод класса Отправлено: StatuS74 от Февраль 29, 2012, 13:37 перепутал,мне многомерный массив надо передавать.
Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 29, 2012, 13:38 перепутал,мне многомерный массив надо передавать. Разложи в одномерный старым дедовским методом и передавай Название: Re: Передача массива в метод класса Отправлено: StatuS74 от Февраль 29, 2012, 13:42 ругается на void UpdateData(QList,int);
Говорит 'QList' is not a type Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 29, 2012, 13:43 <QList> подключал?
А шаблонный параметр листу кто указывать будет? Название: Re: Передача массива в метод класса Отправлено: StatuS74 от Февраль 29, 2012, 13:44 Конечно подключал
Название: Re: Передача массива в метод класса Отправлено: StatuS74 от Февраль 29, 2012, 13:46 А нет другого варианта передать весь массив сразу ?
Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 29, 2012, 13:47 QList нормальный и безопасный вариант. Шаблонный параметр ему укажи только. Или QStringList юзай
Название: Re: Передача массива в метод класса Отправлено: Igors от Февраль 29, 2012, 14:33 А нет другого варианта передать весь массив сразу ? Код Философия люмпена была хорошо описана М. Горьким в его ранних рассказах :) Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 29, 2012, 14:53 Пробрасывать через QEventLoop указатель на массив, созданный на стеке в методе? мда...
Название: Re: Передача массива в метод класса Отправлено: Igors от Февраль 29, 2012, 15:26 Пробрасывать через QEventLoop указатель на массив, созданный на стеке в методе? мда... Не вижу в теме упоминания о QEventLoop/QueiedConnection. А вот передача 121 элемента по значению - ото действительно "мда" (говнокод убивающий машину)Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 29, 2012, 15:29 Пробрасывать через QEventLoop указатель на массив, созданный на стеке в методе? мда... Не вижу в теме упоминания о QEventLoop/QueiedConnection. А вот передача 121 элемента по значению - ото действительно "мда" (говнокод убивающий машину)Прямо в приведенном тобой коде коннект происходит через Qt::QueuedConnection. Да и в исходном сообщении тоже. Если че, то QStringList не копирует данные при передаче, там SharedData Название: Re: Передача массива в метод класса Отправлено: Igors от Февраль 29, 2012, 16:57 Прямо в приведенном тобой коде коннект происходит через Qt::QueuedConnection. Да и в исходном сообщении тоже. Точно, это я не доглядел. Подправил, спасибоЕсли че, то QStringList не копирует данные при передаче, там SharedData С QueuedConnection - дело темное. Как бы не копирует дважды. Во всяком случае не видно никакой необходимости в передаче таких данных по значению Название: Re: Передача массива в метод класса Отправлено: mutineer от Февраль 29, 2012, 17:10 При передаче указателя через QEventLoop возникает вопрос - а что будет, если эти данные удалят до того, как слот вызовется? С QStringList никаких проблем не будет (как не будет и копирования 121 строки до тех пор, пока они не меняются)
Название: Re: Передача массива в метод класса Отправлено: Igors от Февраль 29, 2012, 18:54 При передаче указателя через QEventLoop возникает вопрос - а что будет, если эти данные удалят до того, как слот вызовется? С QStringList никаких проблем не будет (как не будет и копирования 121 строки до тех пор, пока они не меняются) Нужен 2-мерный массив, поэтому QVector <QStringList> > или QList <QStringList> >, а его нужно будет регистрировать, устанавливать размеры на 11 - в общем, мелкие заботы, хотя конечно это цивильное решение. Возня с 11х11 была бы понятна со старым С кодом/структурами но если элемент QString - то явно не в масть. Насчет "никаких проблем не будет" - не уверен. Нужно как-то хранить аргумент поданный по значению до тех пор пока не вызовется слот. А как это сделать в общем виде? Не изучал подробно но полагаю что он сериализуется, а перед вызовом слота де-сериализуется. И это совсем не так дешево как обычный implicit sharing А главное - ну зачем лезть в этот огород если проще и лучше установить соглашения типа "кто создает и кто удаляет". |