Compiler-Fehler: fatal error: iostream: No such file or directory
- Ersteller nikomad
- Erstellt am
Simpson474
Fleet Admiral
- Registriert
- Sep. 2006
- Beiträge
- 12.804
Code:
make clean
Simpson474
Fleet Admiral
- Registriert
- Sep. 2006
- Beiträge
- 12.804
Kann es sein, dass der Name der Datei im Makefile fest kodiert ist? Es gibt Makefiles, welche sich die Dateien selbst zusammensuchen aber auch Makefiles, welche alle benötigten Dateien direkt referenzieren. Ansonsten kann es auch sein, dass der make clean Befehl nicht sauber implementiert ist, und daher die Dependency-Dateien nicht gelöscht wurden - in diesem Fall müsstest du den clean per Hand machen und generierte Dateien für "numabench" löschen.
V
VikingGe
Gast
Naja, man sollte natürlich seine Datei, wo das, was man compilieren will, aufgelistet ist, auch ändern (Ich habe keine Ahnung von autoconf, aber irgendwo in der configure.ac oder so müssten ja die Namen drinstehen).
Edit: Zu langsam.
Edit 2: Aber auch so ein Grund, warum ich CMake liebe - erzählt einem wenigstens, was los ist, wenn was fehlt.
Edit: Zu langsam.
Edit 2: Aber auch so ein Grund, warum ich CMake liebe - erzählt einem wenigstens, was los ist, wenn was fehlt.
Simpson474
Fleet Admiral
- Registriert
- Sep. 2006
- Beiträge
- 12.804
Lass mal wirklich alle Dateien innerhalb des Projektes (auch die vom Compiler generierten Dateien) nach "numabench.c" durchsuchen, irgendwo muss noch die Dependency-Datei liegen.
V
VikingGe
Gast
implizite void*-Casts sind in C++ nicht erlaubt, das Problem dürftest du bei sämtlichen malloc-Calls bekommen. Ein einfacher C-Style-Cast nach double* dürfte reichen.
Funktionen als static deklarieren geht glaube ich noch, fliegt dir aber spätestens dann um die Ohren, wenn du sowas in eine Klasse verpackst.
Funktionen als static deklarieren geht glaube ich noch, fliegt dir aber spätestens dann um die Ohren, wenn du sowas in eine Klasse verpackst.
Zuletzt bearbeitet:
Ein C-Style cast ist
Also das (type) macht ein C-Cast.
Falls du sowiso C++ verwendest kannst du entweder auf Container (std::vector z.B.) und/oder auf new/delete setzten.
Vorteile vector: Keine explizite Freigabe nötig.
Vorteile new: Typsicherheit und kein *sizeof(typ) mehr nötig.
Code:
double *a=(double*)malloc(sizeof(double)*100);
Falls du sowiso C++ verwendest kannst du entweder auf Container (std::vector z.B.) und/oder auf new/delete setzten.
Code:
#include <vector>
#using namespace std;
...
vector<double>data;
data.reserve(1000);
data[999]=1.0;
double*ptr=new double[100];
ptr[99]=1;
delete[]ptr;
Vorteile new: Typsicherheit und kein *sizeof(typ) mehr nötig.
V
VikingGe
Gast
ohne #Code:#using namespace std;

Anyway, ich würde die Speicherallokation schon mit malloc/free so belassen wie sie ist. Das ist zwar alles andere als sauber, aber nachrtäglich alle malloc/free-Calls durch new/delete zu ersetzen, geht garantiert fürchterlich in die Hose. Und über Sauberkeit und Code-Qualität sollte man sowieso nicht nachdenken, wenn man ein C-Programm mit C++-Libraries erweitert.
V
VikingGe
Gast
Die Fehlermeldung war ja folgende:
Heißt: Ein Void-Pointer wird an etwas zugewiesen, was ein Double-Pointer ist. Auch, wenn das so direkt nicht am Code ersichtlich ist.
Die Stelle, an der der Fehler auftritt, ist die hier:
Da macht man jetzt folgendes draus:
Welche Typen da jeweils benötigt werden, steht in den entsprechenden Header-Dateien oder eben in der Fehlermeldung.
Code:
numabench.cpp:82:77: error: invalid conversion from ‘void*’ to ‘double*’ [-fpermissive]
Heißt: Ein Void-Pointer wird an etwas zugewiesen, was ein Double-Pointer ist. Auch, wenn das so direkt nicht am Code ersichtlich ist.
Die Stelle, an der der Fehler auftritt, ist die hier:
Code:
thread->nsec_per_step // Erwartet: double*
= malloc (thread->num_runs * sizeof (*thread->nsec_per_step)); // Gibt: void*
Da macht man jetzt folgendes draus:
Code:
thread->nsec_per_step
= (double*) malloc (thread->num_runs * sizeof (*thread->nsec_per_step));
Welche Typen da jeweils benötigt werden, steht in den entsprechenden Header-Dateien oder eben in der Fehlermeldung.
Ähnliche Themen
- Antworten
- 12
- Aufrufe
- 512
- Antworten
- 2
- Aufrufe
- 1.807
- Antworten
- 14
- Aufrufe
- 11.501