没有匹配函数来调用 'make_shared'
no matching function for call to 'make_shared'
每当我尝试使用带有任何参数的构造函数时,我都会收到编译器错误 "no matching function for call to '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 网站上运行良好。我怀疑我的编译器设置有问题。 运行 在 macbook 上的 iTerm 中。另外,即使我删除了上面显示的 clang 的各种选项,我也会得到同样的错误。有任何想法吗?是否可能需要更新我的头文件?它来自 2015 年 9 月 4 日。对于 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
错误消息是在抱怨您使用纯右值 10
。尝试使用
int avar = 10;
auto foo = std::make_shared<int> (avar);
看看使用左值时会发生什么很有趣。
您是否在本地构建了 std 库?如果是,也许您可以尝试再次重建或从某个地方获取预构建的库。
我在 https://godbolt.org/ 上使用配置 x86-64 clang 7.0.0
和 -std=c++11
测试了代码。它工作正常。即使你使用 iOS,我猜 os 也应该不错。
我还看到你在构建时使用 -Wc++11-extensions
。试试用 -std=c++11
代替?
由 DG 编辑:如我在下面的评论中所述,最后的建议“尝试使用 -std=c++11
”有效! 使用 -std=c++11
然后 all 值(左值、右值、右值等)工作正常。请参阅下面的评论。
每当我尝试使用带有任何参数的构造函数时,我都会收到编译器错误 "no matching function for call to '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 网站上运行良好。我怀疑我的编译器设置有问题。 运行 在 macbook 上的 iTerm 中。另外,即使我删除了上面显示的 clang 的各种选项,我也会得到同样的错误。有任何想法吗?是否可能需要更新我的头文件?它来自 2015 年 9 月 4 日。对于 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
错误消息是在抱怨您使用纯右值 10
。尝试使用
int avar = 10;
auto foo = std::make_shared<int> (avar);
看看使用左值时会发生什么很有趣。
您是否在本地构建了 std 库?如果是,也许您可以尝试再次重建或从某个地方获取预构建的库。
我在 https://godbolt.org/ 上使用配置 x86-64 clang 7.0.0
和 -std=c++11
测试了代码。它工作正常。即使你使用 iOS,我猜 os 也应该不错。
我还看到你在构建时使用 -Wc++11-extensions
。试试用 -std=c++11
代替?
由 DG 编辑:如我在下面的评论中所述,最后的建议“尝试使用 -std=c++11
”有效! 使用 -std=c++11
然后 all 值(左值、右值、右值等)工作正常。请参阅下面的评论。