我使用的是std::shared_ptr
指向一個節點C++的std :: shared_ptr的錯誤C2664
template<typename T>
class A
{
class Node
{
T data;
std::shared_ptr<Node> link;
Node(T data, std::shared_ptr<Node> link);
};
void push(T data);
std::shared_ptr<Node> top;
};
template<typename T>
A<T>::Node::Node(T data, std::shared_ptr<typename A<T>::Node> link) :
data(data), link(link)
{
}
template<typename T>
void A<T>::push(T item)
{
if (top == nullptr)
{
top = std::make_shared<typename A<T>::Node>(new typename
A<T>::Node(item, nullptr));
}
else
{
top = std::make_shared<typename A<T>::Node>(new typename A<T>::Node(item, top));
}
}
生成的聲明和定義導致編譯器錯誤
嚴重性代碼說明項目文件行抑制狀態 錯誤C2664'Stack :: Node :: Node(const Stack :: Node &)':無法將參數1從'Stack :: Node *'轉換爲'const stack :: Node &'內存901
我需要更改以符合<memory>
?
請發佈完整的錯誤消息,而不僅僅是第一行。 –
還有一個更完整的實例,它不能編譯。你在這裏編譯得很好,在VS 2017中。 –
'std :: make_shared'作爲一個參數引用一個對象,但是你使用'new'來創建一個指針,因此,可能你的''不能將參數1從'Stack :: Node *'爲'const Stack :: Node&'錯誤。 –