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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2014, 13:35   #1
mirmikot
 
Регистрация: 11.08.2010
Сообщений: 4
По умолчанию Как исправить ошибку error C2230:

Здравствуйте!

Помогите пожалуйста исправить ошибку
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 для совмещения в одном модуле управляемого и неуправляемого С++.

Подскажите, как исправить может быть используя приведенные выше понятия? Или я ищу в неправильном направлении??? Подскажите пожалуйста! Спасибо!
Код:

#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);
}

Последний раз редактировалось mirmikot; 12.09.2014 в 22:41.
mirmikot вне форума Ответить с цитированием
Старый 12.09.2014, 13:38   #2
mirmikot
 
Регистрация: 11.08.2010
Сообщений: 4
По умолчанию Текст программы

//----------

Последний раз редактировалось mirmikot; 12.09.2014 в 22:41.
mirmikot вне форума Ответить с цитированием
Старый 12.09.2014, 13:38   #3
mirmikot
 
Регистрация: 11.08.2010
Сообщений: 4
По умолчанию Продолжение текста программы

//------------

Последний раз редактировалось mirmikot; 12.09.2014 в 22:41.
mirmikot вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
исправить Ошибку Error error C1104: cannot open file Spirit987 Win Api 2 15.10.2013 09:09
Помогите исправить ошибку (язык C)- error C2106: =: левый операнд должен быть левосторонним значением Tarcom Помощь студентам 1 03.10.2013 02:55
Помогите исправить ошибку:run-time error 424 Kigali Microsoft Office Excel 2 22.09.2013 16:22
как исправить ошибку "chacheManager error: Writing index data failed!" spravka Помощь студентам 3 07.11.2010 01:42
Выдаёт ошибку: acos DOMAIN error,полсе нажатия окей,ещё одну ошибку pow OWERFLAW ERROR prikolist Общие вопросы C/C++ 4 10.04.2009 20:27