我正在尝试将 C 结构包装在 C++ 类中以利用内存管理等。我把这个结构变成了一个私人成员,并提供了一个公共功能来提供访问权限。返回类型是常量,因为所有将对象作为参数的函数都const
在其签名中。
#include <gsl/gsl_rng.h>
class GSLRand {
gsl_rng* r_; // see links below
public:
GSLRand() {
gsl_rng_env_setup();
r_ = gsl_rng_alloc(gsl_rng_default);
}
~GSLRand() {
gsl_rng_free(r_);
}
const gsl_rng* rng() {
return r_;
}
};
这一切都编译得很好。当我变得聪明并尝试添加复制构造函数时,就会出现问题。把它引入课堂,比如......
public:
....
GSLRand(const GSLRand& R) {
r_ = gsl_rng_alloc(gsl_rng_taus);
gsl_rng_memcpy(r_, R.rng());
}
....
我收到以下编译器错误:
GSLRand.h:在复制构造函数“GSLRand::GSLRand(const GSLRand&)”中: GSLRand.h:35:错误:将 'const GSLRand' 作为 'gsl_rng* GSLRand::rng()' 的 'this' 参数传递会丢弃限定符
我在 Mac 上使用 g++。我已经尝试了不同的变体,但仍然无法弄清楚我是如何混淆编译器(或我自己!)。有趣的是,当我const
从rng()
.
有任何想法吗?
有关使用的函数的文档: 随机数生成,“环境变量”和“复制生成器”部分。