私は純粋な C++ コードを持っています。Dictionary と Training の 2 つのクラスがあります。これらのクラスを使用して WinForms プロジェクトを作成したいと思います。したがって、2 つのフォームがあり、グローバル変数のようにクラス メンバーを両方で共有する必要があります。MyForm.h の一部として、そのようにしようとしました。
//MyForm.h , first(main form)
public ref class MyForm : public System::Windows::Forms::Form
{
private:
Dictionary *dict;
Training *train;
string *fileName;
public:
MyForm(void)
{
InitializeComponent();
dict = new Dictionary;
train = new Training;
fileName = new string;
}
いくつかのイベントがあります:
private: System::Void exploremanageToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
msclr::interop::marshal_context context;
ExploreForm^ eForm = gcnew ExploreForm(dict);
eForm->Show();
int rowCount;
vector<string> str;
str = dict->getAllWords(inverted);
eForm->DGV->RowCount = str.size();
for (int i = 0; i < str.size(); i++)
eForm->DGV->Rows[i]->Cells[0]->Value = context.marshal_as<String^>(str[i]);
eForm->buttonDelete->Enabled = false;
eForm->buttonEdit->Enabled = false;
eForm->textBoxEdit->Visible = false;
}
2 番目のフォームの一部:
//ExploreForm.h
public ref class ExploreForm : public System::Windows::Forms::Form
{
private: Dictionary *dict;
public:
ExploreForm(Dictionary *aDict)
{
InitializeComponent();
dict = aDict;
}
すべてのヘッダーで、#ifndef または #pragma を 1 回使用していますが、依然として奇妙な LNK2005 エラーが発生します。
完全なコード:
MyForm.h : https://codeo.me/5mO
ExploreForm.h : https://codeo.me/5mI
globals.h: https://codeo.me/5mJ
globals.cpp: https://codeo.me/5mK
Dictionary.h: https://codeo.me/5mL
MyForm.cpp: https://codeo.me/5mP
2 つのフォーム間でネイティブ C++ クラス メンバーを共有するにはどうすればよいですか? lnk2005 について多くの質問があることは承知していますが、何かアイデアはあります。