gpt4 book ai didi

c++ - 我自己的智能指针模板编译错误

转载 作者:行者123 更新时间:2023-11-28 08:23:28 26 4
gpt4 key购买 nike

我正在执行 scott meyers 书中的简单程序。我正在使用 Visual Studio 2009 进行编译。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;


class Top { };

class Middle: public Top { };

class Bottom: public Middle { };



template<typename T>

class SmartPtr {

public:

template<typename U>

SmartPtr(const SmartPtr<U>& other) : heldPtr(other.get()) { }

T* get() const { return heldPtr; }


private:

// built-in pointer held

T *heldPtr;

};



int main()
{
SmartPtr<Top> pt1 = SmartPtr<Middle>(new Middle); // SmartPtr<Top>
}

编译过程中出现如下错误

1>d:\technical\c++study\addressconv.cpp(36) : error C2440: '<function-style-cast>' : cannot convert from 'Middle *' to 'SmartPtr<T>'
1> with
1> [
1> T=Middle
1> ]
1> No constructor could take the source type, or constructor overload resolution was ambiguous
1>d:\technical\c++study\readparsing\readparsing\addressconv.cpp(36) : error C2512: 'SmartPtr<T>' : no appropriate default constructor available
1> with
1> [
1> T=Top
1> ]

请请求帮助解决问题。问题的根本原因是什么?

谢谢!

最佳答案

您需要实现一个接受 U* 的构造函数.它提示它无法显式转换 U*SmartPtr<U> .

关于c++ - 我自己的智能指针模板编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4957732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com