C++ 对象数组为每个对象返回相同的 char*

标签 c++ arrays pointers

if (objArr == NULL) {
    objArr = new MyObject[1];
    objArr[0] = obj;
    counter++;
} else {
    MyObject* tmp = objArr;
    objArr= new MyObject[counter+ 1];

    for (int j = 0; j < counter; ++j) {
        objArr[j] = tmp[j];
    }
    objArr[counter] = obj;
    counter++;
    delete[] tmp;
}

对象有 char* name 和其他一些正确存储的数据 当我尝试循环对象数组时,它返回其他数据正常,但 char* name 为每个对象返回相同的数据(插入的姓氏)

for (int k = 0; k < playerCount; ++k) {
    objArr[k].printObj();
}

打印对象();只是 cout objArr[k] getObjName()

这是我创建的 setter 和 getter:

char *MyObject::getObjName() const {
    return this->objName;
}

void MyObject::setObjName(char *name) {
    this->objName = name;
}

我做错了什么?

*我不能使用 vector 和字符串

最佳答案

这是常见的指针错误。 如果你的类/数据结构拥有指针并分配它,你应该实现自己的复制构造函数,为 char *name 分配新内存。 现在所有对象都指向一个字符数组,而不是拥有自己的字符数组。

如果您不明白我在说什么,请先阅读以下内容:

https://www.tutorialspoint.com/cplusplus/cpp_copy_constructor.htm

关于C++ 对象数组为每个对象返回相同的 char*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40907961/

相关文章:

c++ - g++ 编译器为表达式提供 << 类型错误,但在 Visual Studio 中有效

c++ - 在 C++ 中注册存储说明符

python - 在 Python 中从数组中提取特定值

c++ - 初始化模板 2D std :array to 0 的最快方法

JAVA:将枚举集转换为由列表和引号分隔的字符串

c++ - 将 Eigen 矩阵转换为 c 数组以便我可以使用 gsl 的性能有效方法是什么

python - 我可以像在 PythonQt 中那样在 PyQt 中利用 Qt 元对象系统吗?

c++ - 可以使用 OpenGL 将实值三角形绘制到缓冲区中吗?

c - 指向指针: What datatype with variable length strings?的指针

C:给定已知的地址和类型,如何打印其中存储的值?