我是C ++的新手,这是我的第一个程序,因此可能有一些奇怪/奇怪的代码对C ++来说根本不是逻辑。
我正在使用Visual Studio 2015 C ++ / cli,我试图在另一个对象中获取对象列表。
LinePiece.h:
ref class LinePiece
{
private:
std::string* Type;
int ElementNr;
int Status;
int X, Y, X2, Y2;
int Diameter;
std::string* Text;
public:
LinePiece();
LinePiece(std::string* a_type, int a_ElementNr, int a_Status, int a_x, int a_y, int a_x2, int a_y2)
{
Type = a_type;
ElementNr = a_ElementNr;
Status = a_Status;
X = a_x;
Y = a_y;
X2 = a_x2;
Y2 = a_y2;
}
};
element.h展开:
#include "LinePiece.h"
ref class Element
{
public:
Element();
//properties
std::string* ON; //order nummer
std::string* MO; //order merk
std::string* SN; //element nummer
std::string* RS; //element afwerking
std::string* OW; //wapeningspatroon
std::string* CN; //element calculation number
int el_length; //element lengte
int el_width; //element hoogte
int el_beginX; //element beginpunt
int el_concrete_height; //element hoogte beton
int el_iso_height; //element isolatie hoogte
std::string* el_weight; //element gewicht
std::list<LinePiece^>* listLinePieces; //lijst met contouren
};
因此,当我尝试构建此代码时,它会出现以下错误:
&#39;&安培;&安培;&#39;不能在类型&#39; LinePiece ^&#39;
上使用此间接如何解决此问题,以便获取包含LinePiece
个对象的对象列表?
答案 0 :(得分:1)
std::list<LinePiece^>* listLinePieces;
当你在罗马时,像罗马人一样行事变得非常重要。您无法在非托管集合中存储托管对象引用。管理对象的存储由垃圾收集器处理,但它没有希望找回这些引用。它不知道有关std :: list内部结构的bean,因此无法可靠地找回托管对象引用。编译器必须抱怨它。
请改用List<LinePiece^>^
。还有很多,很多比std :: list和cliext :: list更有效。
std::string* el_weight;
对于所有这些std :: string指针来说,你可能已经发现了必须存储指针的硬方法。 C ++ / CLI编译器不允许将值存储在托管对象中,当垃圾收集器在压缩堆时移动对象时太危险。你必须编写一个非常丑陋的构造函数来分配它们。只要你实现了终结器(不要跳过!),现在就可以了。但是当你把它们变成String ^时,罗马的生活会轻松得多。所以垃圾收集器会处理它们。
答案 1 :(得分:0)
您还没有提到它,但您正在尝试使用某些特定的C ++ / CX功能,是否有意?如果是这样,我认为您还需要添加命名空间,否则请跳过ref
和^
。
完全理解你想要做什么的代码太少了,但是我跳过了所有字符串的指针,我不认为这是你想做的事情,但是因为我没有&# 39;我有其余的代码,我不能确定。另外,制作列表的指针可能也不是你想要的。
答案 2 :(得分:0)
库STL / CLR包含名称空间cliext而不是std。
#include <cliext\list>
...
cliext::list <LinePiece^> listLinePieces;
我建议放弃指向std :: string的指针,转而使用.Net中的System :: String ^。
修改强>
.Net还包括双向链表的实现。使用它:
#using <System.dll>
using namespace System::Collections::Generic;
...
LinkedList<LinePiece^> LinkedList;
详细了解MSDN