Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ visualc&x2B+;2012在类中使用std::vector或std::list_C++_List_Visual Studio 2012_Vector_C++ Cli - Fatal编程技术网

C++ visualc&x2B+;2012在类中使用std::vector或std::list

C++ visualc&x2B+;2012在类中使用std::vector或std::list,c++,list,visual-studio-2012,vector,c++-cli,C++,List,Visual Studio 2012,Vector,C++ Cli,我刚开始使用VisualStudio2012,我尝试在类的私有部分创建一个std::list或std::vector,以保存我想要创建的编辑器中的数据。我想在那里保存必要的数据,比如UI组件的X和Y坐标,但是我无法创建std::list或std::vector 保存数据的类: ref class MyButton { public: MyButton(System::Windows::Forms::Button ^pBtn); private: int X; int

我刚开始使用VisualStudio2012,我尝试在类的私有部分创建一个std::list或std::vector,以保存我想要创建的编辑器中的数据。我想在那里保存必要的数据,比如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;
};
该类将管理所有类型的组件(开始时我只使用按钮,但稍后我希望保存图片等中的数据):

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

有没有办法在类中创建列表或向量?我可以将数据保存在临时文件中,但我认为一定有办法


谢谢你的任何建议。

< P>这里的主要问题是你试图混合C++/CLI对象和C++容器。 在您的情况下,您不希望在此处使用
std::vector
std::list
。相反,您应该将
Daten
声明为
ref类
,并使用
列表
存储按钮

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;
};
使用名称空间System.Collections.Generic//对于通用列表
公共参考类日期
{
公众:
Daten();
作废添加按钮(MyButton^pBtn);
MyButton^getButton(intPIDX);
私人:
列表^myButton;
};
我不认为在成员函数不为静态(要么全部,要么无)的情况下列表是静态的,所以我删除了它。它看起来还应该到处使用
MyButton

在C++/CLI代码中使用
std::vector的原因:
如果有现有的(纯)C++代码来处理信息,那么您可能需要构建对象的向量,但在这种情况下,您将用纯C++数据构建它,而不是使用.NET类或对象。您也可以调用C++代码,它在<代码> STD::vector < /代码>中返回数据。在这种情况下,您可以将数据转换/封送到.Net集合和对象中,以便在C++/CLI中使用,或发送到使用C#构建的.Net类

注意:

如果您确实想使用
std::vector
,并且不打算启动C++/CLI项目,则需要重新开始并为项目选择不同的模板(MFC或Win32是这两个选项,UI将不是WinForms,您将无权访问.Net对象或类)请编辑您的问题,包括完整的未编辑的错误日志。我添加了C++ CLI标签,因为这里显示的代码明显是C++ + CLI,而不是纯C++。C++ + CLI是一种语言和语法扩展,用来编写C++代码,与.NET交互很容易。这里的问题是,你不能有一个<代码>按钮<代码>,但是需要一个<代码>按钮> <代码>。但实际上,您应该坚持使用C++/CLI代码,并使用
List
而不是
std::vector
(尤其是存储.Net对象引用)。您不能在std::List或std::vector中存储托管对象(MyButton实例)。使用.NET容器进行此操作。请看下面的帖子:好的,谢谢,我会在大约一个小时内登入广告,因为我现在必须做一些事情,我必须把它从德语翻译成英语。
#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;
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;
};