C++ :无法在赋值中将 * 转换为 (*)[]
C++ : cannot convert * to (*)[] in assignment
我正在处理表示托管数组的模板类。
E (*data)[];
数据是我的数组。
data = new E[size];
而这个,它不喜欢。 它把我扔了;
无法在赋值中将组件*转换为组件(*)[] 什么给?
谁能解释为什么 E 用 * 表示,即使我没有将指针类型传递到我的模板类型中?
E (*data)[];
data
是指向 E 数组的指针,而不是指向 E 的指针(不要与指向 E 的指针数组混淆)。 有一个非常明显的差异。
编辑:为了帮助您了解...
new
返回一个指向 E
的指针,但您已将data
声明为指向 E 数组的指针。 数组是 C 中的类型! 它不仅仅是一个伪装的指针。在某些情况下,数组可能会衰减为指针,但它不会双向运行。
编辑2:
根据您的评论:
我的印象是我正在创建一个新的 E 指针数组?
转到 http://cdecl.org/
首先,输入:
int (*data)[];
阅读它的内容。 现在键入:
int *data[];
再读一遍,注意它说的不是同一件事。 一个是指向 int 数组的指针,一个是指向 int 的指针数组。 差别很大。
如果要动态分配指针数组,则应将指针data
声明为:
E **data;
然后
data = new E*[size];
只需将您的data
成员设为E*
即可。 您仍然可以索引数组样式的 ala data[i]
(当与指针和整数值一起使用时,该表示法基本上意味着添加指针和 i 乘以指向对象的大小)。
编辑:
template <typename E>
class X
{
X(int initial_size) : data_(new E[initial_size]), size_(initial_size) { }
X(const X& rhs) : data_(new E[rhs.size_]), size_(rhs.size_) { std::copy(...); }
~X() { delete[] data_; }
void capacity(int new_size)
{
E* p = new E[new_size];
std::copy(p, p + new_size, data_);
delete[] data_;
data_ = p;
size_ = size;
}
...
private:
E* data_;
int size_;
};
相关文章:
- 为什么在使用转换构造函数赋值后调用C++类的析构函数?
- 有没有办法在C++的赋值中将"char**"转换为"double"?
- C++ 通过自定义赋值运算符隐式转换函数参数
- 错误:无法在赋值中将"双 ()(双)抛出 ()"转换为"双倍"
- 使用赋值运算符将宏转换为函数调用
- 无法在赋值中将"双精度 (*)[4]"转换为"双精度**"
- 我可以防止参数隐式转换为赋值运算符吗?
- 使用 C++ 将中缀转换为后缀(包括赋值运算符)
- 选择用于赋值初始化的转换函数的优先级
- std::string 的转换运算符无法处理赋值
- 重载运算符 -- 无法在赋值中将对象转换为基类型
- 如何禁用Visual Studio警告C4244,用于std::vector复制或使用隐式缩小转换进行赋值
- 为什么在没有赋值运算符的情况下调用转换构造函数
- 带有模板类的赋值运算符 - 没有可接受的转换,C++
- 初始化对象后,用隐式转换而不是赋值运算符调用构造函数有什么意义
- 错误:无法在赋值中将“int*”转换为“Pt*”
- C++ 错误:无法在赋值中将'const std::basic_string<char>'转换为'int'
- C#指针:错误CS0254:固定语句赋值的右侧可能不是强制转换表达式
- 如何避免重载赋值运算符将右值转换为左值
- 赋值运算符重载 -- 错误 C2440:'==':无法从 'A<T> *' 转换为 'A<T> *const '