我有3个文件。 main.cpp,object.h和object.cpp。
主要是我试图创建一个包含100个对象指针的数组。然后,在创建数组之后,我进入一个循环并遍历每个'i'元素,并将该元素的值指定为指向将在字符串中传递的新临时对象的指针。这个的基本前提是我可以使用它来存储多个包含信息的对象,之后我可以通过调用这些点上的函数来打印信息。我需要使用指针数组才能这样做。
本质上,我想将数据存储在一个对象指针数组中,这些对象指针将在每次迭代时使用一个新的运算符来存储它。但是,我不确定如何创建数组,因为它需要传递给要调用的变量。
我试过Object * ptr = new Object [arraySize];并且我确信它会起作用,但它需要参数,因为对象被定义为在其中包含变量。
main.cpp中
#include <iostream>
#include "object.h"
int main()
{
Object *ptr = new Object[5];
for(i = 0; i < 5, i++) {
ptr[i] = "Test";
ptr -> print();
}
}
object.cpp
#include "object.h"
#include <iostream>
using namespace std;
Object::Object(string words)
{
private_words = words;
}
void Object::print()
{
cout << private_words << endl;
}
object.h
#ifndef OBJECT_H
#define OBJECT_H
#include <string>
using namespace std;
class Object
{
public:
Object(string words);
void print();
private:
string private_words;
};
#endif
我遇到了多个难以理解的错误,我试图传入参数并同时使它成为一个数组。 Object * ptr = new Object()[5]不起作用。
你的Object
类缺少默认构造函数,这就是为什么new Object[...]
不起作用的原因。你将不得不使用更像这样的东西:
#include <iostream>
#include "object.h"
int main()
{
Object **ptr = new Object*[5];
for(i = 0; i < 5, i++) {
ptr[i] = new Object("Test");
}
// use ptr as needed ...
for(i = 0; i < 5, i++) {
ptr[i]->print();
}
// cleanup ...
for(i = 0; i < 5, i++) {
delete ptr[i];
}
delete[] ptr;
}
更好的方法是使用标准容器,让编译器为您管理内存。
在C ++ 11之前:
#include <iostream>
#include <memory>
#include "object.h"
int main()
{
// NOTE: std::auto_ptr is NOT a container-safe type...
std::auto_ptr<Object>* ptr = new std::auto_ptr<Object>[5];
for(i = 0; i < 5, i++) {
ptr[i].reset(new Object("Test"));
}
// use ptr as needed ...
for(i = 0; i < 5, i++) {
ptr[i]->print();
}
// cleanup ...
// only the array is needed manually, the individual elements
// will clean themselves up when they are destructed ...
delete[] ptr;
}
在C ++ 11及更高版本中,请改用:
#include <iostream>
#include <vector>
#include <memory>
#include "object.h"
int main()
{
// NOTE: std::unique_ptr IS a container-safe type...
std::vector<std::unique_ptr<Object>> ptr(5);
for(i = 0; i < 5, i++) {
ptr[i].reset(new Object("Test"));
// or:
// ptr[i] = std::unique_ptr<Object>(new Object("Test"));
// or, in C++14 and later:
// ptr[i] = std::make_unique<Object>("Test");
}
// use ptr as needed ...
for(i = 0; i < 5, i++) {
ptr[i]->print();
}
// all cleanup is automatic when ptr goes out of scope ...
}