C ++ / CLI我不能在我的集合中添加一个类

时间:2010-02-02 03:21:22

标签: c++-cli

我试图简单地将FilterInfo类添加到我的FilterInfo集合中。我正在努力理解为什么以下代码不断抛出错误:

  

系统::收藏集::一般::表::添加”   :无法转换参数1   'Ziz :: FilterInfo *'来   '洗斯坡上:: 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;
        }

5 个答案:

答案 0 :(得分:2)

您将_blockList声明为

List<FilterInfo>^ _blockList;

但您正在尝试添加

FilterInfo* f

到它。它不能工作,因为一个是指针而另一个是引用。

我不确定“价值”如何适用于

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

你是因为宣布一个非管理阶级 要管理它,你应该使用

public ref class FiterInfo

这将允许您使用FilterInfo *而无需明确管理内存。

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

答案 1 :(得分:1)

_blockList->Add(*f);

答案 2 :(得分:0)

您还必须使用FilterInfo构建gcnew。如果没有编组,你就无法将这些混合在一起。

答案 3 :(得分:0)

FilterInfo不是FilterInfo*。如果你想要一个指向FilterInfo的指针列表,你需要说List<FilterInfo*>。由于FilterInfo是一个值类,尽管您可能只想跳过new

     FilterInfo fi;
     _blockList->Add(fi);

答案 4 :(得分:0)

public ref class A

{     };

int main(array<System::String ^> ^args)  
{  
      Console::WriteLine(L"Hello World");  
      ICollection<A^>^ oCollection = gcnew List<A^>();  
      oCollection->Add(gcnew A());  
      return 0;  
}