Разделение кода в заголовочном файле

rileypxs

Доброго времени суток, прошу помочь с моей страшной проблемой. Суть в том что есть файл MyForm.h в котором хранится весь код и классы. Нужно классы запихнуть в отдельный файл, чтобы было по-человечески:проблема в том что выбывает кучу ошибок, которые я даже найти не могу в интернете(( файл MyForm.h
#pragma once
#include <stdlib.h>
#include "Header.h"
 
namespace StarSheeps {
 
    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 MyForm
    /// </summary>
    public ref class MyForm : public System::Windows::Forms::Form
    {
    public:
        MyForm(void)
        {
            InitializeComponent();
            //
            //TODO: Add the constructor code here
            //
        }
 
    protected:
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
    ~MyForm()
        {
            if (components)
            {
                delete components;
            }
        }
    private: System::Windows::Forms::Timer^  timer1;
    private: System::Windows::Forms::PictureBox^  baseA;
    private: System::Windows::Forms::PictureBox^  baseB;
    public: System::Windows::Forms::Timer^  timer3;
    private: System::Windows::Forms::Timer^  timer4;
    private: System::Windows::Forms::Panel^  mainPole;
    public:
        
    protected:
    private: System::ComponentModel::IContainer^  components;
    protected:
 
    private:
        PictureBox ^pBang = gcnew PictureBox();
        army a;
        int countCoin = 0;
        /// <summary>
        /// Required designer variable.
        /// </summary>
 
#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->components = (gcnew System::ComponentModel::Container());
            System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(MyForm::typeid));
            this->timer1 = (gcnew System::Windows::Forms::Timer(this->components));
            this->baseA = (gcnew System::Windows::Forms::PictureBox());
            this->baseB = (gcnew System::Windows::Forms::PictureBox());
            this->timer3 = (gcnew System::Windows::Forms::Timer(this->components));
            this->timer4 = (gcnew System::Windows::Forms::Timer(this->components));
            this->mainPole = (gcnew System::Windows::Forms::Panel());
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->baseA))->BeginInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->baseB))->BeginInit();
            this->SuspendLayout();
            // 
            // timer1
            // 
            this->timer1->Interval = 5;
            this->timer1->Tick += gcnew System::EventHandler(this, &MyForm::timer1_Tick);
            // 
            // baseA
            // 
            this->baseA->BackColor = System::Drawing::Color::Black;
            this->baseA->Image = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"baseA.Image")));
            this->baseA->Location = System::Drawing::Point(0, 0);
            this->baseA->Name = L"baseA";
            this->baseA->Size = System::Drawing::Size(84, 84);
            this->baseA->SizeMode = System::Windows::Forms::PictureBoxSizeMode::AutoSize;
            this->baseA->TabIndex = 1;
            this->baseA->TabStop = false;
            this->baseA->Click += gcnew System::EventHandler(this, &MyForm::baseA_Click);
            this->baseA->MouseEnter += gcnew System::EventHandler(this, &MyForm::baseA_MouseEnter);
            this->baseA->MouseLeave += gcnew System::EventHandler(this, &MyForm::baseA_MouseLeave);
            // 
            // baseB
            // 
            this->baseB->BackColor = System::Drawing::Color::Black;
            this->baseB->Image = (cli::safe_cast<System::Drawing::Image^>(resources->GetObject(L"baseB.Image")));
            this->baseB->Location = System::Drawing::Point(700, 422);
            this->baseB->Name = L"baseB";
            this->baseB->Size = System::Drawing::Size(84, 84);
            this->baseB->SizeMode = System::Windows::Forms::PictureBoxSizeMode::AutoSize;
            this->baseB->TabIndex = 2;
            this->baseB->TabStop = false;
            this->baseB->Click += gcnew System::EventHandler(this, &MyForm::baseB_Click);
            this->baseB->MouseEnter += gcnew System::EventHandler(this, &MyForm::baseB_MouseEnter);
            this->baseB->MouseLeave += gcnew System::EventHandler(this, &MyForm::baseB_MouseLeave);
            // 
            // timer3
            // 
            this->timer3->Interval = 500;
            this->timer3->Tick += gcnew System::EventHandler(this, &MyForm::timer3_Tick);
            // 
            // timer4
            // 
            this->timer4->Enabled = true;
            this->timer4->Interval = 3000;
            this->timer4->Tick += gcnew System::EventHandler(this, &MyForm::timer4_Tick);
            // 
            // mainPole
            // 
            this->mainPole->Location = System::Drawing::Point(0, 0);
            this->mainPole->Name = L"mainPole";
            this->mainPole->Size = System::Drawing::Size(784, 506);
            this->mainPole->TabIndex = 11;
            // 
            // MyForm
            // 
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::None;
            this->BackColor = System::Drawing::Color::Navy;
            this->ClientSize = System::Drawing::Size(784, 506);
            this->Controls->Add(this->baseB);
            this->Controls->Add(this->baseA);
            this->Controls->Add(this->mainPole);
            this->ForeColor = System::Drawing::SystemColors::ButtonHighlight;
            this->MaximizeBox = false;
            this->MinimizeBox = false;
            this->Name = L"MyForm";
            this->ShowIcon = false;
            this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen;
            this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load);
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->baseA))->EndInit();
            (cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->baseB))->EndInit();
            this->ResumeLayout(false);
            this->PerformLayout();
 
        }
#pragma endregion
    //*********************************************
 
    //********************************************* 
    public:  
 
    
    public: void newobj() {
        PictureBox ^pBox = gcnew PictureBox();
        pBox->Parent = mainPole;
        pBox->SizeMode = PictureBoxSizeMode::AutoSize;
        pBox->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\smileB.png");//"C:\Users\SleepWalker\Documents\Visual Studio 2015\Projects\StarSheeps\images\sphere.png"
        pBox->BackColor = Color::Transparent;
        a.addPb(pBox);
        a.addB();
        //***********************
        PictureBox ^pBox1 = gcnew PictureBox();
        pBox1->Parent = mainPole;
        pBox1->SizeMode = PictureBoxSizeMode::AutoSize;
        pBox1->BackColor = Color::Transparent;
        pBox1->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\smileA.png");
        a.addPa(pBox1);
        a.addA();
    }
    private: System::Void MyForm_Load(System::Object^  sender, System::EventArgs^  e) {             
        pBang->Parent = mainPole;
        pBang->SizeMode = PictureBoxSizeMode::AutoSize; 
        pBang->BackColor = Color::Transparent;
        pBang->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\bang.png");
        pBang->BackColor = Color::Transparent;
        newobj();
        newobj();
        timer1->Enabled = true; 
    }   
    private: System::Void timer1_Tick(System::Object^  sender, System::EventArgs^  e) {
        a.newWay(mainPole);
        a.gogogo();     
        a.isCrash(pBang, timer3);
        a.isCoin();
    }
    private: System::Void baseA_Click(System::Object^  sender, System::EventArgs^  e) {
    timer1->Enabled = true;
    PictureBox ^pBox = gcnew PictureBox();
    pBox->Parent = mainPole;
    pBox->SizeMode = PictureBoxSizeMode::AutoSize;
    pBox->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\smileB.png");//"C:\Users\SleepWalker\Documents\Visual Studio 2015\Projects\StarSheeps\images\sphere.png"
    pBox->BackColor = Color::Transparent;
    a.addPb(pBox);
    a.addB();
}
    private: System::Void baseB_Click(System::Object^  sender, System::EventArgs^  e) {
    timer1->Enabled = true;
    PictureBox ^pBox = gcnew PictureBox();
    pBox->Parent = mainPole;
    pBox->SizeMode = PictureBoxSizeMode::AutoSize;
    pBox->BackColor = Color::Transparent;   
    pBox->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\smileA.png");
    pBox->BackColor = Color::Transparent;
    a.addPa(pBox);
    a.addA();
}
    private: System::Void baseA_MouseEnter(System::Object^  sender, System::EventArgs^  e) {
    baseA->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\baseAi.png");
    }
    private: System::Void baseA_MouseLeave(System::Object^  sender, System::EventArgs^  e) {
    baseA->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\baseA.png");
}
    private: System::Void baseB_MouseEnter(System::Object^  sender, System::EventArgs^  e) {
    baseB->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\baseBi.png");
}
    private: System::Void baseB_MouseLeave(System::Object^  sender, System::EventArgs^  e) {
    baseB->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\baseB.png");
}
    private: System::Void timer3_Tick(System::Object^  sender, System::EventArgs^  e) {
        pBang->Visible = false;
        timer3->Enabled = false;
}
    private: System::Void timer4_Tick(System::Object^  sender, System::EventArgs^  e) {
        if (countCoin <= 199) {
            PictureBox ^pCoin = gcnew PictureBox();
            pCoin->Parent = mainPole;
            pCoin->SizeMode = PictureBoxSizeMode::AutoSize;
            pCoin->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\coin.png");
            pCoin->BackColor = Color::Transparent;
            pCoin->SendToBack();
            a.newCoin(pCoin);
            countCoin++;
        }
    }
};
    //********************************************* 
}
2 ответа

rileypxs

ошибки


rileypxs

rileypxs, MyForm.h это уже заголовочный файл. Создавать для него еще один заголовочный файл не надо. Нужно создать файл MyForm.cpp и перенести в него реализацию членов, оставив в h файле только объявлнения. Имей в виду что после этого визуальным дизайнером станет труднее пользоваться т.к. он не понимает такого разделения (несмотря на то что он правильное по сути).Небольшой пример для одного метода
// MyForm.h
...
private: System::Void timer4_Tick(System::Object^  sender, System::EventArgs^  e);
...
// MyForm.cpp
#include "MyForm.h"
 
using namespace System;
using namespace System::Windows::Forms;
 
namespace StarSheeps {
 
    System::Void MyForm::timer4_Tick(System::Object^  sender, System::EventArgs^  e) {
        if (countCoin <= 199) {
            PictureBox ^pCoin = gcnew PictureBox();
            pCoin->Parent = mainPole;
            pCoin->SizeMode = PictureBoxSizeMode::AutoSize;
            pCoin->Load("C:\\Users\\SleepWalker\\Documents\\Visual Studio 2015\\Projects\\StarSheeps\\images\\coin.png");
            pCoin->BackColor = Color::Transparent;
            pCoin->SendToBack();
            a.newCoin(pCoin);
            countCoin++;
        } 
 
}