Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как исправить ошибку error C2230: 
:(
    Опции темы
mirmikot
Дата 12.9.2014, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0376 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.