Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344

Как вставить массив в функцию, не объявляя его?

17.11.2022, 01:49. Показов 1858. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всех приветствую. Есть функция:
C++
1
    bool UpdateGamesFromUrl(CString url, CString res_path, int beta = 0, int* filters = NULL,int size=0);
Я хочу вставить туда одноэлементный массив,не объявляя его.
C++
1
2
UpdateGamesFromUrl(L"some_url",
        L"some_file_name", {2}, 1);
Но у меня выдаётся ошибка: аргумент типа "int" несовместим с параметром типа "int *". Можно ли как-то вставить массив в функцию напрямую,не объявляя его отдельно,или переделать функцию так,чтобы это можно было сделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.11.2022, 01:49
Ответы с готовыми решениями:

Можно ли переопределить функцию-член в унаследованном классе, не объявляя её виртуальной в родительском?
Предположим, есть абстрактный класс Worker. class Worker { protected: char *myName; int value; private: ...

Как взять полученный результат из одного массива и вставить его в другой массив?
Доброго времени суток. Хотел спросить как можно взять полученный результат из одного метода и вставить его в другой для продолжения...

Массив: Вставить некоторое заданное число b в массив, сохраняя его упорядоченность.
Дан некоторый упорядоченный массив чисел (отсортированный в порядке возрастания). Написать программу, позволяющую вставить некоторое...

30
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.11.2022, 00:15
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от КАВ Посмотреть сообщение
Как вставить массив в функцию, не объявляя его?
Цитата Сообщение от КАВ Посмотреть сообщение
bool UpdateGamesFromUrl(CString url, CString res_path, int beta = 0, int* filters = NULL,int size=0);
С такой сигнатурой функции - никак.

Цитата Сообщение от КАВ Посмотреть сообщение
Это не дало ответа на мои вопросы.
Потому что не ясен вопрос.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13219 / 6851 / 1826
Регистрация: 18.10.2014
Сообщений: 17,375
18.11.2022, 00:16
Цитата Сообщение от КАВ Посмотреть сообщение
просто я читал,что int* filters и int filters[],это одно и то же.
Только при объявлении параметров функций. В остальных случаях - ничего общего.

Цитата Сообщение от КАВ Посмотреть сообщение
А под объявить я имею ввиду:
C++
1
2
int numbers[2] = {1,2};
fu(2,numbers);
А я хочу просто:
C++
1
foo(2,{1,2});
Приблизительно это можно сделать так

C++
1
2
using A = int[];
foo(2, A{1,2});
Без дополнительного объявления типа - не получится.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
18.11.2022, 00:17
Цитата Сообщение от КАВ Посмотреть сообщение
или переделать функцию так,чтобы это можно было сделать?
Переделали функцию что бы это можно было делать.
Что еще нужно ?
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
18.11.2022, 00:20  [ТС]
В общем,как я понял,для моей задачи подойдёт вектор. см Как вставить в строку все элементы массива через запятую в поле ввода mfc
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13219 / 6851 / 1826
Регистрация: 18.10.2014
Сообщений: 17,375
18.11.2022, 00:26
Цитата Сообщение от КАВ Посмотреть сообщение
В общем,как я понял,для моей задачи подойдёт вектор
В смысле?

1. Если у вас есть возможность исправить объявление UpdateGamesFromUrl не вектор, то зачем тогда было вообще весь огород городить?

2. Притягивать за уши вектор с его динамическим распределением памяти туда, где нужен лишь мимолетный временный массив - странная идея.
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
18.11.2022, 05:06  [ТС]
Первый раз вижу,чтобы через using можно было объявлять дополнительный тип. Интересно,как это называется в c++? Вот этот код,с объявлением дополнительного типа достаточно поместить в cpp файле,или он должен быть в заголовочном файле тоже?

Добавлено через 4 минуты
2. Притягивать за уши вектор с его динамическим распределением памяти туда, где нужен лишь мимолетный временный массив - странная идея.
Я точно не могу знать длинну массива,которую захочет использовать пользователь. Максимум она будет равна 5,но это максимум.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13219 / 6851 / 1826
Регистрация: 18.10.2014
Сообщений: 17,375
18.11.2022, 08:16
Цитата Сообщение от КАВ Посмотреть сообщение
Первый раз вижу,чтобы через using можно было объявлять дополнительный тип. Интересно,как это называется в c++?
С появления С++11 прошло уже 11 лет...

Цитата Сообщение от КАВ Посмотреть сообщение
Вот этот код,с объявлением дополнительного типа достаточно поместить в cpp файле,или он должен быть в заголовочном файле тоже?
Не понимаю вопроса. Он должен быть там, где он нужен. При чем здесь заголовочные файлы?

Цитата Сообщение от КАВ Посмотреть сообщение
Я точно не могу знать длинну массива,которую захочет использовать пользователь. Максимум она будет равна 5,но это максимум.
Тем более странно притягивать сюда за уши вектор.

Еще раз: вы можете менять объявление функции?
0
 Аватар для Tanya2007
593 / 230 / 72
Регистрация: 13.05.2020
Сообщений: 412
18.11.2022, 09:58
Цитата Сообщение от КАВ Посмотреть сообщение
Я хочу вставить туда одноэлементный массив,не объявляя его.
Как вариант без объявления массива можно сделать так, но это только для одноэлементного массива отработает:

C++
1
  UpdateGamesFromUrl(L"some_url",L"some_file_name", 0, &(*new int[1] = 2), 1);
Но тогда в самой функции UpdateGamesFromUrl, после работы с переменной filters, когда этот массив уже не будет нужен, необходимо очищать память, выделенную через new:

C++
1
delete [] filters;
0
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
18.11.2022, 16:57  [ТС]
Тем более странно притягивать сюда за уши вектор.
Поскольку:
1. Я хочу,чтобы я мог сразу вставлять значения в функцию,не объявляя дополнительных переменных.
2. у вектора проще находить длину,и мне не надо вводить параметр size.
вы можете менять объявление функции?
Конечно. Вообще мне нужно сформировать url,по которому будет делаться запрос. В параметре запроса будет filters,т.е список значений,через запятую. Этот список я хочу брать из массива. Вообще по хорошему мне нужна функция с неограниченным количеством аргументов,но поскольку я прочитал,что с получением аргументов много мороки,я решил остановиться на массиве. Сейчас я использую вектор,но там есть некоторые проблемы. Вот что примерно я хочу получить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
bool LauncherDialog::UpdateGamesFromUrl(CString url,CString res_path,int beta, std::vector<int> filters) {
    if (beta != 0 || filters.size()>0) url += L"?";
    if (beta != 0) url += L"beta=" + beta;
    if (filters.size()>0) {
        filters.shrink_to_fit();
        CString values=beta!=0?L"&acc=":L"acc=";
        for (int a = 0; a < filters.size(); a++) values += a < filters.size() - 1 ? (filters[a] + L",") : L"" + filters[a];
        url += values;
        filters.clear();
    }
...
}
Т.е мне нужно собрать строку из массива. По сути максимальное число элементов,которое мне нужно - 4-5,но количество может быть и меньше и даже 0 и массив может быть NULL,что и есть по умолчанию. Конечно,в некоторых случаях я буду объявлять массив,но для тестирования и быстроты хотелось бы,чтобы эти значения можно было вставлять напрямую через {}.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
18.11.2022, 19:48

Не по теме:

Цитата Сообщение от КАВ Посмотреть сообщение
filters.shrink_to_fit();
Зачем это делается?



Добавлено через 18 минут
Цитата Сообщение от КАВ Посмотреть сообщение
Т.е мне нужно собрать строку из массива.
Для того, чтобы собралось в онлайн компиляторе, заменил CString на std::wstring:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <string>
 
bool UpdateGamesFromUrl(std::wstring url, std::wstring res_path, int beta, std::initializer_list<int> filters) {
    if (beta != 0 || filters.size() > 0) url += L"?";
    if (beta != 0) url += L"beta=" + std::to_wstring(beta);
    if (filters.size() > 0) {
        auto beg = filters.begin();
        std::wstring values(beta != 0 ? L"&acc=" : L"acc=");
        values += std::to_wstring(*beg);
        for(++beg; beg != filters.end(); ++beg) {
            values += L"," + std::to_wstring(*beg);
        }
        url += values;
    }
    std::wcout << url; // это только для демонстрации
    //..........
    return true;
}
 
int main()
{
    UpdateGamesFromUrl(L"http://test/", L"path", 1, {1,2,3,4});
}
Доказательство работоспособности: https://rextester.com/WSKVL42678

Т.к. вы ждете готовых рабочих решений сразу оговариваюсь, что вам необходимо самостоятельно заменить std::wstring на CString и самостоятельно найти аналог\замену функции std::to_wstring, которая конвертирует число в строку. В остальном этот концепт полностью отвечает на вопрос из стартового сообщения, с учетом тех вводных, которые уже были даны (если есть какие-то новые вводные, или старые, но не озвученные прежде, то претензии к их отсутствию в коде не принимаются по очевидным причинам).
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13219 / 6851 / 1826
Регистрация: 18.10.2014
Сообщений: 17,375
18.11.2022, 20:51
Цитата Сообщение от Tanya2007 Посмотреть сообщение
Как вариант без объявления массива можно сделать так, но это только для одноэлементного массива отработает:

C++
1
  UpdateGamesFromUrl(L"some_url",L"some_file_name", 0, &(*new int[1] = 2), 1);
Это - странный способ, но не ясно, зачем вы делали все эти извращения с * и &, и почему только "для одноэлементного массива". Кто вам мешает сделать

C++
1
  UpdateGamesFromUrl(L"some_url",L"some_file_name", 0, new int[]{ 1, 2, 3, 4, 5 }, 5);
?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.11.2022, 20:51

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

Как задать цикл внутри кусочно заданной функции или взять массив значений из цикла и вставить в кусочную функцию
Как задать цикл внутри кусочно заданной функции или взять массив значений из цикла и вставить в кусочную функцию?? Ибо у меня при...

Зачем нужен массив указателей на функцию и как его использовать?
народ подскажите пожалуйста, зачем нужен массив указателей на функцию и как его использовать.

Как одномерный массив превратить в двумерный и вызвать потом его в новую функцию?
Pазработать функцию, которая на входе принимает одномерный массив. Одномерный массив размером M * N элементов превратить в двумерный...

Как передать в функцию не весь массив целиком, а каждый его элемент по отдельности
Собственно, есть некий одномерный статический массив, предположим, размерности 10, который одной функцией заполняется вручную с клавиатуры,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru