当 std::shared_ptr 时,“operator=”不匹配
no match for ‘operator=’ when std::shared_ptr
我看到一个代码正是使用这个,但那个代码有效而我的却不行,知道为什么吗?
PD:我正在尝试实现这个 commit。看到代码完全一样
for(const auto& tx : block.vtx)
if (txHash == tx->GetHash()) {
txNew = tx;
foundAtOut = *pindex;
return true;
}
main.cpp:2471:25: error: no match for ‘operator=’ (operand types are ‘CTransactionRef’ {aka ‘std::shared_ptr<const CTransaction>’} and ‘const CTransaction’)
txNew = tx;
仔细阅读错误消息:您正在尝试将类型 const CTransaction
的对象分配给类型 std::shared_ptr<const CTransaction>
的共享指针。但是您不能使用 operator=
来做到这一点,因为它的参数应该是 shared_ptr
或 unique_ptr
,如 cppreference.
中所述
根据你的实际代码,我认为,你可以为 const CTransaction
对象创建一个新的 shared_ptr
然后赋值给它。
我看到一个代码正是使用这个,但那个代码有效而我的却不行,知道为什么吗?
PD:我正在尝试实现这个 commit。看到代码完全一样
for(const auto& tx : block.vtx)
if (txHash == tx->GetHash()) {
txNew = tx;
foundAtOut = *pindex;
return true;
}
main.cpp:2471:25: error: no match for ‘operator=’ (operand types are ‘CTransactionRef’ {aka ‘std::shared_ptr<const CTransaction>’} and ‘const CTransaction’)
txNew = tx;
仔细阅读错误消息:您正在尝试将类型 const CTransaction
的对象分配给类型 std::shared_ptr<const CTransaction>
的共享指针。但是您不能使用 operator=
来做到这一点,因为它的参数应该是 shared_ptr
或 unique_ptr
,如 cppreference.
根据你的实际代码,我认为,你可以为 const CTransaction
对象创建一个新的 shared_ptr
然后赋值给它。