błąd przy przekazaniu obiektu do funkcji w Windows forms application

0

Witam, mam napisany program w kodzie natywnym i teraz muszę to wszystko opakować w GUI. Wybrałem Windows Forms. Jednak mam problem przy dodaniu obiektu własnej klasy jako argumentu funkcji . Może zilustruje to :

tworze obiekt w Form1.h

 trie *Korzen;

deklaracja funkcji do której chce dodać obiekt jako argument jest taka:

int wstaw_linie::przeczytaj(string &nazwa, trie &Korzen); 

chcąc aby funkcja wykonała sie po naciśnięciu na przycisk i wyświetliła wynik w textbox zrobiłem tak:

private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
                System::String ^ A;

                std::string B = marshal_as<std::string>(A);

                int Temp;

                Temp = linia->przeczytaj(B, Korzen);

                 textBox1->Text = Convert::ToString(Temp);
             }

wyrzuca błąd:


1>d:\praca dyp\praca_dyplomowa\okienkatest2\okienkatest2\Form1.h(166) : 
error C2664: 'wstaw_linie::przeczytaj' : cannot convert parameter 2 from 'trie *' to 'trie &'
1>        An object from the gc heap (member of a managed class) cannot be converted to a native reference

proszę o rade: co z tym zrobić? Jak dodać przekazać obiekt do tej funkcji?

0

albo zmieniasz to:
int wstaw_linie::przeczytaj(string &nazwa, trie &Korzen);
na to:
int wstaw_linie::przeczytaj(string &nazwa, trie* Korzen);

albo to:
Temp = linia->przeczytaj(B, Korzen);
na to:
Temp = linia->przeczytaj(B, *Korzen);

albo to:
trie *Korzen; // tak a propos - to nie tworzy obiektu tylko wskaznik na obiekt. obiekt tworzysz uzywajac operatora new
na to:
trie Korzen;

poza tym w plikach .h nie powinno definiować żadnych zmiennych. zmienna robi się w plikach .cpp a w plikach .h umieszcza się tylko:
extern typ nazwa; (a w pliku cpp: samo typ nazwa;)

0

poza tym w plikach .h nie powinno definiować żadnych zmiennych. zmienna robi się w plikach .cpp a w plikach .h umieszcza się tylko:
extern typ nazwa; (a w pliku cpp: samo typ nazwa;)

oczywiście zgadzam się z tym, jednak tworząc projekt (o nazwie "nowy") w Windows Forms Application, w Solution mam pliki takie jak: From1.h, resource.h stdafx.h (header Files) oraz AssemblyInfo.cpp, nowy.cpp, stdafx.cpp (Source Files).
Elementy takie jak button, textbox itp. zadeklarowane są w From1.h, zdarzenia ich dotyczące również.
Ja chcę uruchomić funkcje, która tworzy drzewo 'trie', do uruchomienia jej muszę podać jako argument obiekt trie który już istnieje.
Problem polega na tym, że nie wiem gdzie stworzyć obiekt trie, i jak go następnie przesłać do funkcji?

Czysty nowy.cpp wygląda tak:


// nowy.cpp : main project file.

#include "stdafx.h"
#include "Form1.h"

using namespace nowy;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 

    // Create the main window and run it
    Application::Run(gcnew Form1());
    return 0;
}

a Form1.h z zadeklarowanym przyciskiem button1 w którym chciałbym uruchomić swoją funkcje :

#pragma once

namespace nowy {

    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;

    /// <summary>
    /// Summary for Form1
    ///
    /// WARNING: If you change the name of this class, you will need to change the
    ///          'Resource File Name' property for the managed resource compiler tool
    ///          associated with all .resx files this class depends on.  Otherwise,
    ///          the designers will not be able to interact properly with localized
    ///          resources associated with this form.
    /// </summary>
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
        Form1(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }

    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        ~Form1()
        {
            if (components)
            {
                delete components;
            }
        }

    private:
        /// <summary>
        /// Required designer variable.
        /// </summary>
        System::ComponentModel::Container ^components;

#pragma region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        void InitializeComponent(void)
        {
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(151, 124);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click);
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(284, 262);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);

        }
#pragma endregion
    private: System::Void .ctor() {
                 this->InitializeComponent();
             }
    private: System::Windows::Forms::Button^  button1;
    private: System::Void .ctor() {
                 this->InitializeComponent();
             }
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {

             }
    };
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0