1

配列も取り入れる配列を返す関数のプロトタイプを作成する方法を知りたいです。アレイのプロトタイプを作成した後、どうすれば実装できますか

これは正しいです?

coffee* getData(*coffe);

int main() {
    coffee cf[256];
    coffee FinalCoffee[256];
    FinalCoffee=getData(cf);
}

coffee getData(coffee objcf[]) {
    for(int i=0;i<SIZE;i++) {
        objcf[i].brand="nescafe";
    }
    return coffee;
}

Plseaseはこれについて私にアドバイスします。更新された配列を別の関数に渡して処理できるように、配列を取得できる必要があります。

4

3 に答える 3

5

コードには、一致する宣言と関数定義すらありません。これは機能しません。

しかし、以下はそうです:

std::vector<coffee> getData(std::vector<coffee> const& objs) {
    std::vector<coffee> result;
    // Do something to fill result
    return result;
}

ただし、例のように、新しい配列を返すのではなく、元の配列を操作する場合は、戻り値をまったく持たず、引数を非定数参照として渡す方が理にかなっています。

void manipulateData(std::vector<coffee>& objs) {
    for (auto& obj : objs)
        obj.brand = "nescafe";
}

経験則として、C++標準ライブラリコンテナを優先してC配列を避けるようにしてください。これはあなたの人生をはるかににします。

于 2012-10-05T08:42:10.063 に答える
4

これはC++で実行できます。救助への言及。醜い構文を先に、typedefをお勧めします:

#include <iostream>
using namespace std;

template<size_t N>
int (&f(int(&A)[N])) [N] {
        for(auto& i: A) i +=10;
        return A; 
} 

int main() {
        int A[3] = {1,2,3};
        auto& AA = f(A);
        for(auto i: AA)   cout << i << "\n";
}    

しかし、Konrad Rudolphが指摘したように、実際にはf()から何も返す必要はなく、配列はその場で変更されます。そして、あなたの関数ははるかに単純になる可能性があります:
void f(int (&A)[N])

于 2012-10-05T09:31:33.587 に答える
2

まず、関数ヘッダーの宣言(プロトタイプ)と定義(実装)は異なります。

coffee* getData(*coffe);

coffee getData(coffee objcf[])

最後のものはポインタさえ返しません。

あなたの質問に関しては、あなたのプロトタイプはそれがポインタgetDataを返すと言っていますが、あなたはそれを配列に割り当てます。これは機能しません。代わりに、ポインタとして宣言します。FinalCoffee

coffee cf[256];
coffee* FinalCoffee;
FinalCoffee=getData(cf);

ただし、実際には必要ありません。getData引数として渡す配列を変更すると、配列が参照として渡されるため、それらの変更もcf配列に含まれます。

于 2012-10-05T08:42:54.360 に答える