c ++ - 在类

时间:2017-03-31 02:38:56

标签: c++ pointers reference

我有2个课程,QtreeQnode

//QuadTree.hpp:
#include <stdio.h>
#include <iostream>
#include <SFML/Graphics.hpp>

class QNode;

class QTree{
public:
    int depth;
    sf::Vector2f bound;

    QTree();

    void setRoot(QNode q);
};

class QNode{
public:
    bool isLeaf = false;
    int layer = 0;
    sf::Vector2f position;
    sf::Vector2f bound;
};

//Quadtree.cpp:
#include "QuadTree.hpp"

QTree::QTree(){
    bound = sf::Vector2f(100,200);
}

void QTree::setRoot(QNode q){
    q.bound = bound;
}

然后在main.cpp

#include <iostream>
#include <SFML/Graphics.hpp>
#include "QuadTree.hpp"

using namespace std;

int main(){
    QTree qt;
    QNode q;

    qt.setRoot(q);

    cout << q.bound.x <<endl;

}

cout结果为0。我期待它是100。 我是c ++初学者,并且从google读了很多相关内容。但是仍然不确定如何使其工作。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您需要更改setRoot(),以便通过引用获取参数。

void QTree::setRoot(QNode &q){
    q.bound = bound;
}

您的代码是按值传递的,因此setRoot()会修改q的副本。