Форум программистов, компьютерный форум, киберфорум
Boost C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
13 / 13 / 4
Регистрация: 15.04.2010
Сообщений: 61

boost::optional ругается с компилятором и не хочет присваивать ссылку

07.05.2013, 17:50. Показов 2005. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь присвоить ссылку на const double объекту boost::optional<double&> в этом коде


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "/usr/include/boost/optional/optional.hpp"
#include <iostream>
 
int main(int argc, char *argv[]){
 
 
        class Data{
                public:
                        const double getData {return data_;};
                        Data (double data) : data_(data);
                private:
                        double data_;
        };
 
 
        // эта вещь должна быть объявлена заранее, а потом заполнена 
        // ссылками на нужные элементы
        boost::optional<double&> oA[10];
 
        Data A(5.0);
        for (int i = 0 ; i < 10; i++ ){
              const double& rA = A.getData();
              oA[i] = rA;
              
        }
        std::cout<<*oA;
 
        return 0;
}
ну компилятор ругается длинным gcc-матом =)

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
In file included from main.cpp:1:0:
/usr/include/boost/optional/optional.hpp: In member function ‘void boost::optional_detail::optional_base<T>::assign_expr_to_initialized(const Expr&, const void*) [with Expr = double, T = double&]’:
/usr/include/boost/optional/optional.hpp:320:14:   instantiated from ‘void boost::optional_detail::optional_base<T>::assign_expr(const Expr&, const Expr*) [with Expr = double, T = double&]/usr/include/boost/optional/optional.hpp:575:9:   instantiated from ‘boost::optional<T>& boost::optional<T>::operator=(const Expr&) [with Expr = double, T = double&, boost::optional<T> = boost::optional<double&>]’
main.cpp:22:23:   instantiated from here
/usr/include/boost/optional/optional.hpp:403:8: error: no matching function for call to ‘boost::optional_detail::optional_base<double&>::assign_value(const double&, boost::optional_detail::optional_base<double&>::is_reference_predicate)/usr/include/boost/optional/optional.hpp:403:8: note: candidates are:
/usr/include/boost/optional/optional.hpp:433:10: note: void boost::optional_detail::optional_base<T>::assign_value(boost::optional_detail::optional_base<T>::argument_type, boost::optional_detail::optional_base<T>::is_not_reference_tag) [with T = double&, boost::optional_detail::optional_base<T>::argument_type = double&, boost::optional_detail::optional_base<T>::is_not_reference_tag = mpl_::bool_<false>]
/usr/include/boost/optional/optional.hpp:433:10: note:   no known conversion for argument 1 from ‘const double’ to ‘boost::optional_detail::types_when_is_ref<double&>::raw_type& {aka double&}/usr/include/boost/optional/optional.hpp:434:10: note: void boost::optional_detail::optional_base<T>::assign_value(boost::optional_detail::optional_base<T>::argument_type, boost::optional_detail::optional_base<T>::is_reference_tag) [with T = double&, boost::optional_detail::optional_base<T>::argument_type = double&, boost::optional_detail::optional_base<T>::is_reference_tag = mpl_::bool_<true>]
/usr/include/boost/optional/optional.hpp:434:10: note:   no known conversion for argument 1 from ‘const double’ to ‘boost::optional_detail::types_when_is_ref<double&>::raw_type& {aka double&}/usr/include/boost/optional/optional.hpp: In member function ‘void boost::optional_detail::optional_base<T>::construct(const Expr&, const void*) [with Expr = double, T = double&]’:
/usr/include/boost/optional/optional.hpp:321:14:   instantiated from ‘void boost::optional_detail::optional_base<T>::assign_expr(const Expr&, const Expr*) [with Expr = double, T = double&]/usr/include/boost/optional/optional.hpp:575:9:   instantiated from ‘boost::optional<T>& boost::optional<T>::operator=(const Expr&) [with Expr = double, T = double&, boost::optional<T> = boost::optional<double&>]’
main.cpp:22:23:   instantiated from here
/usr/include/boost/optional/optional.hpp:392:8: error: no matching function for call to ‘boost::detail::reference_content<double&>::reference_content(const double&)/usr/include/boost/optional/optional.hpp:392:8: note: candidates are:
/usr/include/boost/detail/reference_content.hpp:55:5: note: boost::detail::reference_content<RefT>::reference_content(const boost::detail::reference_content<RefT>&) [with RefT = double&, boost::detail::reference_content<RefT> = boost::detail::reference_content<double&>]
/usr/include/boost/detail/reference_content.hpp:55:5: note:   no known conversion for argument 1 from ‘const double’ to ‘const boost::detail::reference_content<double&>&/usr/include/boost/detail/reference_content.hpp:50:5: note: boost::detail::reference_content<RefT>::reference_content(RefT) [with RefT = double&]
/usr/include/boost/detail/reference_content.hpp:50:5: note:   no known conversion for argument 1 from ‘const double’ to ‘double&
вроде, должно работать по примеру с сайта, кроме того, что у меня данные const

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int a = 1 ;
int b = 2 ;
T& ra = a ;
T& rb = b ;
optional<int&> def ;
optional<int&> opt(ra) ;
 
def = rb ; // binds 'def' to 'b' through 'rb'
assert ( *def == b ) ;
*def = a ; // changes the value of 'b' to a copy of the value of 'a'
assert ( b == a ) ;
int c = 3;
int& rc = c ;
opt = rc ; // REBINDS to 'c' through 'rc'
c = 4 ;
assert ( *opt == 4 ) ;
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.05.2013, 17:50
Ответы с готовыми решениями:

Не хочет работать с 11.0 компилятором
Вообщем выбивает такую ошибку. Что делать?

PUP.Optional.22ChromeEXT, PUP.Optional.Banggood, PUP.Optional.Legacy, PUP.Optional.MySearch
Случилась такая беда: В Хроме автоматически грузятся левые страницы вместо уже открытых (одна из...

Компиляция. Ругается на boost
При компиляции выдает такие ошибки: tmp/ccuaBs73.o: In function `boost::archive::text_oarchive::text_oarchive(std::ostream&amp;,...

2
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
07.05.2013, 17:58
sl_k, И почему это должно работать? const double& и double& капитально разные типы знаете-ли.
C++
1
2
       const double& rA = A.getData();
        oA[i] = rA;
Плохо.

Есть два варианта:
Использовать
C++
1
boost::optional<const double&>
Переделать функцию getData
C++
1
double& getData() { return data_; }
Но тут нужно быть уверен, что объект будет жить и не будет висячей ссылки.
1
13 / 13 / 4
Регистрация: 15.04.2010
Сообщений: 61
07.05.2013, 18:11  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
sl_k, const double& и double& капитально разные типы знаете-ли.

Плохо.

Есть два варианта:
Использовать
C++
1
boost::optional<const double&>
.
Исправил с помощью первого варианта...и пошел листать Страуструпа по типам данным...ссылкам и указателям.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.05.2013, 18:11
Помогаю со студенческими работами здесь

В Google Chrome завелись PUP.Optional.22ChromeEXT, PUP.Optional.Legacy,PUP.Optional.Mail.Ru
Рабочий комп достался с такими проблемами : PUP.Optional.22ChromeEXT, PUP.Optional.Legacy,PUP.Optional.Mail.Ru ( 3 вируса) При запуске...

PUP.Optional.Legacy, Adware.RuKometa, PUP.Optional.FakeYandex, PUP.Optional.RussAd
Доброго времени суток! Прошу помощи в удалении вирусов из заголовка. adwcleaner_7.0.8.0 определяет, но не удаляет. Запустить...

PUP.Optional.Legacy, Adware.RuKometa, PUP.Optional.FakeYandex, PUP.Optional.RussAd
Доброго времени суток! Прошу помощи в удалении вирусов из заголовка. adwcleaner_7.0.8.0 определяет, но не удаляет. Запустить...

Строка не хочет присваивать @":\\"
Всем доброго утра . Строка не хочет присваивать @&quot;:\\&quot; string s += @&quot;:\\&quot;; Вместо ожидаемого &quot;:\\&quot; получается...

Самопальный optional, темплейты, попытка в реализацию fmap для optional
Вкратце, есть у меня мой собственный optional. То, что это optional, не суть важно, дело не в нем, все упоминания о нем можно спокойно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru