CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [C++/CLI]Include i praca między formami...

[C++/CLI]Include i praca między formami...

dział ogólny

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » środa, 22 grudnia 2010, 20:58

W sumie masz trochę racji. Bo wszędzie mam "namespace aa", ale nigdzie nie jest stwierdzone, że reszta kodu użytego z innych klas jest z tej przestrzeni nazw, jedynie, że kolejny, tworzony w tej klasie będzie w niej.. Ale jak potem podałeś. Te błędy to nie wina przestrzeni nazw. Nie widzi go (jej) z jakiegoś innego. Zaraz spóbuję to dopisać. Tak na wszelki wypadek jak jest jakiś trop.

Dopisane raz z przestrzenią nazw

Kod: Zaznacz cały
1>c:\kataloger\kataloger\add_new_to_database.h(488) : error C2039: 'Form1' : is not a member of 'kataloger'


Nawet nie widzi tego Form1 jako członka całej głównej przestrzeni nazw programu, co jest bardzo niepokojące, bo to już nie kwestia include. Z przestrzeni nazw można wywołać każdy element z każdego miejsca, a tu proszę. Nie ma go.
:/
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Cyfrowy Baron » środa, 22 grudnia 2010, 21:10

Plik w sekcji include jest dodany prawidłowo, więc już nie wiem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez polymorphism » środa, 22 grudnia 2010, 21:37

Poly, mam do Ciebie prośbę jeśli masz chwilkę czasu. Może móglbyś ten przykładowy program rozłożyć na pliki cpp. i .h ?

H:
KOD cpp:     UKRYJ  
/* tu załączasz niezbędne pliki */

namespace kataloger
{
        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 slider : public System::Windows::Forms::Form
        {
        public: slider(void);
        protected: ~slider();
               
        public: System::Windows::Forms::Button^  button1;

        private:
                System::ComponentModel::Container ^components;

                #pragma region Windows Form Designer generated code
               
                void InitializeComponent(void)
                {
                        this->button1 = (gcnew System::Windows::Forms::Button());
                        this->SuspendLayout();
                        //
                        // button1
                        //
                        this->button1->Location = System::Drawing::Point(107, 36);
                        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, &slider::button1_Click);
                        //
                        // slider
                        //
                        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->FormBorderStyle = System::Windows::Forms::FormBorderStyle::None;
                        this->Name = L"slider";
                        this->Text = L"slider";
                        this->ResumeLayout(false);

                }
                #pragma endregion
               
        private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e);
       
        };
}
 


CPP
KOD cpp:     UKRYJ  
 /* tu załączasz plik z definicją powyższej klasy */

namespace kataloger
{
        slider::slider(void)
        {
                InitializeComponent();
        }

        slider::~slider()
        {
                if (components)
                {
                        delete components;
                }
        }
               
        System::Void slider::button1_Click(System::Object^  sender, System::EventArgs^  e)
        {
                this->Close();
        }
}
 

Tak to widzę...


