Cóż, jeśli zechcę dodać klasę nadrzędną poprzez "include" to wyrzuci mi masę błędów (nie wiem dokładnie z czego one wynikają, ale... tak już jest), Każdy kto "zinkludował" nawzajem klasy, a potem starał się w każdej wywołać metodę z klasy przeciwnej wie o co chodzi.
Tak bardziej praktyczniej, problem polega na tym, że w w główniej klasie po naciśnięciu jakiegoś tam buttona mam tworzone nowe okno (więc musi być include klasy odpowiedzialnej za nie), jednak w klasie danych jest funkcja, które również musi pracować na tym oknie (na nowej instancji). I do tego momentu jeszcze wszystko by działało, jednak, jak to klasa danych - jest dołączona do klasy głównej i klasy tego okna - wtedy mamy komplet błędów.
---
Tu jest przykład ilustrujący problem
Główna klasa programu:
#include "okno.h"
#include "data.h"
namespace temp1 {
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 ref class Form1 : public System::Windows::Forms::Form
{
public:
Form1(void)
{
InitializeComponent();
}
protected:
~Form1()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
private:
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
void InitializeComponent(void)
{
///
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
okno^ ap = gcnew okno();
ap->ShowDialog();
temp1::data^ ad = gcnew temp1::data();
ad->show();
}
};
}
klasa danych
data.h
#include "okno.h"
namespace temp1{
public ref class data
{
public:
data(void);
Void show();
};
}
data.cpp
#include "data.h"
namespace temp1{
data::data(void)
{
}
Void data::show()
{
temp1::okno^ ok = gcnew temp1::okno();
ok->ShowDialog();
}
}
i okno
#include "data.h"
//namespace
namespace temp1 {
public ref class okno : public System::Windows::Forms::Form
{
public:
okno(void)
{
InitializeComponent();
}
protected:
~okno()
{
if (components)
{
delete components;
}
}
private: System::Windows::Forms::Button^ button1;
protected:
private:
System::ComponentModel::Container ^components;
#pragma region Windows Form Designer generated code
void InitializeComponent(void)
{
}
#pragma endregion
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
temp1::data ^ ds = gcnew temp1::data();
}
};
}
i wtedy program zasypie nas błędami
1>data.cpp |
Jak to poprawić / ominąć ?
Aha, bo pewnie padnie takie pytanie. Po co wywoływać okno zarówna z klasy głównej jak i z klasy danych. W klasie danych musi ono być, bo na nim pracuje, a poza tym, wszystkie okna korzystają z klasy danych, czyli wystarczy, że dodam w tej klasie do include jedno z okien i kompilator zasypie mnie błędami. Tak więc nie ma to znaczenia.