如何修复此错误错误"错误C2440:' =' :无法转换为' int(*)[]'到' int *' &#34 ;?

时间:2015-02-01 23:48:43

标签: c++ visual-studio pointers

这与类似的问题不同,因为我将指针值设置为地址,而不是尝试分配不兼容的类型......我想。

template <class Type>
class ArrayStack
{
private:
    int sz; // stack size
    int asz; // array size (implementation)
    Type* start; // address of first element
    Type arr[]; // Might need to intialize each element to 0!?
public:
    ArrayStack() { sz = 0; arr[0] = 0; asz = 0; start = &arr; }
/* other code... */
};

2 个答案:

答案 0 :(得分:0)

建议使用std::vector<Type> arr代替Type arr[]

template <class Type>
class ArrayStack
{
private:
    int sz; // stack size
    int asz; // array size (implementation)

    // Type* start; // address of first element
    // Don't need this at all.
    // You can use &arr[0] any time you need a pointer to the
    // first element.
    std::vector<Type> arr;
public:

    // Simplified constructor.
    ArrayStack() : sz(0), asz(0), arr(1, 0) {}

/* other code... */
};

答案 1 :(得分:0)

start = arr;应该可以解决问题。

  • 您可以将数组分配给指针,并将指针设置为数组的开头。

另外,一个空数组规范:

Type arr[]; 

不确定这意味着什么。可能与:

相同
Type arr[0]; 

更常见的是:

Type arr[asz]; 

当然,数组大小需要是常量。