2012-03-27 52 views
1

なぜエラーが発生し続け、配列を返すことができないのでしょうか。返り値で 'double(*)[5]'を 'double'に変換できません。

また、sell_item関数が実際に動作し、配列を返すと、main関数からその配列をエコーし​​ます。

おかげ

#include <iostream> 
#include <fstream> 

using namespace std; 

ifstream infile; 
ofstream outfile; 

int itemnum = 3333; 
string itemName="Cooking Range"; 
int Qauntity=1; 

int NumberOfItems=2; 
int NumberOfFields=5; 

double function_Sell_Item(int itemnum,string itemName, int Qauntity); 

int main() { 
    function_Sell_Item(itemnum, itemName, Qauntity); 
} 

double function_Sell_Item(int itemnum,string itemName, int Qauntity) { 
    double arraylist[2][5]; 

    for (int index =0; index < NumberOfItems; index++) { 
     for (int i=0; i < NumberOfFields; i++) { 
      arraylist[index][i]=0; 
     } 
    } 

    return arraylist; 
} 
//// functions ends 

: 。

+0

コードでQauntityのスペルが間違っています。また、私はポインタと配列について学習することをお勧めします。 – Corbin

答えて

8

あなたはC++ではできない配列を返そうとしています。

返すことができるので、std::vector<double>のようなものを考慮する必要があります。

typedef std::vector<double> MyVec; 

MyVec foo() { 
    MyVec v; 
    v.push_back(3.142); 
    v.push_back(2.718); 
    return v; 
} 

int main() { 
    MyVec z = foo(); 
    for (int i = 0; i < z.size(); i++) { 
     std::cout << z[i] << "\n"; 
    } 

    return 0; 
} 
+0

C++では配列へのポインタを返すことができます。多分それがOPがやろうとしていることです。もちろん、配列はヒープから割り当てられる必要があります。 –

+2

@TedHopp:確かに。だからそこに行かないのが最善です! –

1

関数の復帰後にメモリが有効ではないローカル配列を返すとき、コードはまったく動作しません。ヒープ上に配列のメモリを動的に割り当てる必要があります。

さらに、あなたはどのあなたがC++にすることはできませんダブル配列(二次元)を返すようにしようとしているdouble **

0

にあなたの関数の戻り値の型を変更する必要があります。 代わりにVectorを使用してください!

関連する問題