【发布时间】:2021-05-31 08:16:39
【问题描述】:
我在编译 C++Builder 6 线程项目时遇到了一些错误。我不知道如何解决它们。
Unit1.cpp:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
using namespace std;
int i1 = 0, i2 = 0;
T1 *Thread1, *Thread2;
bool Term1, Term2;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall T1::Execute()
{
do
Synchronize (UpdateTimer);
while (!Terminated);
}
//-----------------------------------------------
void __fastcall T1::UpdateTimer()
{
Timer->Enabled = !Terminated;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ComboBox1->ItemIndex = 3;
ComboBox2->ItemIndex = 3;
Thread1 = new T1(false);
Thread1->Timer = Timer1;
Thread1->FreeOnTerminate = true;
Term1 = false;
Thread2 = new T1(true);
Thread2->Timer = Timer2;
Thread2->FreeOnTerminate = true;
Term2 = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
i1++;
Label1->Caption = i1;
Timer1->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer2Timer(TObject *Sender)
{
i2++;
Label2->Caption = i2;
Timer2->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BRes1Click(TObject *Sender)
{
if (!Term1)
Thread1->Resume();
else ShowMessage("Ïîòîê óæå çàâåðøåí");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BRes2Click(TObject *Sender)
{
if (!Term2)
Thread2->Resume();
else ShowMessage("Ïîòîê óæå çàâåðøåí");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BTerm1Click(TObject *Sender)
{
Thread1->Terminate();
Term1 = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BTerm2Click(TObject *Sender)
{
Thread2->Terminate();
Term2 = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BSuspend1Click(TObject *Sender)
{
if (!Term1)
Thread1->Suspend();
else ShowMessage("Ïîòîê óæå çàâåðøåí");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BSuspend2Click(TObject *Sender)
{
if (!Term2)
Thread2->Suspend();
else ShowMessage("Ïîòîê óæå çàâåðøåí");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BSyncClick(TObject *Sender)
{
if (Term1 || Term2)
ShowMessage("Ïîòîê óæå çàâåðøåí");
else
{
if (!Thread1->Suspended)
Thread1->Suspend();
if (!Thread2->Suspended)
Thread2->Suspend();
Timer1->Enabled = false;
Timer2->Enabled = false;
i1 = 0;
i2 = 0;
Thread1->Resume();
Thread2->Resume();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
if (Term1)
ShowMessage("Ïîòîê óæå çàâåðøåí");
else
switch (ComboBox1->ItemIndex)
{
case 0: Thread1->Priority = tpIdle; break;
case 1: Thread1->Priority = tpLowest; break;
case 2: Thread1->Priority = tpLower; break;
case 3: Thread1->Priority = tpNormal; break;
case 4: Thread1->Priority = tpHigher; break;
case 5: Thread1->Priority = tpHighest; break;
case 6: Thread1->Priority = tpTimeCritical; break;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
if (Term2)
ShowMessage("Ïîòîê óæå çàâåðøåí");
else
switch (ComboBox2->ItemIndex)
{
case 0: Thread2->Priority = tpIdle; break;
case 1: Thread2->Priority = tpLowest; break;
case 2: Thread2->Priority = tpLower; break;
case 3: Thread2->Priority = tpNormal; break;
case 4: Thread2->Priority = tpHigher; break;
case 5: Thread2->Priority = tpHighest; break;
case 6: Thread2->Priority = tpTimeCritical; break;
}
}
//---------------------------------------------------------------------------
Uni1.h
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TGroupBox *GroupBox1;
TGroupBox *GroupBox2;
TLabel *Label1;
TButton *BRes1;
TButton *BSuspend1;
TButton *BTerm1;
TLabel *Label2;
TButton *BRes2;
TButton *BSuspend2;
TButton *BTerm2;
TComboBox *ComboBox1;
TComboBox *ComboBox2;
TButton *BSync;
TTimer *Timer1;
TTimer *Timer2;
void __fastcall FormCreate(TObject *Sender);
void __fastcall Timer1Timer(TObject *Sender);
void __fastcall Timer2Timer(TObject *Sender);
void __fastcall BRes1Click(TObject *Sender);
void __fastcall BRes2Click(TObject *Sender);
void __fastcall BTerm1Click(TObject *Sender);
void __fastcall BTerm2Click(TObject *Sender);
void __fastcall BSuspend1Click(TObject *Sender);
void __fastcall BSuspend2Click(TObject *Sender);
void __fastcall BSyncClick(TObject *Sender);
void __fastcall ComboBox1Change(TObject *Sender);
void __fastcall ComboBox2Change(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
class T1 : public TThread
{
private:
void _fastcall UpdateTimer();
protected:
void _fastcall Execute();
public:
__fastcall T1(bool CreateSuspended);
TTimer *Timer;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
错误:
[Linker Error] Unresolved external 't1::' referenced from C:\USERS\ALEXEY\DESKTOP\CCC\UNIT1.OBJ
[Linker Error] Unresolved external '__fastcall T1::T1(bool)' referenced from C:\USERS\ALEXEY\DESKTOP\CCC\UNIT1.OBJ
【问题讨论】:
-
Unresolved external
t1::是链接器告诉您 C++ 区分大小写的方式。您在代码中的某个位置输入了t1而不是T1。 -
Unresolved external '__fastcall T1::T1(bool)' 表示您声明了一个构造函数但并不关心实现它...
-
@Lundin 但我该如何解决这个问题?
-
我真的不知道我怎么能更清楚。在您的项目中对
t1进行文本搜索,有任何结果吗?实现您编写的构造函数,而不仅仅是提供原型。
标签: c++ c++builder