首页 > 解决方案 > 为什么会出现这个错误?我们不能在函数括号内使用格式宏吗?

问题描述

代码:

fltk::frame::Frame::new(0,0, 300, 100, format!("side item {}", i));

输出错误:

the trait `std::convert::From<std::string::String>` is not implemented for `std::option::Option<&'static str>`

标签: rustrust-cargofltk

解决方案


format!()产生一个String,而Frame::new期望一个(可选的)&'static str,即一个字符串切片,在程序的整个生命周期中都是有效的。

这几乎意味着您只能使用字符串文字。所以不,你不能直接使用format!(). 似乎 FLTK 不打算以这种方式使用动态分配的字符串。

有一个技巧可以解决这个问题Box::leak。但是请注意,它会按照它在锡上所说的那样做 - 它会泄漏内存,除非您Box::from_raw()在小部件被销毁后通过它回收它。

let leaked_title = &*Box::leak(format!("abc {}", 1).into_boxed_str())
fltk::frame::Frame::new(0,0, 300, 100, leaked_title);

推荐阅读