2010-02-02 22 views
0

我试图简单地添加一个FilterInfo类到我的FilterInfo集合。我有一个可怕的时间试图了解为什么下面的代码不断抛出的错误:C++/CLI我不能添加一个类到我的集合

System::Collections::Generic::List::Add' : cannot convert parameter 1 from 'Ziz::FilterInfo *' to '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; 
     } 

回答

2

你宣布_blockList作为

List<FilterInfo>^ _blockList; 

,但你想

FilterInfo* f 

添加到它。它不能工作,因为一个是指针,另一个是参考。

我不知道“价值”如何适应,但

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

你是derefore声明非托管类 ,使其管理的,你应该使用

public ref class FiterInfo 

这将使您可以使用FilterInfo *而不必明确管理内存。

最后,字符*是不是在C那么大++/CLI,我会建议使用系统::字符串

0

你必须构建你FilterInfogcnew为好。你无法真正地将这些混合在一起,而无需编组。

0

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

 FilterInfo fi; 
    _blockList->Add(fi); 
1
_blockList->Add(*f); 
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; 
} 
相关问题