Задать вопрос

Как передать указатель на массив в качестве аргумента функции?

Работаю в Visual Studio 2012 Ultimate, задание - сделать свою библиотеку. Пишу на Visual C++. Решил делать просто - 3 библиотечных функции, которые будут сортировать введенный массив. Проблема в том, что я не могу передать указатель на массив в качестве аргумента функции, чтобы далее этот массив уже библиотечной функцией разобрать, обработать и вернуть обратно. ВОзможно, проблема и в том, что неправильно объявляю массив.
Объявляю массив так:
static array<int^>^ MyArray = gcnew array<int^>(50);

Отдаю функции так:
Sort::SortMethod::Select(MyArray,i);
Принимаю в .h файле так:
namespace Sort
{
    class SortMethod
    {
    public:
		
        static int Select(int MyArray, int number);

    };
}
  • Вопрос задан
  • 5968 просмотров
Подписаться 2 Оценить 1 комментарий
Решения вопроса 1
Teivaz
@Teivaz
Если всё-таки речь о С++, то массив можно объявить так:
int myArray[50];
или так:
int* myArray = new int[50];
ну или так:
std::vector<int> myArray;

И соответственно использовать в функциях так:
void Sort(int array[50 ar]);
Sort(myArray);

void Sort(int* ar, unsigned int size);
Sort(myArray, 50);

void Sort(std::vector<int>& ar);
Sort(myArray);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
lexdevel
@lexdevel
Разработчик
static int Select(array<int^>^ buffer, int number)
{
        // ToDo: implement
        return -1;
}
Ответ написан
ReLogan
@ReLogan Автор вопроса
@Teivaz , спасибо за развернутый ответ!
Компилятор на код больше не ругается, но при дебаге видает две ошибки, смысл которых я так и не вкурил, гугл не особо помог.

2>WindowsFormsApplication1.obj : error LNK2028: ёё√ыър эр эхЁрчЁх°хээє■ ыхъёхьє (0A00000C) "public: static int __clrcall Sort::SortMethod::Select(int *,unsigned int)" (?Select@SortMethod@Sort@@$$FSMHPAHI@Z) т ЇєэъЎшш "private: void __clrcall WindowsFormsApplication1::Form1::sort_Click(class System::Object ^,class System::EventArgs ^)" (?sort_Click@Form1@WindowsFormsApplication1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
2>WindowsFormsApplication1.obj : error LNK2019: ёё√ыър эр эхЁрчЁх°хээ√щ тэх°эшщ ёшьтюы "public: static int __clrcall Sort::SortMethod::Select(int *,unsigned int)" (?Select@SortMethod@Sort@@$$FSMHPAHI@Z) т ЇєэъЎшш "private: void __clrcall WindowsFormsApplication1::Form1::sort_Click(class System::Object ^,class System::EventArgs ^)" (?sort_Click@Form1@WindowsFormsApplication1@@$$FA$AAMXP$AAVObject@System@@P$AAVEventArgs@4@@Z)
2


Приведу сокращенный код файлов проекта, возможно, у меня просто элементарная ошибка, а я не могу ее обнаружить.
Основной файл:

#pragma endregion
		static int* MyArray = new int[50]; //объявляем масив
		static int i=0;
	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
			 MyArray[i] = Convert::ToInt32(number -> Text);
			 i++;

			 }
	private: System::Void sort_Click(System::Object^  sender, System::EventArgs^  e) {
			 Sort::SortMethod::Select(MyArray,i);			 
		 }


Файл .h моей библиотеки:

namespace Sort
{
    class SortMethod
    {
    public:
		
        static int Select(int *MyArray, unsigned int number);

    };
}


Файл .cpp библиотеки:

namespace Sort
{
    int SortMethod::Select(int *MyArray, unsigned int number)
    {
		int tmp;
		for(int i = 0; i < number; ++i) // i - номер текущего шага
		{ 
			int pos = i; 
			tmp = MyArray[i];
			for(int j = i + 1; j < number; ++j) // цикл выбора наименьшего элемента
			{
				if (MyArray[j] < tmp) 
			   {
				   pos = j; 
				   tmp = MyArray[j]; 
			   }
			}
			MyArray[pos] = MyArray[i]; 
			MyArray[i] = tmp; // меняем местами наименьший с a[i]
		}
		return *MyArray;
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы