【发布时间】:2018-04-23 08:56:20
【问题描述】:
我想定义一个结构数组,但这不起作用,因为它有一个没有默认构造函数的 const 字段。
Struct 是 SDK 的一部分,如下所示:
struct SParametricParamDef
{
const TXString fUniversalName;
SResString fLocalizedName;
const TXString fDefaultImperial;
const TXString fDefaultMetric;
EFieldStyle fFieldStyle;
short fChoicesChcID;
};
TXString 没有默认构造函数。所以以下失败了:
SParametricParamDef *arrParams = new SParametricParamDef[size]; // <= throws compile time exception
for (int i = 0; i < size; i++)
{
arrParams[i] = params[i].def; // <= also throws an exception, because operator = is not available
}
有没有办法解决这个问题?结果我需要一个SParametricParamDef*,因为这个数组又在SDK中使用了......
信息
在旧的 SDK 版本中,const TXSTring 是 const char*,那时我没有问题...现在我需要调整我的代码以使用新结构...
【问题讨论】:
-
首先称为编译错误。其次,使用
std::vector。如果您必须有一个指针,请从std::vector获取它 -
不知道这是可能的。我读到
std::array无法做到这一点,但std::vector似乎可以使用数据字段。 -
std::array不能实现什么?无论哪种方式,std::array都不是你想要的 -
我搞混了,抱歉。您建议使用
std::vector并使用std::vector::data来获取底层指针,对吗?我现在不确定,如果这是保存,我可以从函数中返回这个指针还是会超出范围?因为这是我需要的,这就是为什么我在示例代码中使用new... -
传递
std:: vector并仅在需要时获取指针。了解 RAII 以及 c++ 如何管理内存,new几乎总是一个错误
标签: c++ arrays struct constants