Я пытаюсь обернуть структуру 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: In copy constructor ‘GSLRand::GSLRand(const GSLRand&)’:
GSLRand.h:35: error: passing ‘const GSLRand’ as ‘this’ argument of ‘gsl_rng* GSLRand::rng()’ discards qualifiers
Я использую g ++ на Mac.Я пробовал разные варианты и до сих пор не могу понять, как я путаю компилятор (или себя!).Интересно, что я получаю ту же ошибку при удалении спецификатора const
из rng()
.
Есть идеи?
Для документирования используемых функций: генерация случайных чисел, разделы «Переменные среды» и «Копирование генераторов».