![]() |
|
|
![]()
|
|
| mirmikot |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 12.9.2014 Репутация: нет Всего: нет |
Здравствуйте!
Помогите пожалуйста исправить ошибку error C2230: 'GenerateRandomHReal' : a member function of a managed class cannot return a non-managed class or struct 'HReal' unless it is an aggregate Пишу проект на базе Windows Form Application .NET в Microsoft Visual C++ .NET 2003. Логика программы реализуется прямо в файле класса формы Form1.h (я понимаю, не очень правильно, но это детали). Программа по нажатию кнопки заполняет матрицы случайными числами и выполняет некие расчеты. Есть сторонняя математическая библиотека, написанная на неуправляемом (non-managed) С++. В этой библиотеке описан тип данных (повышенной точности) HReal. Получается, что как бы в управляемом С++ (__gc class Form1) используется функция-метод, которая принимает аргументы и возвращает значение неуправляемого типа HReal. Вот и выдается такая ошибка. Но как ее исправить??? Я читала, наткнулась на такие понятия как 1.шаблонный класс gcroot <ТИП>, структура GCHandle, 2. написание Wrappera для класса, 3. использование директив # pragma managed и # pragma unmanaged для совмещения в одном модуле управляемого и неуправляемого С++. Подскажите, как исправить может быть используя приведенные выше понятия? Или я ищу в неправильном направлении??? Подскажите пожалуйста! Спасибо! [code=cpp] #include <string.h> #include <cstringt.h> #include <afxwin.h> #using <mscorlib.dll> #pragma once namespace SolveSLAU { using namespace std; using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; public __gc class Form1 : public System::Windows::Forms::Form { // Глобальные переменные private: bool IsButton1Pressed; bool IsMatrixSet; // Флаг: "Матрица уже инициализирована?" HReal **A01, **A02, *B01, *B02, *X1_2, *X2_1; double Eps; // Точность расчетов Эпсилон int m1, m2, n0; int MantissPrecision; // Точность мантиссы private: System::Void button1_Click(System::Object * sender, System::EventArgs * e) { int n = 0, i,j; HReal ** A1, ** A2, *X1; HReal * B1, * B2, *X2; HReal alfa_0, alfa_1; CString myStr1(""); CString myStr2(""); CString myStr3(""); CString myStr0(""); CString myspace(" "); MantissPrecision = System::Int32::Parse(this->textBox1->Text); // Это вроде как преобразование типов таким образом Eps = System::Double::Parse(this->textBox2->Text); // просто монстрообразно ***** this->listBox6->Items->Add(System::Convert::ToString(myStr0)); X1[i] = GenerateRandomHReal(alfa_0, alfa_1, MantissPrecision); X1_2[i] = GenerateRandomHReal(alfa_0, alfa_1, MantissPrecision); myStr0.Format(_T("%lf\n"), X1[i] ); this->listBox2->Items->Add(System::Convert::ToString(myStr0)); X2[i] = GenerateRandomHReal(alfa_0, alfa_1, MantissPrecision); X2_1[i] = GenerateRandomHReal(alfa_0, alfa_1, MantissPrecision); myStr0.Format(_T("%lf\n"), X2[i] ); this->listBox5->Items->Add(System::Convert::ToString(myStr0)); } } else { // -------------------- генератор ---------------- private: gcroot<HReal> GenerateRandomHReal(const gcroot<HReal> &a, const gcroot<HReal> &b, int MantissPrecision) // [a,b] - диапазон { CString s = "0.", s1; int j; for (int i = 0; i < MantissPrecision; i++) { j = rand() % 10; s1.Format("%i", j); s += s1; } HReal result(s); return a + result * (b - a); } [code=cpp] Это сообщение отредактировал(а) mirmikot - 12.9.2014, 21:39 |
|||
|
||||
![]()
|
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |