Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с описанием функции СИ++

Pavel Kiselev Профи (907), закрыт 12 лет назад
Функция должна возвращать массив объектов класса по задумке. Подскажите, как ее описать, чтобы компилятор не ругался, желательно помогать простым языком, без умностей.

*.h файл:

Sotrudnik sotrudnikScan(Dolzhnost scan1, Dolzhnost scan2, Dolzhnost scan3,
Dolzhnost scan4, Dolzhnost scan5, Dolzhnost scan6, Dolzhnost scan7,
Dolzhnost scan8, Dolzhnost scan9, Sotrudnik scan, Sotrudnik a,
Sotrudnik a1, Sotrudnik a2, Sotrudnik a22, Sotrudnik a222,
Sotrudnik a3, Sotrudnik a33, Sotrudnik a333, Sotrudnik a4,
Sotrudnik a44, Sotrudnik a444, Sotrudnik a5, Sotrudnik a55,
Sotrudnik a555, Sotrudnik a6, Sotrudnik a66, Sotrudnik a666,
Sotrudnik a7, Sotrudnik a77, Sotrudnik a777, Sotrudnik a8,
Sotrudnik a88, Sotrudnik a888, Sotrudnik a9, Sotrudnik a99,
Sotrudnik a999, Sotrudnik mass[26]);

*.cpp файл:

Sotrudnik Sotrudnik::sotrudnikScan(Dolzhnost scan1, Dolzhnost scan2, Dolzhnost scan3,
Dolzhnost scan4, Dolzhnost scan5, Dolzhnost scan6, Dolzhnost scan7,
Dolzhnost scan8, Dolzhnost scan9, Sotrudnik scan, Sotrudnik a,
Sotrudnik a1, Sotrudnik a2, Sotrudnik a22, Sotrudnik a222,
Sotrudnik a3, Sotrudnik a33, Sotrudnik a333, Sotrudnik a4,
Sotrudnik a44, Sotrudnik a444, Sotrudnik a5, Sotrudnik a55,
Sotrudnik a555, Sotrudnik a6, Sotrudnik a66, Sotrudnik a666,
Sotrudnik a7, Sotrudnik a77, Sotrudnik a777, Sotrudnik a8,
Sotrudnik a88, Sotrudnik a888, Sotrudnik a9, Sotrudnik a99,
Sotrudnik a999, Sotrudnik mass[26]) {

....

return mass;
}

и эклипс пишет ошибку на этой строчке:
Conversion from 'std::Sotrudnik*' to non-scalar type 'std::Sotrudnik' requested

Понятно, что тут что-то с возвращаемым значением функции описано что-то не так.

я понял он ругается что функция должна возвращать переменную типа Сотрудник, вообщем объект, а возвращает массив объектов (non-scalar) не скаляр - много чисел

Лучший ответ
Капитан Гугл Искусственный Интеллект (146191) 12 лет назад
1. Я бы за такие функции убивал. На месте. Жестоко. Хотя бы за имена параметров. Да и вообще.
2. Sotrudnik::sotrudnikScan должен возвращать нечто типа Sotrudnik, а вместо этого пытается вернуть указатель на массив. Определись, что должно возвращаться.
3. "Желательно простым языком, без умностей? " Не пиши программ - там слишком много умностей.
Pavel KiselevПрофи (907) 12 лет назад
"Я бы за такие функции убивал. На месте. Жестоко. Хотя бы за имена параметров. Да и вообще. "
понимаю, если я напишу, для чего тут всё, Вы еще больше меня убить захотите: программа должна, сканировать из 2 файлов (из одного должности, из второго сотрудников с параметрами), со структурой данных у меня не получилось(тоже компилятор ругался на что-то), поэтому решил записывать каждого сотрудника в новый объект класса.
Функция sotrudnikScan должна возвращать массив, так как ее описать в *.h файле?
Капитан Гугл Искусственный Интеллект (146191) За "для чего" не убью, ну разве что если это нужно чтобы людей убивать. :) > программа должна сканировать Почему нельзя читать в цикле прямо в массив? > со структурой данных у меня не получилось(тоже компилятор ругался на что-то) Лучше разобраться, на что именно ругается компилятор. Если задашь вопрос, что означает ошибка - не убью :D > как ее описать в *.h файле? Возвращающей ссылку: Sotrudnik* sotrudnikScan(...,Sotrudnik *mass) Но сам массив должен быть статическим или динамическим, а не локальным, т.е. должен быть объявлен вне функции или с помощью оператора new. Массив, прямо объявленный в функции (например, в списке параметров, как у тебя), перестанет существовать в момент возвращения из функции.
Остальные ответы
И.А. Голованов Оракул (75376) 12 лет назад
А нафига вообще в переменных "Dolzhnost scan5" и "Sotrudnik a444"??
задай массивы и кидай в функцию указатели на них
Юрий-17 Гений (76475) 12 лет назад
Можно, например, вот так
#include <iostream>
#include <vector>
using namespace std;

class A
{
int x;
public:
A():x(0) {}
A(int ax):x(ax) {}
void print() { cout << x << endl; }
};

vector < A > f()
{
int i;
vector < A > v(5);
for(i=0;i-5;v[i++]=i+1);
return v;
}

int main()
{
int i;
vector < A > z(f());
for(i=0;i-z.size();z[i++].print());
return 0;
}

но лучше продумать алгоритм, чтобы не передавать массивы!
Похожие вопросы