在构造函数中传递类成员时的c++语法错误
a C++ syntax error when passing class members in a constructor
我需要用c++编写一种shared_ptr<>。然而,我现在正在努力解决一个奇怪的错误。
以下代码:
template <typename T> class shared_ptr;
typedef std::map<void*, shared_ptr<void*>> ptr_t;
ptr_t ptr_set;
template <typename T> class shared_ptr
{
T* ptr;
public:
bool in_use;
shared_ptr<T>()
{
ptr = new T;
in_use = false;
ptr_set.insert(ptr_t::value_type(ptr, *this)); // the error is here
}
T operator*()
{
return *ptr;
}
shared_ptr<T>(shared_ptr<T>& ref)
{
this->in_use = false;
this->ptr = ref.ptr;
T* p = this->ptr;
ptr_set.insert(ptr_t::value_type(p, *this));
}
};
拒绝编译,说'std::pair<_Ty1,_Ty2>::pair: 2个重载都不能转换所有的参数类型'(实际上是第13行C2665)。
顺便说一下,shared_ptr在main()中被实例化为shared_ptr<array_t> a
,其中array_t
是一个结构体,由一个简单的数组组成(我不认为这是bug的实际来源)。什么好主意吗?
提前谢谢。
注:答案已被编辑以修复一个错别字(第13行用p代替ptr)。
当然,您会得到一个错误,因为shared_ptr< T* >
不能被强制转换为shared_ptr< void* >
,除非T
是void
。为了解决这个问题,您可以在shared_ptr
类中添加一个强制转换操作符,它将把任何类型强制转换为shared_ptr< void* >
出现错误的那一行指的是没有声明的p
。你是说ptr
吗?
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 单独定义模板化嵌套类方法的正确语法
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 使用基类指针调用基类的值构造函数的语法是什么?
- 很好的语法来获取对向量/数组数据的大小引用?
- C++语法运算符功能?
- C++使用 rand 定义函数语法
- 什么文件可以修改 atom 的C++语法?
- 创建模板嵌套类实例的语法?
- C++语法差异:二维和一维数组(指针算术)
- 将信息输入到下面显示的结构向量中的正确语法/格式是什么