我有这个子类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];
}
答案 0 :(得分:2)
你可以做几件事:
您可以通过在main()
之外声明地图来使地图成为全局变量,并使用extern
从Pirate::mov
内到达它。
你也可以创建一个单例,但是它遇到了一些像globals一样的问题。
更好的解决方案是包含Map和Pirates的类。当你构建你的海盗时,你可以让每个海盗都参考地图。
答案 1 :(得分:2)
extern
发出声明而不是定义。它只说某个对象被定义的地方。
您需要在main.cpp中使用Sea Map[SIZE][SIZE];
,在其他访问该阵列的文件中使用extern Sea Map[SIZE][SIZE];
。