gpt4 book ai didi

c++ - Visual C++ 2012 在类中使用 std::vector 或 std::list

转载 作者:太空宇宙 更新时间:2023-11-04 11:33:58 26 4
gpt4 key购买 nike

我刚开始使用 Visual Studio 2012,我尝试在类的私有(private)部分创建一个 std::list 或 std::vector 来保存来 self 想要创建的编辑器的数据。我想在那里保存必要的数据,例如 UI 组件的 X 和 Y 坐标,但我无法创建 std::list 或 std::vector。

保存数据的类:

ref class MyButton
{
public:
MyButton(System::Windows::Forms::Button ^pBtn);


private:
int X;
int Y;
int Width;
int Height;
System::String^ text;
};

将管理所有类型的组件的类(开始我只使用按钮,但后来我想保存图片等数据):

#include <list>
#include <vector>
#include "MyButton.h"

using namespace System::Windows::Forms;


class Daten
{
public:
Daten();
~Daten();
void addButton(Button pBtn);
Button getButton(int pIdx);

private:
static std::vector<MyButton> myButton;
};

现在与放置按钮的 UI 相关联:

#include "Daten.h"
public ref class Main : public System::Windows::Forms::Form
{
public:
Main(void)
{
InitializeComponent();
//
//TODO: Konstruktorcode hier hinzufügen.
//
daten = new Daten();
}
.
.
.
private: Daten *daten;

大多数情况下,我收到错误代码 C3699,但它表示要替换 *,但不是在我的类中,而是在 xmemory0(527) 中。

有没有办法在类中包含列表或 vector ?我可以将数据保存在临时文件中,但我认为必须有办法。

提前感谢您的任何建议。

最佳答案

这里的主要问题是您试图混合使用 C++/CLI 对象和 C++ 容器。在您的情况下,您不想在此处使用 std::vectorstd::list 。相反,您应该将 Daten 声明为 ref class 并使用 List 来存储按钮。

using namespace System.Collections.Generic; //For Generic List

public ref class Daten
{
public:
Daten();
void addButton(MyButton^ pBtn);
MyButton^ getButton(int pIdx);

private:
List<MyButton^>^ myButton;
};

我认为如果成员函数不是静态的(全部或全部),您不希望列表是静态的,所以我删除了它。它看起来也应该在任何地方都使用 MyButton

为什么在 C++/CLI 代码中使用 std::vector 的原因:
如果您有现有的(纯)C++ 代码来处理信息,您可能想要构建一个对象 vector ,但在这种情况下,您将使用纯 C++ 数据构建它,使用 .Net 类或对象。您还可以调用在 std::vector 中返回数据的 C++ 代码。在这种情况下,您可以将数据转换/编码为 .Net 集合和对象,以便在 C++/CLI 中使用或发送到使用 C# 构建的 .Net 类。

注意:
如果你真的想使用 std::vector 并且不打算开始一个 C++/CLI 项目,你需要重新开始并为项目选择一个不同的模板(MFC 或 Win32 是两个选项这和 UI 将不是 WinForms,您将无法访问 .Net 对象或类。

关于c++ - Visual C++ 2012 在类中使用 std::vector 或 std::list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23519002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com