I have to create a program to design a function named sum that, given an integer pointer "a" pointing to the first position of an array of integers and an integer "n" with the length of the given array, returns the sum of all its values using a recursive function.
Next design a program that reads an integer n, which represents the number of values to be read next, and then reads n values to be stored in an array. Finally, it shows on the screen the result of the sum of all the values of the array.
Input Example 1
0
Output Example 1
0
Input Example 2
4 1 2 3 4
Output Example 2
10
However I have an error:
/tmp/program.cpp: In function 'int main()':
/tmp/program.cpp:9:7: error: no match for 'operator>>' (operand types are 'std::istream {aka std::basic_istream}' and 'int [n]')
cin >> a;
~~~~^~~~
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:168:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(bool& __n)
^~~~~~~~
/usr/include/c++/7/istream:168:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: cannot bind non-const lvalue reference of type 'bool&' to an rvalue of type 'bool'
cin >> a;
^
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:172:7: note: candidate: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with _CharT = char; _Traits = std::char_traits]
operator>>(short& __n);
^~~~~~~~
/usr/include/c++/7/istream:172:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: invalid conversion from 'int*' to 'short int' [-fpermissive]
cin >> a;
^
/tmp/program.cpp:9:10: error: cannot bind rvalue '(short int)((int*)(& a))' to 'short int&'
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:175:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(unsigned short& __n)
^~~~~~~~
/usr/include/c++/7/istream:175:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: invalid conversion from 'int*' to 'short unsigned int' [-fpermissive]
cin >> a;
^
/tmp/program.cpp:9:10: error: cannot bind rvalue '(short unsigned int)((int*)(& a))' to 'short unsigned int&'
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:179:7: note: candidate: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char; _Traits = std::char_traits]
operator>>(int& __n);
^~~~~~~~
/usr/include/c++/7/istream:179:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: invalid conversion from 'int*' to 'int' [-fpermissive]
cin >> a;
^
/tmp/program.cpp:9:10: error: cannot bind rvalue '(int)((int*)(& a))' to 'int&'
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:182:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(unsigned int& __n)
^~~~~~~~
/usr/include/c++/7/istream:182:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: invalid conversion from 'int*' to 'unsigned int' [-fpermissive]
cin >> a;
^
/tmp/program.cpp:9:10: error: cannot bind rvalue '(unsigned int)((int*)(& a))' to 'unsigned int&'
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:186:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(long& __n)
^~~~~~~~
/usr/include/c++/7/istream:186:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: invalid conversion from 'int*' to 'long int' [-fpermissive]
cin >> a;
^
/tmp/program.cpp:9:10: error: cannot bind rvalue '(long int)((int*)(& a))' to 'long int&'
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:190:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(unsigned long& __n)
^~~~~~~~
/usr/include/c++/7/istream:190:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: invalid conversion from 'int*' to 'long unsigned int' [-fpermissive]
cin >> a;
^
/tmp/program.cpp:9:10: error: cannot bind rvalue '(long unsigned int)((int*)(& a))' to 'long unsigned int&'
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:195:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(long long& __n)
^~~~~~~~
/usr/include/c++/7/istream:195:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: invalid conversion from 'int*' to 'long long int' [-fpermissive]
cin >> a;
^
/tmp/program.cpp:9:10: error: cannot bind rvalue '(long long int)((int*)(& a))' to 'long long int&'
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:199:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned int&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(unsigned long long& __n)
^~~~~~~~
/usr/include/c++/7/istream:199:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: invalid conversion from 'int*' to 'long long unsigned int' [-fpermissive]
cin >> a;
^
/tmp/program.cpp:9:10: error: cannot bind rvalue '(long long unsigned int)((int*)(& a))' to 'long long unsigned int&'
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:235:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(void*& __p)
^~~~~~~~
/usr/include/c++/7/istream:235:7: note: conversion of argument 1 would be ill-formed:
/tmp/program.cpp:9:10: error: cannot bind non-const lvalue reference of type 'void*&' to an rvalue of type 'void*'
cin >> a;
^
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:120:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(__istream_type& (*__pf)(__istream_type&))
^~~~~~~~
/usr/include/c++/7/istream:120:7: note: no known conversion for argument 1 from 'int [n]' to 'std::basic_istream::__istream_type& (*)(std::basic_istream::__istream_type&) {aka std::basic_istream& (*)(std::basic_istream&)}'
/usr/include/c++/7/istream:124:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios]
operator>>(__ios_type& (*__pf)(__ios_type&))
^~~~~~~~
/usr/include/c++/7/istream:124:7: note: no known conversion for argument 1 from 'int [n]' to 'std::basic_istream::__ios_type& (*)(std::basic_istream::__ios_type&) {aka std::basic_ios& (*)(std::basic_ios&)}'
/usr/include/c++/7/istream:131:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(ios_base& (*__pf)(ios_base&))
^~~~~~~~
/usr/include/c++/7/istream:131:7: note: no known conversion for argument 1 from 'int [n]' to 'std::ios_base& (*)(std::ios_base&)'
/usr/include/c++/7/istream:214:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(float& __f)
^~~~~~~~
/usr/include/c++/7/istream:214:7: note: no known conversion for argument 1 from 'int [n]' to 'float&'
/usr/include/c++/7/istream:218:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(double& __f)
^~~~~~~~
/usr/include/c++/7/istream:218:7: note: no known conversion for argument 1 from 'int [n]' to 'double&'
/usr/include/c++/7/istream:222:7: note: candidate: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream]
operator>>(long double& __f)
^~~~~~~~
/usr/include/c++/7/istream:222:7: note: no known conversion for argument 1 from 'int [n]' to 'long double&'
/usr/include/c++/7/istream:259:7: note: candidate: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__streambuf_type*) [with _CharT = char; _Traits = std::char_traits; std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf]
operator>>(__streambuf_type* __sb);
^~~~~~~~
/usr/include/c++/7/istream:259:7: note: no known conversion for argument 1 from 'int [n]' to 'std::basic_istream::__streambuf_type* {aka std::basic_streambuf*}'
In file included from /usr/include/c++/7/string:53:0,
from /usr/include/c++/7/bits/locale_classes.h:40,
from /usr/include/c++/7/bits/ios_base.h:41,
from /usr/include/c++/7/ios:42,
from /usr/include/c++/7/ostream:38,
from /usr/include/c++/7/iostream:39,
from /tmp/program.cpp:1:
/usr/include/c++/7/bits/basic_string.tcc:1465:5: note: candidate: template std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&)
operator>>(basic_istream<_CharT, _Traits>& __in,
^~~~~~~~
/usr/include/c++/7/bits/basic_string.tcc:1465:5: note: template argument deduction/substitution failed:
/tmp/program.cpp:9:10: note: mismatched types 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>' and 'int [n]'
cin >> a;
^
In file included from /usr/include/c++/7/istream:991:0,
from /usr/include/c++/7/iostream:40,
from /tmp/program.cpp:1:
/usr/include/c++/7/bits/istream.tcc:963:5: note: candidate: template std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT2*)
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
^~~~~~~~
/usr/include/c++/7/bits/istream.tcc:963:5: note: template argument deduction/substitution failed:
/tmp/program.cpp:9:10: note: deduced conflicting types for parameter '_CharT2' ('char' and 'int')
cin >> a;
^
In file included from /usr/include/c++/7/istream:991:0,
from /usr/include/c++/7/iostream:40,
from /tmp/program.cpp:1:
/usr/include/c++/7/bits/istream.tcc:931:5: note: candidate: template std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT&)
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
^~~~~~~~
/usr/include/c++/7/bits/istream.tcc:931:5: note: template argument deduction/substitution failed:
/tmp/program.cpp:9:10: note: deduced conflicting types for parameter '_CharT' ('char' and 'int [n]')
cin >> a;
^
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:756:5: note: candidate: template std::basic_istream& std::operator>>(std::basic_istream&, unsigned char&)
operator>>(basic_istream& __in, unsigned char& __c)
^~~~~~~~
/usr/include/c++/7/istream:756:5: note: template argument deduction/substitution failed:
/tmp/program.cpp:9:10: note: cannot convert 'a' (type 'int [n]') to type 'unsigned char&'
cin >> a;
^
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:761:5: note: candidate: template std::basic_istream& std::operator>>(std::basic_istream&, signed char&)
operator>>(basic_istream& __in, signed char& __c)
^~~~~~~~
/usr/include/c++/7/istream:761:5: note: template argument deduction/substitution failed:
/tmp/program.cpp:9:10: note: cannot convert 'a' (type 'int [n]') to type 'signed char&'
cin >> a;
^
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:803:5: note: candidate: template std::basic_istream& std::operator>>(std::basic_istream&, unsigned char*)
operator>>(basic_istream& __in, unsigned char* __s)
^~~~~~~~
/usr/include/c++/7/istream:803:5: note: template argument deduction/substitution failed:
/tmp/program.cpp:9:10: note: cannot convert 'a' (type 'int [n]') to type 'unsigned char*'
cin >> a;
^
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:808:5: note: candidate: template std::basic_istream& std::operator>>(std::basic_istream&, signed char*)
operator>>(basic_istream& __in, signed char* __s)
^~~~~~~~
/usr/include/c++/7/istream:808:5: note: template argument deduction/substitution failed:
/tmp/program.cpp:9:10: note: cannot convert 'a' (type 'int [n]') to type 'signed char*'
cin >> a;
^
In file included from /usr/include/c++/7/iostream:40:0,
from /tmp/program.cpp:1:
/usr/include/c++/7/istream:980:5: note: candidate: template typename std::enable_if >, std::__is_convertible_to_basic_istream<_Istream>, std::__is_extractable::__istream_type, _Tp&&, void> >::value, typename std::__is_convertible_to_basic_istream<_Tp>::__istream_type>::type std::operator>>(_Istream&&, _Tp&&)
operator>>(_Istream&& __is, _Tp&& __x)
^~~~~~~~
/usr/include/c++/7/istream:980:5: note: template argument deduction/substitution failed:
/tmp/program.cpp:9:10: note: variable-sized array type 'int (&)[n]' is not a valid template argument
cin >> a;
^
/tmp/program.cpp:10:17: error: invalid conversion from 'int*' to 'int' [-fpermissive]
return sum(a,n);
^
/tmp/program.cpp:4:5: note: initializing argument 1 of 'int sum(int, int)'
int sum(int a, int n);
^~~
/tmp/program.cpp: In function 'int sum(int, int)':
/tmp/program.cpp:16:28: error: invalid types 'int[int]' for array subscript
return sum(a,n-1)+a[n-1];//recursividad
^
**********************************************************************
File "", line 3, in __main__
Failed example:
printf '0' | ./program
Expected:
0
Got:
(127)bash: ./program: No such file or directory
**********************************************************************
File "", line 5, in __main__
Failed example:
printf '4 1 2 3 4' | ./program
Expected:
10
Got:
(127)bash: ./program: No such file or directory
**********************************************************************
1 items had failures:
2 of 2 in __main__
***Test Failed*** 2 failures.
I would like to resolve the error keeping the structure of the program.
My program is the following:
#include <iostream>
#include <string>
using namespace std;
int sum(int a, int n);
int main(){
int n=0;
int a[n];
cin >> n;
cin >> a;
return sum(a,n);
}
int sum(int a, int n){
if(n==0){
return 0;
}
return sum(a,n-1)+a[n-1];
}
The error is very clear: You can't do
cin >> a
whena
defined asint a[n]
, furthermore, you can't definea
as eitherint a[n]
, because the compiler expects a constant expression forn
and it isn't. It is a variable that is not resolved at compile time, but at run time.As the statement indicates,
a
it has to be defined as an integer pointer:So your code would look like this: