我第一次尝试使用共享指针,而我遇到了一个无法从指针访问Element的成员函数的问题。我已经查看了网络上的示例,似乎应该可以访问Element的功能,但我怀疑我在设置指针时做错了什么,但是我无法解决问题。
如何从shared_ptr访问Element中的公共成员函数? (我使用的是Xcode 5.1.1)
#include <memory>
#include <iostream>
class Element
{
private:
std::string name;
std::shared_ptr<Element> * firstChild;
std::shared_ptr<Element> * lastChild;
std::shared_ptr<Element> * nextSibling;
public:
void addChild(std::shared_ptr<Element> * child)
{
if (lastChild != nullptr) {
lastChild->setNextSibling(child); //Error: No member named 'setNextSibling' in 'std::__1::shared_ptr<Element>'
lastChild = child;
}
else {
firstChild = lastChild = child;
}
}
void setNextSibling(std::shared_ptr<Element>* p)
{
nextSibling = p;
}
};
答案 0 :(得分:6)
您正在使用指向共享指针的指针。这没有意义。将所有std::shared_ptr<Element>*
替换为std::shared_ptr<Element>
,您就可以了。