#c #simgrid
Вопрос:
Я изучаю почтовые ящики в simgrid, просматривая примеры из документации, однако, когда я пытаюсь скомпилировать примеры, возникают ошибки, в основном в почтовом ящике-> получить. Я помещу фрагмент кода ниже.
if (rank == 0) {
/* The root actor (rank 0) first sends the token then waits to receive it back */
XBT_INFO("Host "%u" send 'Token' to Host "%s"", rank, neighbor_mailbox->get_cname());
std::string msg = "Token";
neighbor_mailbox->put(amp;msg, token_size);
const auto* res = my_mailbox->get<std::string>();
XBT_INFO("Host "%u" received "%s"", rank, res->c_str());
} else {
auto* res = my_mailbox->get<std::string>();
XBT_INFO("Host "%u" received "%s"", rank, res->c_str());
XBT_INFO("Host "%u" send 'Token' to Host "%s"", rank, neighbor_mailbox->get_cname());
neighbor_mailbox->put(res, token_size);
}
ошибка возникает в const auto res = my_mailbox->getstd::строка();
Ошибка: невозможно вывести тип «авто», и имя типа не разрешено
Комментарии:
1. Я предполагаю, что
my_mailbox->get<std::string>()
это не возвращает указатель. Вы уверены, что он не возвращаетstd::string
значение по или (const
?) ссылку?2. Да, похоже, что ошибка все-таки была в синтаксисе. Мне удается исправить это с помощью
const auto *res = static_cast<std::string*>(my_mailbox->get());
Ответ №1:
Заменить auto* res = my_mailbox->get<std::string>();
на const auto *res = static_cast<std::string*>(my_mailbox->get());