5

メイン関数では、特定のクラス「メニュー」のオブジェクトの配列を作成します

そして、関数を呼び出すときに、その配列へのポインターを提供したいと考えています。

Menu menu[2];
// Create menu [0], [1]
Function(POINTER_TO_ARRAY);

質問: 関数のパラメーターを記述する正しい方法は何ですか?

私は試します:

Function(&menu);

およびヘッダーファイルで:

void Function(Menu *menu[]); // not working
error: Cannot convert parameter 1 from Menu(*)[2] to Menu *[]

void Function(Menu * menu); // not working
error: Cannot convert parameter 1 from Menu(*)[2] to Menu *[]

これを行う他の方法を思い付くことができず、この特定の問題の解決策を見つけることができません。

簡単に言えば、ポインターを介して関数内の Menu 配列にアクセスできるようにしたいのです。配列へのポインタへの通常のポインタの違いは何ですか?

4

4 に答える 4

10

宣言:

void Function(Menu* a_menus); // Arrays decay to pointers.

呼び出し:

Function(menu);

Function()ただし、配列内のエントリ数を通知する必要があります。これは C++であるため、サイズ、開始点、終了点の知識があるstd::arrayorを使用することをお勧めします。std::vector

std::vector<Menu> menus;
menus.push_back(Menu("1"));
menus.push_back(Menu("2"));

Function(menus);

void Function(const std::vector<Menu>& a_menus)
{
    std::for_each(a_menus.begin(),
                  a_menus.end(),
                  [](const Menu& a_menu)
                  {
                      // Use a_menu
                  });
}
于 2012-08-08T14:09:38.573 に答える
3

使用すれば動作するはずです

 void Function(Menu * menu); 

を使用して呼び出す

Function(menu);  

それ以外の

Function(&menu); 

配列名を渡すと、配列に含まれる型へのポインターに減衰します。ただし、@ hmjdが彼の回答で述べているように、配列サイズも渡す必要があるため、このオプションが開かれている場合は、ベクトルを使用するという彼の提案が有利です。

于 2012-08-08T14:11:18.777 に答える
3

const または非 const ポインターによる

void Function(Menu const* menu);
void Function(Menu* menu);

...または const または非 const 参照によって

void Function(Menu const (&menu)[2]);
void Function(Menu (&menu)[2]);

これをテンプレートに一般化して、配列サイズがコンパイラによって推定されるようにすることができます。

template<size_t N> void Function(Menu const (&menu)[N]);
template<size_t N> void Function(Menu (&menu)[N]);

常に次のように呼び出しますFunction(menu);

于 2012-08-08T14:09:54.300 に答える
0

使用できます

Function((void *) whatever_pointer_type_or_array_of_classes);

あなたのメインで。

そして関数で:

type Function(void * whatever)
{
    your_type * x =(your_type *) whatever;
    //use x 
    ....
    x->file_open=true;
    ....
}
于 2012-08-08T14:18:03.923 に答える