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;
}
2 Antworten
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
}
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.
Neue Fragen
c++
C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entwickelt und hat eine ähnliche Syntax, ist aber jetzt eine völlig andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. Verwenden Sie ein versionsspezifisches Tag für Fragen zu einer bestimmten Standardversion [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] oder [C ++ 23] usw. .