1

C++ を学習しようとしているので、ポインターと動的メモリをいじっていましたが、コンパイル時にこのエラーが発生し続けます。

error C2678: binary '>>' : no operator found which takes a left-hand operand of type 'std::istream' (or there is no acceptable conversion)

私のコードは次のとおりです。

int * ageP;    
ageP = new (nothrow) int;

if (ageP == 0)
{
    cout << "Error: memory could not be allocated";
}
else
{
    cout<<"What is your age?"<<endl;
    cin>> ageP;                       <--this is the error line
    youDoneIt(ageP);                                            
    delete ageP;
}

何か案は?助けてくれてありがとう。

4

3 に答える 3

6

agePこの呼び出しによって割り当てられた、メモリを指すポインタがあります。ポインタを逆参照することによって(つまり、逆参照演算子:)ageP = new int;使用して、このメモリにアクセスできます。*ageP

  MEMORY
|        |
|--------|
|  ageP  | - - - 
|--------|      |
|  ...   |      |
|--------|      |
| *ageP  | < - -
|--------|
|        |

そして、それはあなたがタイプの変数で作業しているのと同じですint、それであなたがこのようなタイプの変数で作業した前にint

int age;
cin >> age;

今では次のようになります:

int *ageP = new int;
cin >> *ageP;
于 2012-10-05T18:21:52.697 に答える
2

ジョンは、あなたの問題が参照が期待されるポインタを提供していることは本質的に正しいです。

ただし、動的割り当てについて学習しようとしているため、自動変数を使用することは適切な解決策ではありません。代わりに、*逆参照演算子を使用してポインターから参照を作成できます。

int* ageP = new (nothrow) int;
std::cout << "What is your age?" << std::endl;
std::cin >> *ageP;                                           
delete ageP;
于 2012-10-05T18:15:35.763 に答える
2

問題は、int* ではなく int への参照が必要なことです。例えば

int ageP;
cin >> ageP;

したがって、ポインターを使用しないため、削除も不要です。

それが役に立てば幸い。

于 2012-10-05T18:08:25.497 に答える