2014-10-12 9 views
8

Kiedy skompilowany program (z C++ Programming Language 4th Edition):Błąd C1083: Can not open obejmują pliku: '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; 
}; 

To dało mi te błędy:

errors

go uruchomić na Microsoft Visual Studio 2013, Windows 7. Jak to naprawić?

+4

Rozpoczęcie projektu Właściwa droga to często 99% bitwy.Plik + Nowy + Projekt, Visual C++, Win32, wybierz "Win32 Console Application". Masz teraz plik stdafx.h ze wszystkimi ustawieniami kompilatora dokładnie tak, jak powinien, aby użyć prekompilowanej funkcji nagłówków. Jeśli książka nie poprowadziła cię w ten sposób, powinieneś poszukać innego. Ale prawdopodobnie tak. –

Odpowiedz

9

Musisz właściwie zrozumieć, co to jest "stdafx.h", czyli prekompilowany nagłówek. Odpowie na to będą inne pytania lub Wikipedia. W wielu przypadkach można uniknąć prekompilowanego nagłówka, zwłaszcza jeśli projekt jest mały i ma kilka zależności. W twoim przypadku, jak prawdopodobnie zacząłeś od projektu szablonu, użyto go tylko do Windows.h tylko dla makra _TCHAR.

Następnie prekompilowana nagłówek jest zwykle plik per-projektu w Visual Studio świata, więc:

  1. Sprawdź, czy masz plik „stdafx.h” w projekcie. Jeśli tego nie zrobisz (np. Usunąłeś), po prostu utwórz nowy projekt tymczasowy i skopiuj domyślny z niego;
  2. Zmień #include <stdafx.h> na #include "stdafx.h". Jest to plik lokalny projektu, którego nie można rozwiązać w katalogach include.

Po drugie: to niewskazane obejmują prekompilowanego nagłówek własnych nagłówków, aby nie zaśmiecać przestrzeni nazw z innego źródła, które mogą wykorzystać swój kod jako biblioteka, więc całkowite usunięcie jej włączenie w vector.h.

+0

Po tych zmianach https://imgur.com/2lgOJht – Kulis

+1

Wszystkie metody zdefiniowane w nagłówku 'vector.h' nie znalazły zakończonego symbolu w głównym pliku wykonywalnym. Upewnij się, że naprawdę kompilujesz 'vector.cpp'. W visual studio: upewnij się, że 'vector.cpp' znajduje się w filtrze" Pliki źródłowe "(widzisz go jako folder). Lub usuń i wczytaj go do projektu. – ceztko

+0

Zrobiłem to. Teraz działa https://imgur.com/IXIyuwK – Kulis

5

Wystarczy dołączyć windows.h zamiast stdfax lub utworzyć czysty projekt bez szablonu.

2

Dodaj #include "afxwin.h" w swoim pliku źródłowym. To rozwiąże twój problem.

4

Dostępne są dwa rozwiązania.

Rozwiązanie numer jeden: 1.Otwórz projekt. Podczas tworzenia projektu zapewniają, że skompilowany nagłówek jest zaznaczone (Ustawienia aplikacji ... *** Nie sprawdzaj pusty projekt)

Rozwiązanie numer dwa: 1.Create stdafx.h i stdafx.cpp w projekcie 2 Right kliknij na projekt -> właściwości -> C/C++ -> prekompilowanego Główki 3.select prekompilowana stworzyć nagłówek (/ YC) 4.Rebuild rozwiązanie

napisz do mnie wiadomość w przypadku napotkania jakiegokolwiek problemu.

+1

Te puste pliki utworzyłem w "drugim numerze rozwiązania" iw "Właściwości projektu" -> "Prekompilowany nagłówek" jest puste - nie wybrałem opcji "Utwórz (/ Yc)". Przebudowałem go i wszystko jest w porządku. –

Powiązane problemy