C++ 奇数转换错误

C++ 奇数转换错误,c++,casting,C++,Casting,确切地说,a是什么?你是怎么投的 "error C2440: '=' : cannot convert from 'char *[]' to 'char (*)[]'" 正在尝试获取SmartPointer以获取数组值。标题: template <typename T> class SmartPointer { private: T* myPtr; int* count; public: T* Value(); SmartPointer(co

确切地说,a是什么?你是怎么投的

"error C2440: '=' : cannot convert from 'char *[]' to 'char (*)[]'"  
正在尝试获取SmartPointer以获取数组值。标题:

template <typename T> class SmartPointer
{
private:
    T* myPtr;
    int* count;

public:
    T* Value();

    SmartPointer(const SmartPointer<T>& a)
    {
        myPtr = a.myPtr;
        count = a.count;
        ++*count;
    }
SmartPointer(T* ptr);
SmartPointer(T value) { myPtr = &value; count = new Int(); ++*count; }
~SmartPointer();


void operator =(T a);
operator T*();
    T* operator ->();
};
相关呼叫线路:

SmartPointer<char[]> str = SmartPointer<char[]>(new char[20]);
char*[]是char*的数组,而char*[]是指向char数组的指针

有关更多信息,请参阅。

字符*[]是字符数组*,而字符*[]是指向字符数组的指针


有关更多信息,请参阅。

我不熟悉这门课,但我认为您需要:

SmartPointer<char> str = SmartPointer<char>(new char[20]);
或者可能:

SmartPointer<char> str = new char[20];

我对这门课不熟悉,但我想你应该:

SmartPointer<char> str = SmartPointer<char>(new char[20]);
或者可能:

SmartPointer<char> str = new char[20];

在一般情况下,您可以使用名为cdecl的程序告诉您,或者自己解码类型。

在一般情况下,您可以使用名为cdecl的程序告诉您,或者自己解码类型。

值构造函数的可能副本SmartPointerT值做了一些非常糟糕的事情-存储指向构造函数参数的指针,该指针将随构造函数退出而销毁。您可能希望将其初始化为myPtrnew Tvalue,假设析构函数将在计数为零时删除它。尽管那时你有异常安全问题;就我个人而言,我根本不会提供该构造函数,并在必要时将其留给调用代码来克隆对象。值构造函数SmartPointerT值的可能重复做了一些非常糟糕的事情—存储指向构造函数参数的指针,该指针将随构造函数退出而销毁。您可能希望将其初始化为myPtrnew Tvalue,假设析构函数将在计数为零时删除它。尽管那时你有异常安全问题;就我个人而言,我根本不会提供该构造函数,并在必要时将其留给调用代码来克隆对象。谢谢,它成功地创建了SmartPointer。或者,可能几乎成功。这就是说,我现在在SmartPointer解除分配之前收到一个堆损坏错误…啊,为RtlFreeHeap 00390000040211C指定的地址无效。所以,是的,谢谢,如果我能对你的答案进行投票,我会的。@Narf我发现我第一次看它时误解了你的代码。现在我不清楚你到底是如何修改代码的。您是否正在使用原始副本构造函数,因为它似乎有缺陷。完成后,源实例和目标实例都将引用相同的内存。无论如何,使用调试器来查看是否可以看到正在发生的事情应该很简单。谢谢,它成功地创建了SmartPointer。或者,可能几乎成功。这就是说,我现在在SmartPointer解除分配之前收到一个堆损坏错误…啊,为RtlFreeHeap 00390000040211C指定的地址无效。所以,是的,谢谢,如果我能对你的答案进行投票,我会的。@Narf我发现我第一次看它时误解了你的代码。现在我不清楚你到底是如何修改代码的。您是否正在使用原始副本构造函数,因为它似乎有缺陷。完成后,源实例和目标实例都将引用相同的内存。无论如何,使用调试器来查看是否可以看到正在发生的事情应该是一件简单的事情。