C++ cli C++/CLI I可以';I don’我不能把一个类添加到我的集合中

C++ cli C++/CLI I可以';I don’我不能把一个类添加到我的集合中,c++-cli,C++ Cli,我试图简单地将FilterInfo类添加到我的FilterInfo集合中。我花了很长时间试图理解为什么以下代码不断抛出错误: 系统::集合::通用::列表::添加' :无法从转换参数1 'Ziz::FilterInfo*'到 “Ziz::FilterInfo” 我只是在学习C++/CLI,因为我是一名C#开发人员,我相信这很简单,但我肯定可以使用一些指针。我的代码如下: public value class FilterInfo { public:

我试图简单地将FilterInfo类添加到我的FilterInfo集合中。我花了很长时间试图理解为什么以下代码不断抛出错误:

系统::集合::通用::列表::添加' :无法从转换参数1 'Ziz::FilterInfo*'到 “Ziz::FilterInfo”

我只是在学习C++/CLI,因为我是一名C#开发人员,我相信这很简单,但我肯定可以使用一些指针。我的代码如下:

     public value class FilterInfo
    {
        public:
            char* Address;
    };

    public ref class Ziz
    {
    private:
        List<FilterInfo>^ _blockList;

    public:
        // Constructor
        Ziz(){
            _blockList = gcnew List<FilterInfo>();
        }

        List<FilterInfo>^ GetBlockList()
        {

            for each(_IPFILTERINFO ip in _packetFilter->GetBlockList())
            {
                // _IPFILTERINFO is the native C++ struct.
                FilterInfo* f = new FilterInfo();
                _blockList->Add(f);
            }
            return _blockList;
        }
公共值类过滤器信息
{
公众:
字符*地址;
};
公共参考类Ziz
{
私人:
列表^区块列表;
公众:
//建造师
Ziz(){
_blockList=gcnewlist();
}
列表^GetBlockList()
{
对于每个(\u packetFilter->GetBlockList()中的\u IPFILTERINFO ip)
{
//IPIPFLTENFILL是本机C++结构。
FilterInfo*f=新的FilterInfo();
_区块列表->添加(f);
}
返回块列表;
}

你也必须用
gcnew
构建你的
FilterInfo
。你不能不封送就把它们混合在一起。

你也必须用
gcnew
构建你的
FilterInfo
你不能不封送就把它们混合在一起。

FilterInfo
不是t
FilterInfo*
。如果您想要一个指向FilterInfo的指针列表,您需要说
List
。因为FilterInfo在这里是一个值类,但您可能只想跳过
新建的

     FilterInfo fi;
     _blockList->Add(fi);

FilterInfo
不是
FilterInfo*
。如果你想要一个指向FilterInfo的指针列表,你需要说
List
。因为FilterInfo在这里是一个值类,尽管你可能只想跳过
新建的

     FilterInfo fi;
     _blockList->Add(fi);

您已将_blockList声明为

List<FilterInfo>^ _blockList;
它无法工作,因为一个是指针,另一个是引用

我不确定“价值”是如何体现的,但我知道

public value class FilterInfo
{
    public:
        char* Address;
};
在声明非托管类之前,您将被撤销 要管理它,您应该使用

public ref class FiterInfo
这将允许您使用FilterInfo*,而无需明确管理内存


最后,char*在C++/CLI中并不是很好,我建议使用您声明为_blockList的System::String

List<FilterInfo>^ _blockList;
_blockList->Add(*f);
它无法工作,因为一个是指针,另一个是引用

我不确定“价值”是如何体现的,但我知道

public value class FilterInfo
{
    public:
        char* Address;
};
在声明非托管类之前,您将被撤销 要管理它,您应该使用

public ref class FiterInfo
这将允许您使用FilterInfo*,而无需明确管理内存

最后,char*在C++/CLI中不是很好,我建议使用System::String

_blockList->Add(*f);
{ })

int main(数组^args)
{  
控制台::WriteLine(L“Hello World”);
ICollection ^oCollection=gcnew List();
o收集->添加(gca());
返回0;
}
{ })

int main(数组^args)
{  
控制台::WriteLine(L“Hello World”);
ICollection ^oCollection=gcnew List();
o收集->添加(gca());
返回0;
}