我试图简单地将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;
}
答案 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;
}