【问题标题】:How to access an array from main() with a member function?如何使用成员函数从 main() 访问数组?
【发布时间】:2014-11-15 18:58:12
【问题描述】:

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

这张地图是一个二维的海对象数组,每个人都可以用指针持有一艘船。

Ship 是 pirate 的父类(在将 Pirate 插入 Ship 指针之前,我还有其他子类我会做 dynamic_cast)。

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

那么基本上我该如何处理这个范围问题?有其他方法吗?

海盗.cpp

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

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

海.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];
}

【问题讨论】:

  • 我建议你获取变量 bool Sea::hasShipvoid Sea::sethasShip(bool) 的 rif - 当 placeNULL 时,你没有 Ship,不是吗?

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


【解决方案1】:

extern 进行声明而不是定义。它只是说在某个地方定义了对象。

您需要在 main.cpp 中包含 Sea Map[SIZE][SIZE];,在您访问数组的其他文件中包含 extern Sea Map[SIZE][SIZE];

【讨论】:

    【解决方案2】:

    你可以做几件事:

    您可以通过在 main() 之外声明 Map 来将其设为全局变量,并使用 externPirate::mov 内访问它。

    您也可以创建一个单例,但这会遇到一些与全局相同的问题。

    更好的解决方案是包含地图和海盗的类。当您构建海盗时,您可以让每个海盗都引用地图。

    【讨论】:

    • 我做了它仍然说 MAP,Place is not declared in this scope
    • erkhm...extern 进行声明而不是定义。它只是说在某个地方定义了对象。将static Sea Map[SIZE][SIZE]; 放在main.cpp 中,将extern static Sea Map[SIZE][SIZE]; 放在使用数组的文件中。
    • @GingerPlusPlus 我添加了外部静态海图[SIZE][Size];仍然说 MAP 没有在范围内声明
    • @GingerPlusPlus 您不能将 extern 和 static 结合起来(或者至少 clang 不允许我这样做)。如果要使变量全局化,则需要删除两个代码 sn-ps 中的静态变量。
    • 我对你的建议投了反对票。
    猜你喜欢
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-06
    • 2015-04-01
    • 2011-05-02
    相关资源
    最近更新 更多