我有一个对象类数组,我想将最后一个indexi分配为NULL 我有以下代码,但它给出了错误
DNA
是一类
allRightSequences
是向量
DNA* newDNA = new DNA[allRightSequences.size()];
newDNA [allRightSequences.size()] = NULL; << this line gives an error
答案 0 :(得分:5)
NULL
是一个宏,在适当的情况下,它将扩展为可以视为空指针常量的内容。因此,您可以使用它来设置指针值:
int *ip = NULL; // okay
但是,newDNA
不包含指针;它包含类型DNA
的对象。暂时忘记阵列。问题是这样的:
DNA dna = NULL;
除非DNA
有一个可以用NULL
扩展的构造函数调用的构造函数,否则它将无法工作。
如果确实需要在数组末尾添加标记,则需要创建一个指针数组。但是您确实不需要。使用std::vector<DNA>
,它会为您跟踪尺寸。
答案 1 :(得分:1)
allRightSequences.size()
不是具有allRightSequences.size()
元素的数组的最后一个索引。最后一个索引是allRightSequences.size() - 1
。未定义访问数组的行为。
另一个潜在的问题:必须存在适当的赋值运算符,才能为DNA
对象分配指针。除非您定义了此类运算符,否则赋值格式不正确。
答案 2 :(得分:1)
您可能想要的(尽管尚不能确定问题)是指向DNA对象的指针数组。 您声明的是“只是”一系列DNA对象;并且您不能将对象设置为null,因为Pete Becker's answer解释得很好。
以下代码将起作用:
// notice how we use +1 here to have place for the NULL element at the end
DNA* newDNA[] = new DNA*[allRightSequences.size()+1];
newDNA [allRightSequences.size()] = NULL;
但是,对于数组的每个元素,还必须通过new DNA...
创建一个DNA对象,然后...
请注意,如果使用支持C ++ 11的编译器,请使用nullptr
而不是NULL
。
而且,如果您想完全避免使用指针的麻烦,可以使用std::optional
之类的结构,以防在早期版本中使用C ++ 17或boost::optional
,如this answer to another question中所述,如上文Baum mit Augen所述。
另外,好的问题是,您到底需要什么零指针-如果仅是要在遍历数组时确定最后一个元素,那么最好使用std::vector<DNS>
或类似的方法集合类型...
答案 3 :(得分:-1)
使用以下代码:
apply
因为C ++中的数组索引从newDNA [allRightSequences.size()-1] = NULL;
到0
,其中n-1
返回allRightSequences.size()
,其中n
是数组。