0

こんにちは私はメインに関数を呼び出したいところに次のc++コードを持っています、以下は私のコードです:

#include <iostream>
#include <numeric>

int main()
{

    using namespace std;

    readData();

    int sumA = accumulate(A, A + sizeof(A) / sizeof(int), 0);
    int sumB = accumulate(B, B + sizeof(B) / sizeof(int), 0);

    cout << ((sumA > sumB) ? "Array A Greater Than Array B\n" : "Array B Greater Than Array A\n");


    return 0;
}

void readData()
{

int A[] = { 1, 1, 8};
int B[] = { 2, 2, 2};
}

cliで次のエラーが発生しました:

test.cpp:3:7: error: storage size of ‘B’ isn’t known
test.cpp:4:7: error: storage size of ‘A’ isn’t known

私はここでどこが間違っていますか?ありがとう

4

2 に答える 2

6

変数ABは関数に対してローカルでありreadData、他の関数からはアクセスできません。

それらをグローバル変数 (推奨されません) またはローカル変数として宣言しmain、引数として関数に渡しますreadData

std::vectorプレーン配列の代わりに使用することもお勧めします。

于 2013-03-05T13:30:37.857 に答える
0

まず、C および C++ で配列のサイズを取得する場合は注意してください。詳細については、こちらをお読みください: http://www.cplusplus.com/faq/sequences/arrays/sizeof-array/

ただし、このように代わりに std::vector を使用してください。

#include <iostream>
#include <vector>
#include <numeric>

typedef std::vector<int> int_vec_t;

//Call by reference to set variables in function
void readData(int_vec_t& v1, int_vec_t& v2)
{
  v1 = int_vec_t{1,1,8}; //This only works for C++11
  v2 = int_vec_t{2,2,2};
}

void readUserData(int_vec_t& v)
{
  for(;;)
  {
    int val;
    std::cin>>val;
    if(val == 0) break;
    v.push_back(val);
  }
}

int main()
{
    using namespace std;

    int_vec_t A;
    int_vec_t B;

    readData(A,B);
    //Or
    readUserData(A);
    readUserData(B);

    int sumA = accumulate(A.begin(), A.end(), 0); //Then use iterators
    int sumB = accumulate(B.begin(), B.end(), 0);

    cout << ((sumA > sumB) ? "Array A Greater Than Array B\n" : "Array B Greater Than Array A\n");

    return 0;
}
于 2013-03-05T13:59:06.360 に答える