2014-10-12 11 views
8

Als ich dieses Programm kompiliert (von C++ Programming Language 4. Ausgabe):Fehler C1083: kann nicht Include-Datei öffnen: 'stdafx.h'

main.cpp

#include <stdafx.h> 
#include <iostream> 
#include <cmath> 
#include "vector.h" 
using namespace std; 

double sqrt_sum(vector&); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    vector v(6); 
    sqrt_sum(v); 
    return 0; 
} 

double sqrt_sum(vector& v) 
{ 
    double sum = 0; 
    for (int i = 0; i != v.size(); ++i) 
     sum += sqrt(v[i]); 
    return sum; 
} 

vector.cpp

#include <stdafx.h> 
#include "vector.h" 

vector::vector(int s) 
:elem{ new double[s] }, sz{ s } 
{ 
} 
double& vector::operator[](int i) 
{ 
    return elem[i]; 
} 
int vector::size() 
{ 
    return sz; 
} 

vector.h

#include <stdafx.h> 
class vector{ 
public: 
    vector(int s); 
    double& operator[](int i); 
    int size(); 
private: 
    double* elem; 
    int sz; 
}; 

Es gab mir diese Fehler:

errors

ich es auf Microsoft Visual Studio 2013 ausführen, auf Windows 7. Wie es zu beheben?

+4

Starten Sie Ihr Projekt der richtige Weg ist oft 99% der Schlacht.Datei + Neu + Projekt, Visual C++, Win32, wählen Sie "Win32-Konsolenanwendung". Sie haben jetzt eine stdafx.h-Datei mit allen Compilereinstellungen so, wie sie sein sollten, um die vorkompilierte Header-Funktion zu verwenden. Wenn das Buch dich nicht so führte, solltest du nach einem anderen suchen. Aber es hat wahrscheinlich getan. –

Antwort

9

Sie müssen richtig verstehen, was ist ein "stdafx.h", aka vorkompilierten Header. Andere Fragen oder Wikipedia werden das beantworten. In vielen Fällen kann ein vorkompilierter Header vermieden werden, besonders wenn Ihr Projekt klein und wenig abhängig ist. In Ihrem Fall wurde, wie Sie wahrscheinlich von einem Vorlagenprojekt ausgingen, Windows.h nur für das Makro _TCHAR verwendet.

Dann vorkompilierte Header ist in der Regel eine pro-Projektdatei in Visual Studio Welt, so:

  1. Vergewissern Sie sich die Datei "stdafx.h" in Ihrem Projekt haben. Wenn Sie dies nicht tun (z. B. wenn Sie es entfernt haben), erstellen Sie einfach ein neues temporäres Projekt und kopieren Sie das Standardprojekt von dort.
  2. Ändern Sie die #include <stdafx.h> zu #include "stdafx.h". Es soll eine lokale Projektdatei sein, die nicht in Include-Verzeichnissen aufgelöst werden soll.

Zweitens: Es ist nicht ratsam, den vorkompilierte Header in Ihrem eigenen Header enthält, nicht Namespace von einer anderen Quelle Unordnung, die Ihren Code als Bibliothek verwenden kann, so vollständig seine Aufnahme in vector.h entfernen.

+0

Nach diesen Änderungen https://imgur.com/2lgOJht – Kulis

+1

Alle Methoden, die Sie in der Kopfzeile 'vector.h' definiert haben, fand kein Symbol in der Hauptdatei ausführbar. Stellen Sie sicher, dass Sie 'vector.cpp' wirklich kompilieren. In Visual Studio: Stellen Sie sicher, dass "vector.cpp" im Filter "Quelldateien" enthalten ist (Sie sehen es als Ordner). Oder entferne es und lies es in das Projekt ein. – ceztko

+0

Ich habe es getan. Jetzt funktioniert https://imgur.com/IXIyuwK – Kulis

5

Fügen Sie einfach windows.h anstelle von stdfax ein oder erstellen Sie ein sauberes Projekt ohne Vorlage.

2

Fügen Sie in Ihrer Quelldatei #include "afxwin.h" hinzu. Es wird Ihr Problem lösen.

4

Es gibt zwei Lösungen dafür.

Lösung Nummer eins: 1. Erstellen Sie das Projekt. Während der Erstellung eines Projekts sicherzustellen, dass vorkompilierte Header geprüft (Anwendungseinstellungen ... *** Sie überprüfen leeres Projekt nicht)

Lösung Nummer zwei: 1.Erstellen stdafx.h und stdafx.cpp in Ihrem Projekt 2 Recht klicken Sie auf Projekt -> Eigenschaften -> C/C++ -> vorkompilierte Header 3.select vorkompilierte Header (/ YC) 4.Rebuild die Lösung

Lassen Sie mir eine Nachricht erstellen, wenn Sie Problem begegnen.

+1

Ich habe diese leeren Dateien in "Lösung Nummer zwei" erstellt und in "Projekteigenschaften" -> "Vorkompilierte Header" ist leer gelassen - ich habe nicht 'Create (/ Yc)' ausgewählt. Ich habe es umgebaut und alles ist in Ordnung. –