嗨我有以下c ++代码,我希望将调用函数转换为main,以下是我的代码:
#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
我在哪里错了?感谢
答案 0 :(得分:6)
变量A
和B
是函数readData
的本地变量,无法从任何其他函数访问。
将它们声明为全局变量(不推荐)或main
中的局部变量,并将它们作为参数传递给readData
函数。
我还建议您使用std::vector
而不是普通数组。
答案 1 :(得分: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;
}