Я немного застрял с двумя переплетенными проблемами.
Во-первых, я хочу иметь массив указателей на объекты в куче.(объекты, которые объявлены в другом заголовке)
Во-вторых, я хочу, чтобы метод возвращал указатель на один из этих объектов.
Мой текущий код является результатом некоторой путаницы и потерпит неудачу, потому что я не могу использовать «bar» в качестве возвращаемого типа, не объявив его полностью.Но я не вижу, как еще решить проблему.Я пытался сделать «getBar» указателем на функцию, но потом я не знаю, как сделать так, чтобы он обращался к ** barArray, если он не является методом-членом.
Любая помощь будет принята с благодарностью: D
Мой код:
foo.h
#ifndef FOO_H
#define FOO_H
//forward declaration
class bar;
class foo
{
public:
//constructor
foo(int x);
//method
bar * getBar(int y);
private:
int howManyBars;
bar **barArray;
};
#endif
foo.cpp
#include "foo.h"
#include "bar.h"
//constructor
foo::foo(int x)
{
howManyBars = x;
barArray = new bar *[howManyBars];
for (int i=0; i < howManyBars ; i++)
{
barArray[i] = NULL; //set all pointers to NULL
}
}
//method
bar * foo::getBar(int y)
{
y = (y - 1);
// if the pointer is null, make an object and return that
if (barArray[y] == NULL)
{
barArray[y] = new bar();
}
return barArray[y];
}
bar.h
#ifndef BAR_H
#define BAR_H
#include <iostream>
class bar
{
public:
void test(){std::cout << "I'm alive!\n";};
};
#endif