Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2010, 14:18   #1
BadProgrammer
Пользователь
 
Аватар для BadProgrammer
 
Регистрация: 09.01.2010
Сообщений: 14
По умолчанию Массив структур, как возвращаемое значение функции

Здравствуйте!
Дело вот какое, господа:
Есть функция
Код:
Point * vectorForce (class enclave& obj1, class enclave& obj2)
{
	struct Point * Tmp[100];
	Int64 K, B;//Для уравнения прямой
	UInt32 I = 0;//Для считывания в массив
	K = (obj1.y - obj2.y)/(obj1.x - obj2.x);
	B = obj1.y - K * obj2.x;
	UInt64 y_Min, x_Min, y_Max, x_Max;//Для обозначения точкоклетки
	y_Min = Math::Min(obj1.y, obj2.y);
	y_Max = Math::Max(obj1.y, obj2.y);
	x_Min = Math::Min(obj1.x, obj2.x);
	x_Max = Math::Max(obj1.x, obj2.x);
	for (y_Min; y_Min < y_Max; y_Min++)
	{
		for (x_Min; x_Min < x_Max; x_Min++)
		{
			if (y_Min == (K * x_Min + B))
			{
				&Tmp[I].x = x_Min;
				&Tmp[I].y = y_Min;
				I = I + 1;
			};
		};
	}
	return *Tmp;
}
Есть структура:
Код:
struct Point //Массив структур точкоклеток
{
	UInt64 x;
	UInt64 y;
};
Выдает такое:
Цитата:
1>vect.cpp(223): error C2440: инициализация: невозможно преобразовать "unsigned __int64 *" в "unsigned __int64"
1> Не существует контекста, в котором такое преобразование возможно
1>vect.cpp(234): error C2228: выражение слева от ".x" должно представлять класс, структуру или объединение
1> тип: Point *
1> возможно, имеется в виду "->"
1>vect.cpp(235): error C2228: выражение слева от ".y" должно представлять класс, структуру или объединение
1> тип: Point *
1> возможно, имеется в виду "->"
"->" вместо "." подставлял - выдает кучу ошибок на строчках с инициацией переменных.
Я, конечно, понимаю, наверно совершил нубскую ошибку, но в ссылках/идентификаторах я не смыслю почти ничего.
P.S. типы данных/некоторые функции с .NET. Весь код, кроме этой функции, исправно работает.
BadProgrammer вне форума Ответить с цитированием
Старый 08.11.2010, 17:49   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

1. Массив объявлен, но под элементы массива память не выделяется.
2. Что за слово class перед параметром? Не помню такого в плюсах что-то. Может компилятором восприниматься не так, как планируете.
3. Управление памятью корявое. Чревато ошибками. Не принято так писать на плюсах.
Я бы сделал так:
Код:
int vectorForce(enclave& const obj1,  // Константный параметр, т.к. в функции не изменяется
                      enclave& const obj2,  // см. выше
                      Point** result,          // Сюда будет записываться результат
                      int max_points)         // Передаём количество элементов, которое может быть записано в result
{
	...
	return count; // Возвращаем количество элементов, записанных в result. Оно всегда должно быть меньше или равно параметру max_points, иначе будет порча памяти
}
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как ввести данные в динамический массив структур? sunplant Общие вопросы C/C++ 6 28.01.2011 17:10
Значение функции записать в массив Gladiator Общие вопросы C/C++ 1 26.03.2010 12:55
Как вводить полные инициалы в массив структур и как при выводе не отображать слово none несколько раз? -ushёl- Помощь студентам 2 02.01.2010 14:13
Возвращаемое значение функции в c++ sleevman Помощь студентам 2 19.10.2009 23:21
Возвращаемое функцией значение = находившемуся в ячейке значению motorway Microsoft Office Excel 8 14.07.2009 08:53