如何使用成员函数从main()访问数组?

时间:2014-11-15 18:58:13

标签: c++ arrays function pointers compiler-errors

我有这个子类Pirate.cpp,我想让它的mov函数从main访问一个数组。
此数组基本上是地图(要检查它是否已经发货,停靠并访问数组以将对象的(海盗船)位置从map[1][1]更改为map[1][2]

这张地图是一个海洋物体的二维数组,每个人都可以用指针抓住一艘船。

Ship是盗版的父类(在将dynamic_cast插入Pirate指针之前,我有其他子类Ship

我有错误代码:'Map' , 'Place' was not declared in this scope我理解。

所以基本上我该如何处理这个范围问题?有替代方法吗?

Pirate.cpp

#include "pirate.h"
#include "Sea.h"

void Pirate::mov()
{
    MAP[1][2]->(*place)=MAP[1][1]->(*place)
    MAP[1][2]->(*place)=NULL
}

Sea.h

#ifndef SEA.H
#define SEA.H
#include "ship.h"

class Sea
{
private:
    bool hasShip;
    bool isDock;
protected:
    Ship *place = NULL;
public:
    bool gethasShip() const {return hasShip;}
    bool getisDock() const  {return isDock;}
    void sethasShip(bool i) {hasShip = i;}
    void setisDock(bool i)  {isDock = i;}
};
#endif

#include <iostream>
#include <vector>
#include <string>
#include "Ship.h"
#include "Sea.h"
#define SIZE 100

using std::cout;
using std::vector;

extern Sea Map[SIZE][SIZE];
int main()
{
    Sea Map[SIZE][SIZE];
}

2 个答案:

答案 0 :(得分:2)

你可以做几件事:

您可以通过在main()之外声明地图来使地图成为全局变量,并使用externPirate::mov内到达它。

你也可以创建一个单例,但是它遇到了一些像globals一样的问题。

更好的解决方案是包含Map和Pirates的类。当你构建你的海盗时,你可以让每个海盗都参考地图。

答案 1 :(得分:2)

extern发出声明而不是定义。它只说某个对象被定义的地方。

您需要在main.cpp中使用Sea Map[SIZE][SIZE];,在其他访问该阵列的文件中使用extern Sea Map[SIZE][SIZE];