Compiler-Fehler: fatal error: iostream: No such file or directory

Kann gelöscht werden
 
Zuletzt bearbeitet:
Kann gelöscht werden
 
Zuletzt bearbeitet:
Code:
make clean
Es lässt sich jedoch nicht jede C Datei als C++ Datei übersetzen, C++ ist nicht einfach eine Erweiterung für C sondern ein komplett eigener Standard.
 
Kann gelöscht werden
 
Zuletzt bearbeitet:
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.
 
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.
 
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.
 
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.
 
Zuletzt bearbeitet:
Sorry wenn ich es so detailliert erfrage, aber ich war nie ein brain was Programmierung angeht.
Wie sieht ein solche C-Style-Cast nac double* aus?
 
Ein C-Style cast ist
Code:
double *a=(double*)malloc(sizeof(double)*100);
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.
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 vector: Keine explizite Freigabe nötig.
Vorteile new: Typsicherheit und kein *sizeof(typ) mehr nötig.
 
Code:
#using namespace std;
ohne # ;)

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.
 
Die Fehlermeldung war ja folgende:

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.
 
Super, vielen Dank! das hat geklappt.
Dann versuche ich mal mein Glück bei den anderen 3 Fehlermeldungen...das kann ja was werden :D
 
Zurück
Oben