Метод для возврата указателя, указывающего на объект массива, объявленный в другом заголовке, - PullRequest
3 голосов
/ 10 декабря 2010

Я немного застрял с двумя переплетенными проблемами.

  • Во-первых, я хочу иметь массив указателей на объекты в куче.(объекты, которые объявлены в другом заголовке)

  • Во-вторых, я хочу, чтобы метод возвращал указатель на один из этих объектов.

Мой текущий код является результатом некоторой путаницы и потерпит неудачу, потому что я не могу использовать «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

1 Ответ

1 голос
/ 10 декабря 2010

За исключением нескольких опечаток, это прекрасно скомпилируется:

  1. Вам нужна точка с запятой после определения класса бара.
  2. bar * foo:getBar(int y)

должно быть:

bar * foo::getBar(int y)

3.

bar[i] = NULL; //set all pointers to NULL

должно быть:

barArray[i] = NULL; //set all pointers to NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...