我正在使用visual studio 2012来创建一个Windows窗体应用程序。我遇到的问题是,当我编程程序的主要部分并且只有一个表单时,我希望2个向量在该表单中是全局的。然而,既然已完成大部分编程,我想专注于系统流程,因此引入了第二种形式作为主屏幕,用户将按下按钮并进入我一直在工作的表格到现在。问题是我定义的向量如下:
namespace Project1 {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
vector<vector<Hexagon>>Grid; // 2d vector to hold grid of hexagon
vector<Hexagon>Selected; // 1d vector to hold selected hexagons
/// <summary>
/// Summary for MyForm
/// </summary>
public ref class MyForm : public System::Windows::Forms::Form{
....
编译程序时出现以下错误:
1)错误47错误LNK2005:“class std :: vector&gt;,class std :: allocator&gt;&gt;&gt; Project1 :: Grid”(?Grid @ Project1 @@ 3V?$ vector @ V?$矢量@ VHexagon @@ V'$ @分配器@@@ VHexagon性病性病@@@ @@ V'$ @分配器V'$ @矢量@@ VHexagon V'$ @分配器@@@ VHexagon性病性病@@@ @@ @ 2 @@ std @@ A)已在MainScreen.obj中定义C:\ Users \ Ed \ Documents \ Visual Studio 2012 \ Projects \ Project1 \ Project1 \ Myform.obj
2)错误48错误LNK2005:“class std :: vector&gt; Project1 :: Selected”(?选择@ Project1 @@ 3V?$ vector @ VHexagon @@ V?$ allocator @ VHexagon @@@ std @@ @ std @@ A)已在MainScreen.obj中定义C:\ Users \ Ed \ Documents \ Visual Studio 2012 \ Projects \ Project1 \ Project1 \ Myform.obj
为了澄清MainScreen是我添加的表单,首先调用它。
MyForm是通过按下MainScreen中的按钮访问的表单
我希望我提供了足够的信息。我认为这可能与在MyForm.h中的project1中声明两个向量有关,如上所示,我会将它们作为MyForm类的本地,但我不能因为它是一个托管类。 感谢
答案 0 :(得分:0)
防止此类链接器错误的标准C ++解决方案是:
// MyForm.h file:
extern vector<vector<Hexagon>>Grid; // 2d vector to hold grid of hexagon
extern vector<Hexagon>Selected; // 1d vector to hold selected hexagons
// MyForm.cpp file:
namespace Project1 {
vector<vector<Hexagon>>Grid; // 2d vector to hold grid of hexagon
vector<Hexagon>Selected; // 1d vector to hold selected hexagons