我在尝试从另一个类访问我的主类中使用的数组时遇到了麻烦。我的应用程序是一个用于制作2D平台游戏的编辑器 - 它基本上允许您放下2D资产(片段)并建立一个级别。
我的主类处理一组地图段类(数组中的每个段类都包含地图上段的位置,比例和旋转等信息)并将它们绘制到屏幕上。
我有一个单独的类,它基本上是一个面板(可拖动,可调整大小,就像你在Photoshop中找到的那样),它在主类中初始化,用于从文件中绘制可用段的网格。我需要的是能够点击其中一个段,然后将信息添加到主类中引用的数组。
我的主类“Map”声明了一个数组:
map.h(简化)
class Map
{
public:
MapSegment* mapSeg[512];
};
我在创建面板时尝试发送该数组的引用以显示可用的段,如下所示:
Panel* segmentPane = new SegmentPanel(sf::Rect<float>(200,200,250,200), mapSeg);
Segment Panel标题形成如下:
class SegmentPanel : public Panel
{
public:
SegmentPanel(sf::Rect<float> _position, MapSegment* mapSeg[512];);
void Update();
void Draw(sf::RenderWindow & renderWindow);
void ReadSegments();
private:
std::vector<SegmentDefinition *> segDef;
MapSegment* mapSeg[512];
};
和SegmentPanel cpp:
SegmentPanel::SegmentPanel(sf::Rect<float> _position, MapSegment* mapSeg[512])
: Panel(_position)
{
panelTitle = "Segment Selection";
}
void SegmentPanel::Update()
{
// Update segments
}
void SegmentPanel::Draw(sf::RenderWindow & renderWindow)
{
// Draw default panel items
Panel::Draw(renderWindow);
// Draw segments
}
但是,从SegmentPanel.cpp类向数组添加元素似乎没有反映在我的主Main类中 - 它似乎在内存中创建了一个新数组。
使用C#后,我仍然是C ++的新手!
答案 0 :(得分:4)
首先,C ++中没有数组参数类型。在SegmentPanel
构造函数中,MapSegment* mapSeg[512]
参数实际上等同于MapSegment** mapSeg
;它只是指向指针的指针!
Panel* segmentPane = new SegmentPanel(sf::Rect<float>(200,200,250,200), mapSeg);
在这里,您尝试传递数组mapSeg
。这经历了数组到指针的转换,将其转换为指向其第一个元素(MapSegment**
)的指针,然后传递该指针。
这很好,但是你对构造函数中的mapSeg
参数没有任何作用。如果要访问该数组,则需要将该指针存储在某处。您可以将名为SegmentPanel
的{{1}}的成员更改为:
mapSeg
然后将构造函数更改为:
MapSegment** mapSeg;
请注意成员初始化列表中SegmentPanel::SegmentPanel(sf::Rect<float> _position, MapSegment** mapSeg)
: Panel(_position), mapSeg(mapSeg)
{
panelTitle = "Segment Selection";
}
的初始化。
另一种方法是改为使用引用数组类型参数。您的构造函数现在看起来像:
mapSeg
SegmentPanel::SegmentPanel(sf::Rect<float> _position, MapSegment* (&mapSeg)[512])
: Panel(_position), mapSeg(mapSeg)
{
panelTitle = "Segment Selection";
}
参数的类型是“对mapSeg
的512个指针数组的引用”。然后,您需要使成员MapSegment
具有相同的类型。