功能未按预期工作
Function not working as intended?
首先,我想说,在编程方面,我仍然是一个完全的新手,我已经在寻找这个问题的答案,问题是,我不确定出了什么问题。
我写了一个函数来设置sf::Text对象的参数:
void FontParam(sf::Text obj, sf::Font font, std::string text, sf::Color color, int size, int positionX, int positionY)
{
obj.setCharacterSize(size);
obj.setFont(font);
obj.setColor(color);
obj.setString(text);
obj.setPosition(positionX,positionY);
}
使用:
FontParam(t[0],font_Clubland,"R",sf::Color::White,100,100,100);
绘制它将不起作用。写为:
t[0].setFont(font_Clubland);
t[0].setColor(sf::Color::White);
t[0].setPosition(100,100);
t[0].setString("R");
t[0].setCharacterSize(100);
并绘制它。
非常感谢任何帮助或提示,提前感谢!
编辑:-------------------------
如果有人想知道,访问违规是因为我没有引用sf::Font。正确的功能是:
void FontParam(sf::Text &obj, sf::Font &font, std::string text, sf::Color color, int size, int positionX, int positionY)
{
obj.setCharacterSize(size);
obj.setFont(font);
obj.setColor(color);
obj.setString(text);
obj.setPosition(positionX,positionY);
}
谢谢你的帮助!
将t[0]
的副本传递到函数中,更改副本,然后放弃更改。相反,您可能希望通过引用传递t[0]
,以便更改更新到原始对象中。这可以通过将参数sf::Text obj
更改为sf::Text& obj
(注意添加了&
)来容易地完成。
语法
void FontParam(sf::Text obj
被称为"pass-by-value"-您将原始sf::Text的值传递给该函数,并创建一个新的本地副本,该副本具有该函数的生存期。
这是一种默认行为,因为大多数情况下,您将值传递给函数,而不希望该函数修改您的本地工作。
for (int i = 0; i < 10; ++i) {
function(i);
}
如果"function(i)"将"i"改为11,则会得到错误的行为。
要更直接地传递变量,以便调用方和函数共享同一实例,必须使用引用传递或指针传递。
传递引用在接收器的变量名上使用"&"装饰器。Pass-by-pointer使用"&"引用来获取发送变量的地址,并使用"*"作为接收器上的装饰符,但您还必须检查空指针并使用取消围栏,所以我只描述Pass-by-reference。
#include <iostream>
#include <string>
void foo1(std::string str) {
str += "Hello";
}
void foo2(std::string str) {
str += "World";
}
int main() {
std::string str = "";
foo1(str);
foo2(str);
std::cout << str << std::endl;
}
将输出"世界"。
您可能需要在许多地方对代码进行类似的修改。
帮助自己避免犯这样错误的一个好方法是,当您特别希望参数是不可变的时,将其装饰为"const",这可能会迫使自己使用局部变量来捕获修改。
void print(const std::string& str, const int x, const int y)
{
const int endX = x + widthPx(str) + 4;
const int endY = y + heightPx(str) + 4;
drawBow(x, y, endX, endY);
const int cursX = x + 1;
const int cursY = y + 1;
cursor(cursX, cursY);
drawText(str);
}
请注意,在可能的情况下,应该使用const&以避免复制的开销(复制字符串可能会很快变得昂贵)。
- OpenSSL 解密功能无法正常工作
- 链表中的显示功能无法正常工作
- 打印功能无法正常工作 - 链表
- 排序功能在C++中未按预期工作
- 如何组织 git 工作流以修复错误并同时引入新功能
- 为什么必须动态分配扩展数组才能使此功能正常工作C++
- Qt C++括号匹配和突出显示当前线路功能无法协同工作
- 下面的代码是如何工作的?它输出分解的数字并且功能齐全,我只是不明白它是如何做到的
- C 功能如何内部工作
- 大写功能无法正常工作
- 为什么这个base64解码/编码功能不能正常工作?
- 如何使功能"run"工作。程序在调用运行时退出
- C 11螺纹 - 非静态成员功能的使用无效 - 工作GCC 5.1.0损坏的GCC 7.3.1
- Lower_bound功能无法正常工作
- 仅一个功能的链接错误.在同一类和CPP文件中具有相似签名的其他函数工作正常
- 功能测试宏在 Visual C++ 中无法正常工作
- 将Linux打开,读,写,关闭功能以在Windows上工作
- 如何使用字符串更改此插入功能以在链接列表中工作
- 澄清功能如何工作并与类相关
- C //尝试重写一个工作代码以包括我的功能