【问题标题】:c++ get methods not returning pointer to a nodec ++ get方法不返回指向节点的指针
【发布时间】:2014-11-30 07:10:06
【问题描述】:

我已将程序的问题缩小到我的 North - West 节点的 get 方法。

程序的总体目的是从输入文件创建迷宫游戏并分配东北南和西。我相信程序的所有其他功能都是正确的我只是不确定我在四个 get 方法中哪里出错了。

set 方法确实按预期工作,我已经包含了它们以及构造函数以显示节点是如何被初始化的。

另外,我已经验证文件被正确解析了。

Node::Node(char e){

Name = e;
North = NULL;
East = NULL;
South = NULL;
West = NULL;

}


Node Node::get_North(){

    return *North;

}

Node Node::get_East(){

    return *East;

}

Node Node::get_South(){

    return *South;

}

Node Node::get_West(){

    return *West;

}

void Node::set_North(Node *n){
    //cout << "inside set_North\n";
    North = n;

}

void Node::set_East(Node *e){
    //cout << "inside set_East\n";
    East = e;

}

void Node::set_South(Node *s){
    //cout << "inside set_South\n";
    South = s;

}

void Node::set_West(Node *w){
    //cout << "inside set_West\n";
    West = w;

}

我们将不胜感激任何发现错误的帮助。

【问题讨论】:

  • 您真的要返回Nodes 而不是Node *s?你知道这会复制节点吗?
  • 您的代码错误。两种可能的解决方案:1)将签名从“Node”更改为*Node(如您所愿返回指针),或2)使用引用“&”。这是一个很好的教程:cprogramming.com/tutorial/references.html
  • 旁白:如果你有一个 setFoo 和一个 getFoo 函数,你的设计就会自动被怀疑。

标签: c++ list file pointers text


【解决方案1】:

尽管您提到它们的返回类型为普通对象,但您的 getter 正在返回指针。

所以,而不是这个:-

Node Node::get_North()

使用

Node* Node::get_North()

【讨论】:

  • 感谢您指出这一点,现在看来,我遇到的问题不仅仅是 getter 方法。我会继续做出改变。
【解决方案2】:

return *NodeName 表示您返回实际的Node 实例而不是指向实例的指针。这意味着数据将被复制到您的目的地,而不是数据的地址。

只需将*NodeName 更改为NodeName

【讨论】:

    【解决方案3】:

    因此,您最有可能遇到的问题是您有一个全局节点列表(您的房间 [] 数组?),但是您正在返回这些对象的副本,然后您调用 set 方法...所以你没有修改所需的对象。

    仔细考虑对象的存储位置,以及它们是如何在您的程序中传递的。

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      相关资源
      最近更新 更多