【问题标题】:C++ How do I change the value of the original variable in a function?C ++如何更改函数中原始变量的值?
【发布时间】:2018-04-24 20:28:44
【问题描述】:
#include "box.h"

box::box()
{
    boxX= 50.0f;
    boxY= 50.0f;


    box.setSize(Vector2f(boxX, boxY));
    box.setFillColor(Color::Red);


}

box::~box()
{
}

void box::Update(RectangleShape plr)
{
    *boxXPtr= 550.0f;
    *boxYPtr= 550.0f;

    box.setSize(Vector2f(boxX, boxY));
}

void box::Draw(RenderWindow & window)
{

    window.draw(box);
}

即使执行更新功能,显示的框也是 50x50。我认为使用指向它的指针时会更改原始值,但无论如何该值仅在函数内更改。

#ifndef BOXP_H
#define BOXP_H
#include<SFML\Graphics.hpp>
using namespace sf;
class BoxP
{
public:
    BoxP();
    ~BoxP();

protected:
    RectangleShape box;

    float boxX;
    float boxY;

    float* boxXPtr= &texBoxX;
    float* boxYPtr= &texBoxY;
};

#endif

我包含了基类的 .h 并更改了一些内容。仍然有同样的问题。

感谢到目前为止的帮助

【问题讨论】:

  • 显示您的 box.h 文件。
  • textBoxXtexBoxY 是什么?你也可以显示类声明吗?我们需要Minimal Complete Verifiable Example,以便重现错误并提供帮助
  • box::Update() 可以看到的boxXPtrboxYPtr 在哪里?又为什么Box的构造函数会创建新的同名局部变量并立即丢弃?
  • 如果您可以粘贴类声明将非常有用。我的回答可能正确,但声明会确认。
  • &amp;boxX 可以在任何地方使用时,boxXPtr 的原因是什么?

标签: c++ class pointers reference sfml


【解决方案1】:

两种说法

float* boxXPtr= &texBoxX;
float* boxYPtr= &texBoxY;

导致新变量被实例化,这显然是遮蔽类成员。

boxXPtr= &texBoxX;
boxYPtr= &texBoxY;

是解决办法。

【讨论】:

  • 在初始化列表中设置值通常是真正的解决方法;)
猜你喜欢
  • 1970-01-01
  • 2021-02-28
  • 2021-10-12
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
相关资源
最近更新 更多