我正在創建一個具有函數addClass的類,它允許用戶將A的實例添加到動態分配的數組中。將對象指針複製到動態對象數組
下面是類的代碼和一個簡單的測試:
Class.h清單
#ifndef CLASS_H
#define CLASS_H
#include<iostream>
class Class {
public:
Class(std::string text);
Class(const Class& orig);
virtual ~Class();
Class(std::string text, Class * name, int size);
std::string toString();
void addClass(Class * name, int size = 1);
Class getClass(int index);
private:
Class * classArray;
std::string value;
int size;
};
#endif /* CLASS_H */
Class.c清單
#include "Class.h"
#include <cstdlib>
Class::Class(std::string text) {
classArray = NULL;
value = text;
size = 0;
}
Class::Class(const Class& orig) {/*...*/}
Class::~Class() {}
Class::Class(std::string text, Class * name, int size){
value = text;
this->size = size;
if(size == 1)
classArray = name;
else{
int i;
classArray = (Class*)malloc(size*sizeof(Class));
for(i = 0; i < size; i++){
classArray[i] = name[i];
}
}
}
std::string Class::toString(){
return value;
}
void Class::addClass(Class * name, int size){
int i;
Class * tmp = (Class*)malloc((this->size+size)*sizeof(Class));
for(i = 0; i < this->size-1; i++){
tmp[i] = classArray[i];
}
if(size == 1)
tmp[size-1] = name[0];//assignement method is the problem!!!??
else{
for(i = this->size; i < this->size+size-1; i++){
tmp[i] = name[i];
}
}
this->size += size;
free(classArray);
classArray = tmp;
}
Class Class::getClass(int index){
return classArray[index];
}
test.c的清單
#include<iostream>
#include "Class.h"
using namespace std;
int main(int argc, char** argv) {
Class * objectA = new Class("objectA");
Class * objectB = new Class("objectB");
cout << objectA->toString() << endl;
objectA->addClass(objectB);
//never gets here :'(
cout << objectA->toString() << endl;
return 0;
}
問題是測試永遠不會通過objectA-> addClass(objectB)指令。我試圖調試,發現問題來自addClass()方法的assignement指令。我也試過memcpy它沒有工作。有沒有人有這個請求的解決方案。謝謝。
+1,因爲你的答案比上面的方法更完整(http://stackoverflow.com/questions/19072111/copy-object-pointer-into -dynamic-object-array#answer-19072163)太糟糕了,我看到你的答案! –
@PaikuHan:你應該標記爲「回答」_best_答案(無論是誰的作者,我總的來說,不只是針對這個特定的案例)。您可以更改標記的答案。 –
對不起,我想你的權利,我是以自我爲中心。 StackOverflow是一個社區,最好的答案不應該是那種幫助我的人(通過我的一點搜索),而是幫助下一位程序員在同一情況下工作的人(不需要搜索解決方案的其他缺失部分) –