我有一个名为Fan的类型, 每当我尝试写这个函数时:
void connect(shared_ptr<Fan>&);
它没有编译,这就是我在终端中得到的结果:
fanBook_example.cpp:34:22: error: no matching function for call to
âmtm::FanBookServer::connect(std::shared_ptr<mtm::Fan>&)â
fanBook_example.cpp:34:22: note: candidate is:
In file included from Fan.h:3:0,
from FanBookPost.h:5,
from mtm_ex4.h:36,
from fanBook_example.cpp:16:
FanBookServer.h:39:7: note: void mtm::FanBookServer::connect(int&)
我试图传递shared_ptr作为参数,它不知道怎么做? 谢谢
编辑:
我正在尝试实现connect function,它应该以shared_ptr为例:
auto fan = std::make_shared<Fan>(1,"Bob");
server->connect(fan)
Fan类型位于Fan.h(包含),其内部命名空间名为mtm FanBookServer也在命名空间mtm。
中答案 0 :(得分:0)
始终首先查看第一个编译器错误(或警告),而不是 last 。编译器错误倾向于&#34;级联&#34;:编译器首先看到像
这样的东西void connect(shared_ptr<Fan>&);
并发出类似
的错误消息test2.cc:2:14: error: no template named 'shared_ptr'; did you mean 'std::shared_ptr'?
void connect(shared_ptr<Fan>&);
^~~~~~~~~~
std::shared_ptr
根据编译器的特定版本,它可能很好地用int
替换未知类型并继续运行 - 有助于尝试在一次运行中尽可能多地提供错误。 (这不是完全讽刺;在极少数情况下,程序会有多个独立的语法错误,程序员会很高兴一下子被告知所有这些错误。)
无论如何,在你的情况下,编译器会到达你试图将std::shared_ptr<Fan>
传递给原型为int&
的函数的地方(嗯,真的是<unknown-type>&
,但它对这个编译器来说是一样的),所以它会抱怨。
在不相关的说明中,您可能不需要通过引用传递shared_ptr
本身 - 这只有在您计划修改来电者时才有用。 s指针本身(即,如果您将其用作out参数)。你应该使用void connect(shared_ptr<Fan> p)
(如果它需要弄乱所有权)或void connect(const Fan& fan)
(如果它不需要弄乱所有权)。