关于C++builder的多form连接问题,请大侠帮忙呀!

时间:2023-01-13 20:03:09
小弟是名毕业生,因为毕业设计要用C++builder做,而小弟之前没有学过该软件。现有一问题不清楚,希望大侠指教,先谢大家了!

我在form2里面做了几个Radiobutton 当点在相应的 点上的时候会跳到对应的form上去。可问题是,当我在编译的时候,出现
[C++ Error] Unit2.cpp(44): E2451 Undefined symbol 'Form4'
[C++ Error] Unit2.cpp(47): E2451 Undefined symbol 'Form5'
[C++ Error] Unit2.cpp(50): E2451 Undefined symbol 'Form6'
我想知道这是怎么回事? 我在头文件上定义了它们了的,而且 为什么只显示 Form4,Form5,Form6有问题呢Form3
没有显示有问题? 我看过了,Form4,5,6和Form3的没什么差别呀.大侠指教

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit6.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;


//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm2::Button1Click(TObject *Sender)
{
  if (rdbt1->Checked==true)
    Form2->Hide();
    Form3->Show();
   if (rdbt2->Checked==true)
    Form2->Hide();
    Form4->Show();
   if (rdbt3->Checked==true)
    Form2->Hide();
    Form5->Show();
    if (rdbt4->Checked==true)
    Form2->Hide();
    Form6->Show();

}

12 个解决方案

#1


检查 4 5 6窗体名称是否与使用的一样
void __fastcall TForm2::Button1Click(TObject *Sender) 

  if (rdbt1->Checked==true)
  { 
    Form2->Hide(); 
    Form3->Show(); 
   }
   if (rdbt2->Checked==true) 
   {
    Form2->Hide(); 
    Form4->Show(); 
   }
   if (rdbt3->Checked==true) 
   {
    Form2->Hide(); 
    Form5->Show(); 
   }
    if (rdbt4->Checked==true) 
    {
    Form2->Hide(); 
    Form6->Show(); 
    }

}

#2


应该是头文件引起的。

#3


呵呵~有意思。试了下没有问题啊。
帮顶一下。

#4


建议你把unit4.h也帖上来看看吧

#5


楼上大哥要的  Unit4.h


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit4.h"
#include "math.h"
#include "math.hpp"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
//---------------------------------------------------------------------------

 float Un,Nn,Mn,Pn;  //额定电压,额定转速,额定转矩 ,额定功率
 float D1,L1;        //电枢直径,电枢铁心长度
 float Pa;           //电动机的计算功率



__fastcall TForm4::TForm4(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------






void __fastcall TForm4::Button1Click(TObject *Sender)
{
    int i=0;
     try
     {
        Un=StrToFloat(Edit1->Text);
        i++;
        Mn=StrToFloat(Edit2->Text);
        Pn=StrToFloat(Edit3->Text);
        Pa=(1+1.16)/(3*0.58)*Pn;
        D1=3670*Pa/1.1/3000;
        D1=Power(D1,(float)1/3);
        Label2->Caption=D1;
        L1=1.1*D1;
        Label3->Caption=L1;
      }
     catch(EConvertError &e)
     {
         if(i==0)
             ShowMessage("额定电压输入错误");
         else
             ShowMessage("额定转速或额定功率输入错误");
     }

}
//---------------------------------------------------------------------------

void __fastcall TForm4::Button2Click(TObject *Sender)
{
  Close();
}

还是 不行,不知道为什么  谢了 ~~

#6


试一下把头文件放到最上面, 变成这样:

#include <vcl.h> 
#include <Unit2.h> 
#include <Unit3.h> 
#include <Unit4.h> 
#include <Unit5.h> 
#include <Unit6.h>

#pragma hdrstop 


这个问题我也不是很清楚, 我用的CBC是网上下载的, 699MB的那个ISO,安装的时候提示我插入第2张盘, 我直接点了取消

然后我最近在用它做毕业设计, 我的第一个程序就是把头文件放到最开始的, 然后能调用其它窗体中的内容; 但第二个程序的时候, 就不行了, 我又改放到下面, 就好像楼主你的那样子, 就行了

具体原因为什么会这样我也不清楚

#7


头文件问题

#8


你有没有在unit2.h这个文件里说明Form的这几个类型啊.

#9


有意思,还没见过这样的问题, 关注!

#10


看下你的unit4.h,unit5.h,unit6.h是否在当前工程里,再不行就新建form把原来form上的东西都拷过来。
bcb经常会出现这样的错误。

#11


很有可能是名字问题。窗口都有两个名字可供设置,第一个储存窗口时要设置,默认为Unit1,这个名字用来调头文件时用,另一个在属性里设置Name,这个名字用来对窗体操作时引用,默认为Form?。
严格地说,还有一个,在Caption里,是将来窗体运行时显示的。
出现那样的问题应该是三个名字搞混了吧?

#12


错误提示是因为没定义Tform,那就定义一下啊,在具有切换功能的控件界面如在Tform2,就在头文件下边TForm2 *Form2后边接着添加*Form4,*Form5

#1


检查 4 5 6窗体名称是否与使用的一样
void __fastcall TForm2::Button1Click(TObject *Sender) 

  if (rdbt1->Checked==true)
  { 
    Form2->Hide(); 
    Form3->Show(); 
   }
   if (rdbt2->Checked==true) 
   {
    Form2->Hide(); 
    Form4->Show(); 
   }
   if (rdbt3->Checked==true) 
   {
    Form2->Hide(); 
    Form5->Show(); 
   }
    if (rdbt4->Checked==true) 
    {
    Form2->Hide(); 
    Form6->Show(); 
    }

}

