3

絡み合った 2 つの問題に少し行き詰まっています。

  • まず、ヒープ上のオブジェクトへのポインターの配列が必要です。(別のヘッダーで宣言されているオブジェクト)

  • 2 つ目は、これらのオブジェクトの 1 つへのポインターを返すメソッドを作成することです。

私の現在のコードは、少し手探りした結果であり、完全に宣言しないと戻り値の型として "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
4

1 に答える 1

1

いくつかのタイプミスを除けば、これは問題なくコンパイルされます。

  1. bar クラスを定義した後、セミコロンが必要です。
  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
于 2010-12-10T03:24:14.263 に答える