Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Charley
5 / 5 / 0
Регистрация: 11.06.2012
Сообщений: 173
#1

Функция возвращает ссылку на статический массив - C++

28.10.2013, 23:52. Просмотров 668. Ответов 6
Метки нет (Все метки)

Мне необходимо чтобы массив pol и mas были обязательно статическими, но постоянно выдает ошибку. Как исправить?
C++
1
2
3
4
5
6
7
8
9
10
11
12
int* func()
{
    int mas[10];
    return mas;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    int pol[10];
    pol=func();
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2013, 23:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция возвращает ссылку на статический массив (C++):

Функция возвращает двумерный статический массив своего класса - C++
Есть класс whirlpool: class whirlpool { public: int *buffer; int len; whirlpool(int length)

Функция возвращает константную ссылку - C++
Можно ли в таком случае возвращать константную ссылку? Не будет никакой опасности? Ведь в функции вроде создается временный объект double...

Функция возвращает не ссылку а само значение переменной на которое оно ссылается - C++
Скажите пожалуйста есть функция `int& my(){return a} которая возвращает ссылку если возвращаемое функцией значение присвоить переменной...

Нужно создать статический массив строк как статический массив указателей на строки. Условние ниже --> - C++
Слова английского текста рассортировать по возрастанию количества заданной буквы в слове. Слова с одинаковым количеством такой буквы...

создать статический массив строк как статический массив указателей на строки, задание ниже --> - C++
Слова английского текста, начинающиеся с гласных букв, рассортировать в алфавитном порядке по первой согласной букве слова. Остальные слова...

Функция возвращает массив - C++
Как сделать чтобы функция возвращала массив(не исползуя указатели):(. К присмеру: ... char v; // //заполнение массива // ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
28.10.2013, 23:55 #2
Цитата Сообщение от Charley Посмотреть сообщение
Мне необходимо чтобы массив pol и mas были обязательно статическими,
Цитата Сообщение от Charley Посмотреть сообщение
int mas[10];
Цитата Сообщение от Charley Посмотреть сообщение
int pol[10];
может добавить слово static

Добавлено через 50 секунд
Цитата Сообщение от Charley Посмотреть сообщение
но постоянно выдает ошибку.
какую?
dzrkot
zzzZZZ...
519 / 349 / 53
Регистрация: 11.09.2013
Сообщений: 1,997
28.10.2013, 23:58 #3
ты создаешь массив в функции, он имеет локальную область действия, т.е. по завершении функции память, выделенная под массив освобождается, а ты пытаешься её вернуть.

Цитата Сообщение от Charley Посмотреть сообщение
pol=func();
такого ещё не встречал)

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

в чём задача вообще?
пс. если ты хочешь присвоить массив, то это надо поэлементно делать
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
29.10.2013, 00:07 #4
Charley, можно static в функции объявить, можно как внешний:
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
25
26
27
28
29
#include <iostream>
#include <windows.h>
using namespace std;
const int ar_sz=10;
int *foo();
int &foo(int i);
int main()
{
SetConsoleCP (1251); SetConsoleOutputCP (1251);
for(int i=0; i< ar_sz; ++i) foo(i) = i*i;
for(int i=0; i< ar_sz; ++i) cout << foo(i)<<" ";
//или
int *ptr_to_ar=foo();
for(int i=0; i< ar_sz; ++i) ptr_to_ar[i] = i*i;//
for(int i=0; i< ar_sz; ++i) cout << foo(i)<<" ";
cout << endl;
system ("pause" );
    return 0;
}
//это может быть в отд файле)
int static_arr[ar_sz];
 
int &foo(int i){
return static_arr[i];
}
 
int *foo(){
return static_arr;
}
Важно чтобы ей было видно этот массив. А зачем это нужно?
Charley
5 / 5 / 0
Регистрация: 11.06.2012
Сообщений: 173
29.10.2013, 12:34  [ТС] #5
dzrkot, я не знаю как сделать так: whirlpool *temp = new whirlpool[10], где whirlpool мой клас
MrGluck
Модератор
Эксперт CЭксперт С++
7210 / 4376 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
29.10.2013, 12:36 #6
Можете обернуть 10 объектов внутрь другого класса или структуры. Или же воспользоваться контейнерами STL.
А лучше передавать массив в качестве аргумента и вести с ним работу внутри функции
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
29.10.2013, 14:09 #7
Цитата Сообщение от Charley Посмотреть сообщение
я не знаю как сделать так: whirlpool *temp = new whirlpool[10], где whirlpool мой клас
никаких проблем, если есть конструктор по умолчанию.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2013, 14:09
Привет! Вот еще темы с ответами:

Функция, которая возвращает массив - C++
Здравствуйте. Подскажите, пожалуйста, как правильно написать код - есть функция; она должна вернуть массив, который создается в этой же...

Функция возвращает двумерный массив - C++
У кого-то есть пример возврата функцией массива? Я пыталась сделать как с обычной переменной - оно компилируется, но не возфращает...

Функция, которая возвращает массив - C++
Как сделать так чтобы функция возвращала указатель на рандомно сгенерированный массив. Входящими данными будет количество строк и столбцов...

Функция, что возвращает динамический массив - C++
Функция возвращает динамический массив int *A1 (BYTE val) { int *mass = new int; //инициализация массива return mass; }...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
29.10.2013, 14:09
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru