нет подходящей функции для вызова make_shared - PullRequest
0 голосов
/ 13 февраля 2019

Я получаю сообщение об ошибке компилятора «нет подходящей функции для вызова make_shared» всякий раз, когда я пытаюсь использовать конструктор, который принимает любые аргументы.Так, например:

std::shared_ptr<int> foo = std::make_shared<int> ();

отлично работает.Но,

std::shared_ptr<int> foo = std::make_shared<int> (10);

Выдает следующую ошибку:

/usr/bin/clang  -g -Wall -Wextra -Wc++11-extensions -c ./test.cpp
./test.cpp:7:30: error: no matching function for call to 'make_shared'
  std::shared_ptr<int> foo = std::make_shared<int> (10);
                         ^~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory:4700:1: note: candidate function [with _Tp = int, _A0 = int]
  not viable: expects an l-value for 1st argument
make_shared(_A0& __a0)

Я взял приведенный выше код прямо отсюда http://www.cplusplus.com/reference/memory/make_shared/, и этот код отлично работает на веб-сайте cpp.sh,Я подозреваю, что что-то не так с настройкой моего компилятора.Запуск в iTerm на MacBook.Кроме того, я получаю ту же ошибку, даже если я удаляю различные варианты лязга, показанные выше.Есть идеи?Возможно ли, что мой заголовочный файл должен быть обновлен?Это с 4 сентября 2015 года. Кажется, достаточно недавно, чтобы C ++ 11 работал.

$ /usr/bin/clang --version
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin17.7.0
Thread model: posix

$ ls -l /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory
-rw-r--r--  1 root  wheel  174919 Sep  4  2015 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/memory

1 Ответ

0 голосов
/ 13 февраля 2019

Сообщение об ошибке жалуется на использование prvalue 10.Попробуйте использовать

int avar = 10;
auto foo = std::make_shared<int> (avar);

Интересно посмотреть, что происходит при использовании lvalue.

Вы собирали библиотеку std локально?Если да, возможно, вы можете попытаться пересобрать заново или взять предварительно собранную библиотеку откуда-то.

Я тестировал код на https://godbolt.org/ с конфигурацией x86-64 clang 7.0.0 и -std=c++11.это работает отлично.Даже если вы пользуетесь iOS, я думаю, это должно быть хорошо.

Я также вижу, как вы используете -Wc++11-extensions при сборке.Попробуйте использовать -std=c++11 вместо этого, может быть?

...