Dieser Code zeigt einen Fehler in der Anweisung cin an. Warum ist das?

Hier ist der Fehler:

Keine Übereinstimmung für 'Operator >>' (Operandentypen sind 'std :: istream' {aka 'std :: basic_istream '} und 'int *')

#include<bits/stdc++.h>
using namespace std;

struct go {
    int size, *p;
} r;

int main()
{
    int sum = 0;
    r.size = 10;
    r.p = (int*) malloc(r.size * sizeof(int));
    for(int i = 0; i < r.size; i++){
        cin >> (r.p + i);   // this line is showing error
        sum = sum + (*(r.p + i));
    }
    cout << sum;
}
0
Gopika G S 19 Aug. 2020 im 00:06

2 Antworten

Beste Antwort

std::istream hat kein operator>> zum Lesen eines int* Zeigers. Genau das sagt die Fehlermeldung.

Sie versuchen wirklich, in die einzelnen int Elemente des Arrays einzulesen, das Sie zuweisen. Das bedeutet, dass Sie den int* Zeiger respektieren müssen, damit Sie den operator>> verwenden können, der einen int Wert liest. Genau wie Sie den Zeiger dereferenzieren, wenn Sie die int -Werte zu sum hinzufügen.

#include <iostream>
#include <cstdlib>
using namespace std;

struct go {
    int size, *p;
} r;

int main()
{
    int sum = 0;

    r.size = 10;
    r.p = (int*) malloc(r.size * sizeof(int));
    // better: use new[] instead of malloc()
    // better: change r.p from int* to std::vector<int>, then use:
    // r.p.resize(r.size);

    for(int i = 0; i < r.size; i++){
        cin >> *(r.p + i); // or: cin >> r.p[i];
        sum += *(r.p + i); // or: sum += r.p[i];
    }

    cout << sum;

    free(r.p);
    // better: use delete[] instead of free()
    // better: let std::vector free the memory for you
}
0
Remy Lebeau 18 Aug. 2020 im 22:21

Dieser Code zeigt einen Fehler bei der cin-Anweisung. Warum ist das so?

Weil das Extrahieren eines Zeigers aus einem Zeichenstrom nicht überladen ist.

Wenn Sie in die spitze Ganzzahl einlesen möchten, einfach indirekt über den Zeiger:

std::cin >> r.p[i];
sum += r.p[i];

P.S. Vermeiden Sie die Verwendung von malloc in C ++ und vermeiden Sie den Besitz von bloßen Zeigern. In diesem Fall ist std::vector möglicherweise die bessere Option.

4
eerorika 18 Aug. 2020 im 21:09