Aha, mam nadzieję, że poprawnie dodajesz pliki CPP do projektu (nie poprzez #include).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » środa, 22 grudnia 2010, 22:32

Ok, dzięki. ZObaczę czy będzie działać.
Aha, mam nadzieję, że poprawnie dodajesz pliki CPP do projektu (nie poprzez #include).


yyy... to znaczy dodaje pliki .h do plików .cpp, a tych w ogóle nie ruszam... Jak dodawałem to zawsze tylko .h. Jak coś to sprostuj, bo może ma gdzieś jakiś "ubytek" w podstawach programowania, to całkiem możliwe.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez polymorphism » środa, 22 grudnia 2010, 22:53

Aha, czyli wszystkie pliki CPP są automatycznie wygenerowane, tak?
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » czwartek, 23 grudnia 2010, 00:34

Aha, czyli wszystkie pliki CPP są automatycznie wygenerowane, tak?

Tzn. W Visualu jest tak, żę dla każdego nowego elmentu jest automatycznie tworzona forma główna w pliku .h odpowiadająca za okno główne, itp. oraz plik o tej samej nazwie.cpp w którym jest jeydnie imnclude stdafx.h i nagłówka tego pliku. A w przypadku klasy (formy) głównej, plik cpp ma taką nazwę jak przestrzeń nazw programu i ma include stdafx.h i Form1.h. A potem to już standardowe int main, itd.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » czwartek, 23 grudnia 2010, 01:46

Nie, no to wszystko ładnie. Dzięki za pomoc, udało mi się elegancko podzielić cały plik. jedyny mankament tego podziału to to, że już nie mogę pracować w trybie design, bo Visual oczywiście się pogubił, tak więc trzeba będzie ręcznie pisać. W ostateczności można otworzyć oryginalną kopię projektu w drugim Viusuallu i tam pracować "visualnie", a kod przerzucać do tej drugiej wersji lub... poszukać pomocy na temat pracy z podzielonymi plikami ; p

Jednak to nadal nie rozwiązuje temat dostępu do klasy głównej. Rano spróbuję wszystkie klasy tak rozłożyć i wtedy zobaczę czy coś się zmieni. Tak więc jak na razie temat cały czas aktualny.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Cyfrowy Baron » czwartek, 23 grudnia 2010, 09:38

Shynx napisał(a):A potem to już standardowe int main, itd.


main? :o To co Ty tworzysz aplikację konsolową i chcesz tam umieścić okienko? :o
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » czwartek, 23 grudnia 2010, 13:30

main? :o To co Ty tworzysz aplikację konsolową i chcesz tam umieścić okienko? :o


Kod: Zaznacz cały
using namespace kataloger;

[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;
}


Ja nie widzę żadnego problemu. Poza tym... to jest tworzone automatycznie przez Visuala i zawsze tak działa, wszystkie aplikacje. Może w Builderze Borlanda masz podkreślone WinMain, tutaj jak widać to nie jest potrzebne. Dlaczego ? Z pewnością wystarczy jedynie spojrzeć na kod.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Cyfrowy Baron » czwartek, 23 grudnia 2010, 13:33

To jest kod aplikacji konsolowej i ja widzę tutaj problem. Jesteś pewien, że to środowisko nie rozgranicza aplikacji na konsolowe i okienkowe. Przypuszczam, że podobnie jak to jest w C++Builder do wyboru jest kilka różnych typów tworzenia, aplikacji, bibliotek, itp..
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez polymorphism » czwartek, 23 grudnia 2010, 13:50

Baron, wychodzisz z błędnego założenia, że nazwa głównej funkcji określa typ aplikacji - tak nie jest. Funkcja może się nazywać dowolnie, wszystko zależy od kompilatora. U mnie, w VC, konsola ma funkcję _tmain.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Cyfrowy Baron » czwartek, 23 grudnia 2010, 14:02

U mnie aplikacja okienkowa ma:

KOD cpp:     UKRYJ  
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR cmdLine, int)


natomiast aplikacja konsolowa ma tak jak u Ciebie:

KOD cpp:     UKRYJ  
int _tmain(int argc, _TCHAR* argv[])


Jest to jednak rozgraniczone, stąd moje zdziwienie.

Zastanawiam się, czy w VC++ 2008 aplikacje konsolowe i okienkowe są tworzone jednakowo. Jak rozumiem aplikacja wielo-platformowa nie jest tworzona w oparciu o WINAPI lecz w oparciu o .NET.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez polymorphism » czwartek, 23 grudnia 2010, 14:37

Zastanawiam się, czy w VC++ 2008 aplikacje konsolowe i okienkowe są tworzone jednakowo.

Nie, jeśli robisz w zwykłym C++. Jak już pisałem, nie mylcie IDE z językiem.

Jak rozumiem aplikacja wielo-platformowa nie jest tworzona w oparciu o WINAPI lecz w oparciu o .NET.

To, czy .NET jest wieloplatformowy, jest dyskusyjne... na razie. Ale tak, taka jest idea tej platformy, żeby uniezależnić aplikację od platformy systemowej, czy też sprzętowej.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » czwartek, 23 grudnia 2010, 16:29

Jeszcze mam pytanie. Bo jest ten plik główny kataloger.cpp z tym main i Form1.h z formą główną. Ten też powinienem podzielić ? Bo jeśli tak to chyba wewnątrz musiałby być trochę inny zapis. Czy może po prostu tak samo rozłożyć, a na końcu po prostu będzie funkcja main z gcnew głównego okna ? Najpierw spróbuje zrobić samemu. Jak wszystko będzie działać poprawnie to zostawię.


------
No niestety dostałem dwa błędy :/ Nie wiem co oznaczają, bo z głównym plikiem się nigdy nie bawiłem.

Kod: Zaznacz cały
.\kataloger.cpp(91) : error C2337: 'STAThreadAttribute' : attribute not found
1>.\kataloger.cpp(99) : error C2061: syntax error : identifier 'Form1'


--
Ale wiecie co wam powiem. Tak patrzę na wszystkie te błędy... wszystko prowadzi do tego, jakby Form1 w ogóle nie było.. Więc może zamiast z tym walczyć, lepiej to... ominąć ? Przecież Form1 może się włączać standardowo pokazać okno, bo takie jest jego działanie, ale teraz ja mogę je błyskawicznie zacząć i uruchomić wszystko z innej klasy. Innymi słowy, jak nie można uzyskać dostępu do tego Form1, to potraktować go jedynie jako pośrednika na początku, a potem się tym nie przejmować. To jest taka dziwna chyba metoda, ale jeśli inaczej się nie będzie dało... Jeszcze poczekam może coś wymyślicie, bo nie bardzo mi się chcę formy głównej przepisywać, zwłaszcza, że nie ograniczy się to tylko do ctrl + c i ctrl + v, bo jest mnóstwo odwołań do niej. No... na razie poczekam na info od was.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Re: [C++/CLI]Include i praca między formami...

Nowy postprzez Slynx » czwartek, 23 grudnia 2010, 16:53

Aa... Lordzie... tj. Baronie, aplikacja konsolowa, jeden plik:

Kod: Zaznacz cały
using namespace System;

int main(array<System::String ^> ^args)
{
    Console::WriteLine(L"Hello World");
    return 0;
}


Można ? Można ;p
No właśnie i powiedz jak wygląda u Ciebie to w tym Buliderze. Mam na myśli aplikacje wizualne. Też masz jakieś standardowe Form1 tworzone przy tworzeniu nowego projektu ? Bo w Visualu tak właśnie jest. Może po prostu Ty nie umieszczałeś w Formie głównej tylko od razu projektowałeś w kolejnych dlatego nie miałem problemów.
Avatar użytkownika
Slynx
Mądrosław
Mądrosław
 
Posty: 350
Dołączył(a): piątek, 17 grudnia 2010, 21:59
Podziękował : 11
Otrzymał podziękowań: 0
System operacyjny: Windows 7 32
Kompilator: Visual C++ 2005; Visual C++ 2008; Visual C++ 2010; Visual C# 2010;
Gadu Gadu: 0
    Windows 7Firefox

Poprzednia stronaNastępna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 66 gości

cron