我對編程非常陌生,我正在嘗試學習C++,但我在使用指針時遇到了很多困難。我寫了一個代碼,我需要一個動態數組,大小將由用戶給出,值也將由用戶給出,我想按增加和減少的順序對它進行排序。在使用指針時遇到困難
我已經完成了與靜態數組的任務,但指針我面臨着很多錯誤,這是我的第一個問題,請點亮我。
這裏是我的代碼
#include <iostream>
#include <cstdlib>
#include <cstddef>
using namespace std;
typedef int *IntArrayPtr;
void fill_array(int *a[], int size)
{
cout << "Enter" << size << "integers.\n";
for (int index = 0; index < size; index++)
{
cin >> a[index];
}
}
void sort(int *a[], int size)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = 0; j < size - 1; j++)
{
if (a[j] < a[j + 1])
{
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
cout << "in ascending order the numbers are:";
for (int index = 0; index < size; index++)
{
cout << a[index] << " ";
cout << endl;
}
}
void sortd(int *arr[], int size)
{
for (int i = 0; i < size - 1; i++)
{
for (int j = size - 1; j >= 0; j--)
{
if (arr[j + 1] > arr[j])
{
int temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
cout << "in descending order the numbers are:";
for (int index = 0; index < size; index++)
{
cout << arr[index] << " ";
cout << endl;
}
}
int main()
{
int input;
cout << "to sort via forward sorting press 1, for backward sorting press 2";
cin >> input;
int array_size;
IntArrayPtr a;
a = new int[array_size];
if (input == 1)
{
//int array_size;
cout << "how many numbers will be sorted?";
cin >> array_size;
array_size = (sizeof(a)/sizeof(*a));
fill_array(a, array_size);
sort(a, array_size);
}
else if (input == 2)
{
int array_size1;
cout << "how many numbers will be sorted?";
cin >> array_size1;
array_size1 = (sizeof(a)/sizeof(*a));
fill_array(a, array_size1);
sortd(a, array_size1);
}
}
以下是錯誤的。
$g++ main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2>&1
main.cpp: In function �void fill_array(int**, int)�:
main.cpp:13:12: error: no match for �operator>>� (operand types are �std::istream {aka std::basic_istream<char>}� and �int*�)
cin>> a[index];
^
main.cpp:13:12: note: candidates are:
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/iostream:40:0,
from main.cpp:1:
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:120:7: note: 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<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(__istream_type& (*__pf)(__istream_type&))
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:120:7: note: no known conversion for argument 1 from �int*� to �std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&) {aka std::basic_istream<char>& (*)(std::basic_istream<char>&)}�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:124:7: note: 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<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<char>]
operator>>(__ios_type& (*__pf)(__ios_type&))
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:124:7: note: no known conversion for argument 1 from �int*� to �std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&) {aka std::basic_ios<char>& (*)(std::basic_ios<char>&)}�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:131:7: note: 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<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(ios_base& (*__pf)(ios_base&))
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:131:7: note: no known conversion for argument 1 from �int*� to �std::ios_base& (*)(std::ios_base&)�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:168:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(bool& __n)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:168:7: note: no known conversion for argument 1 from �int*� to �bool&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:172:7: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with _CharT = char; _Traits = std::char_traits<char>]
operator>>(short& __n);
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:172:7: note: no known conversion for argument 1 from �int*� to �short int&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:175:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(unsigned short& __n)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:175:7: note: no known conversion for argument 1 from �int*� to �short unsigned int&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:179:7: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char; _Traits = std::char_traits<char>]
operator>>(int& __n);
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:179:7: note: no known conversion for argument 1 from �int*� to �int&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:182:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(unsigned int& __n)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:182:7: note: no known conversion for argument 1 from �int*� to �unsigned int&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:186:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(long& __n)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:186:7: note: no known conversion for argument 1 from �int*� to �long int&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:190:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(unsigned long& __n)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:190:7: note: no known conversion for argument 1 from �int*� to �long unsigned int&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:195:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(long long& __n)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:195:7: note: no known conversion for argument 1 from �int*� to �long long int&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:199:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned int&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(unsigned long long& __n)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:199:7: note: no known conversion for argument 1 from �int*� to �long long unsigned int&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:214:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(float& __f)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:214:7: note: no known conversion for argument 1 from �int*� to �float&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:218:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(double& __f)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:218:7: note: no known conversion for argument 1 from �int*� to �double&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:222:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(long double& __f)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:222:7: note: no known conversion for argument 1 from �int*� to �long double&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:235:7: note: std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>]
operator>>(void*& __p)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:235:7: note: no known conversion for argument 1 from �int*� to �void*&�
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:259:7: note: 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<char>; std::basic_istream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]
operator>>(__streambuf_type* __sb);
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:259:7: note: no known conversion for argument 1 from �int*� to �std::basic_istream<char>::__streambuf_type* {aka std::basic_streambuf<char>*}�
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/string:53:0,
from /usr/local/gcc-4.8.1/include/c++/4.8.1/bits/locale_classes.h:40,
from /usr/local/gcc-4.8.1/include/c++/4.8.1/bits/ios_base.h:41,
from /usr/local/gcc-4.8.1/include/c++/4.8.1/ios:42,
from /usr/local/gcc-4.8.1/include/c++/4.8.1/ostream:38,
from /usr/local/gcc-4.8.1/include/c++/4.8.1/iostream:39,
from main.cpp:1:
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/basic_string.tcc:996:5: note: template<class _CharT, class _Traits, class _Alloc> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, std::basic_string<_CharT, _Traits, _Alloc>&)
operator>>(basic_istream<_CharT, _Traits>& __in,
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/basic_string.tcc:996:5: note: template argument deduction/substitution failed:
main.cpp:13:22: note: mismatched types �std::basic_string<_CharT, _Traits, _Alloc>� and �int*�
cin>> a[index];
^
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/istream:879:0,
from /usr/local/gcc-4.8.1/include/c++/4.8.1/iostream:40,
from main.cpp:1:
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/istream.tcc:955:5: note: template<class _CharT2, class _Traits2> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT2*)
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT* __s)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/istream.tcc:955:5: note: template argument deduction/substitution failed:
main.cpp:13:22: note: deduced conflicting types for parameter �_CharT2� (�char� and �int�)
cin>> a[index];
^
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/istream:879:0,
from /usr/local/gcc-4.8.1/include/c++/4.8.1/iostream:40,
from main.cpp:1:
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/istream.tcc:923:5: note: template<class _CharT, class _Traits> std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT&)
operator>>(basic_istream<_CharT, _Traits>& __in, _CharT& __c)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/bits/istream.tcc:923:5: note: template argument deduction/substitution failed:
main.cpp:13:22: note: deduced conflicting types for parameter �_CharT� (�char� and �int*�)
cin>> a[index];
^
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/iostream:40:0,
from main.cpp:1:
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:727:5: note: template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, unsigned char&)
operator>>(basic_istream<char, _Traits>& __in, unsigned char& __c)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:727:5: note: template argument deduction/substitution failed:
main.cpp:13:22: note: cannot convert �*(a + ((sizetype)(((long unsigned int)index) * 8ul)))� (type �int*�) to type �unsigned char&�
cin>> a[index];
^
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/iostream:40:0,
from main.cpp:1:
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:732:5: note: template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, signed char&)
operator>>(basic_istream<char, _Traits>& __in, signed char& __c)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:732:5: note: template argument deduction/substitution failed:
main.cpp:13:22: note: cannot convert �*(a + ((sizetype)(((long unsigned int)index) * 8ul)))� (type �int*�) to type �signed char&�
cin>> a[index];
^
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/iostream:40:0,
from main.cpp:1:
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:774:5: note: template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, unsigned char*)
operator>>(basic_istream<char, _Traits>& __in, unsigned char* __s)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:774:5: note: template argument deduction/substitution failed:
main.cpp:13:22: note: cannot convert �*(a + ((sizetype)(((long unsigned int)index) * 8ul)))� (type �int*�) to type �unsigned char*�
cin>> a[index];
^
In file included from /usr/local/gcc-4.8.1/include/c++/4.8.1/iostream:40:0,
from main.cpp:1:
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:779:5: note: template<class _Traits> std::basic_istream<char, _Traits>& std::operator>>(std::basic_istream<char, _Traits>&, signed char*)
operator>>(basic_istream<char, _Traits>& __in, signed char* __s)
^
/usr/local/gcc-4.8.1/include/c++/4.8.1/istream:779:5: note: template argument deduction/substitution failed:
main.cpp:13:22: note: cannot convert �*(a + ((sizetype)(((long unsigned int)index) * 8ul)))� (type �int*�) to type �signed char*�
cin>> a[index];
^
main.cpp: In function �void sort(int**, int)�:
main.cpp:24:31: error: invalid conversion from �int*� to �int� [-fpermissive]
int temp = a[j];
^
main.cpp:26:24: error: invalid conversion from �int� to �int*� [-fpermissive]
a[j+1] = temp;
^
main.cpp: In function �void sortd(int**, int)�:
main.cpp:45:35: error: invalid conversion from �int*� to �int� [-fpermissive]
int temp = arr[j+1];
^
main.cpp:47:24: error: invalid conversion from �int� to �int*� [-fpermissive]
arr[j] = temp;
^
main.cpp: In function �int main()�:
main.cpp:74:57: error: cannot convert �IntArrayPtr {aka int*}� to �int**� for argument �1� to �void fill_array(int**, int)�
fill_array(a, array_size);
^
main.cpp:75:51: error: cannot convert �IntArrayPtr {aka int*}� to �int**� for argument �1� to �void sort(int**, int)�
sort(a, array_size);
^
main.cpp:84:50: error: cannot convert �IntArrayPtr {aka int*}� to �int**� for argument �1� to �void fill_array(int**, int)�
fill_array(a, array_size1);
^
main.cpp:85:45: error: cannot convert �IntArrayPtr {aka int*}� to �int**� for argument �1� to �void sortd(int**, int)�
sortd(a, array_size1);
如果您的問題在C++中,請不要將它標記爲C。 – 2014-10-22 11:54:37
我爲什麼被低估?這個問題是錯的嗎?我已經閱讀了條款和條件,我不是在複製問題,我不粘貼它兩次,這是一個原始問題,原始問題,而不是你爲什麼不投票呢? – 2014-10-22 11:55:04
停止執行'typedef int * IntArrayPtr;',它會讓你的代碼更加神祕,這是你作爲初學者需要的最後一件事 – 2014-10-22 11:55:50