#2


应该是头文件引起的。

#3


呵呵~有意思。试了下没有问题啊。
帮顶一下。

#4


建议你把unit4.h也帖上来看看吧

#5


楼上大哥要的  Unit4.h


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit4.h"
#include "math.h"
#include "math.hpp"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
//---------------------------------------------------------------------------

 float Un,Nn,Mn,Pn;  //额定电压,额定转速,额定转矩 ,额定功率
 float D1,L1;        //电枢直径,电枢铁心长度
 float Pa;           //电动机的计算功率



__fastcall TForm4::TForm4(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------






void __fastcall TForm4::Button1Click(TObject *Sender)
{
    int i=0;
     try
     {
        Un=StrToFloat(Edit1->Text);
        i++;
        Mn=StrToFloat(Edit2->Text);
        Pn=StrToFloat(Edit3->Text);
        Pa=(1+1.16)/(3*0.58)*Pn;
        D1=3670*Pa/1.1/3000;
        D1=Power(D1,(float)1/3);
        Label2->Caption=D1;
        L1=1.1*D1;
        Label3->Caption=L1;
      }
     catch(EConvertError &e)
     {
         if(i==0)
             ShowMessage("额定电压输入错误");
         else
             ShowMessage("额定转速或额定功率输入错误");
     }

}
//---------------------------------------------------------------------------

void __fastcall TForm4::Button2Click(TObject *Sender)
{
  Close();
}

还是 不行,不知道为什么  谢了 ~~

#6


试一下把头文件放到最上面, 变成这样:

#include <vcl.h> 
#include <Unit2.h> 
#include <Unit3.h> 
#include <Unit4.h> 
#include <Unit5.h> 
#include <Unit6.h>

#pragma hdrstop 


这个问题我也不是很清楚, 我用的CBC是网上下载的, 699MB的那个ISO,安装的时候提示我插入第2张盘, 我直接点了取消

然后我最近在用它做毕业设计, 我的第一个程序就是把头文件放到最开始的, 然后能调用其它窗体中的内容; 但第二个程序的时候, 就不行了, 我又改放到下面, 就好像楼主你的那样子, 就行了

具体原因为什么会这样我也不清楚

#7


头文件问题

#8


你有没有在unit2.h这个文件里说明Form的这几个类型啊.

#9


有意思,还没见过这样的问题, 关注!

#10


看下你的unit4.h,unit5.h,unit6.h是否在当前工程里,再不行就新建form把原来form上的东西都拷过来。
bcb经常会出现这样的错误。

#11


很有可能是名字问题。窗口都有两个名字可供设置,第一个储存窗口时要设置,默认为Unit1,这个名字用来调头文件时用,另一个在属性里设置Name,这个名字用来对窗体操作时引用,默认为Form?。
严格地说,还有一个,在Caption里,是将来窗体运行时显示的。
出现那样的问题应该是三个名字搞混了吧?

#12


错误提示是因为没定义Tform,那就定义一下啊,在具有切换功能的控件界面如在Tform2,就在头文件下边TForm2 *Form2后边接着添加*Form4,*Form5