Visual Studio 2012 i dziwne błędy

0

Hej

Po długiej przerwie w programowaniu wracam do cpp i visual studio.
Żeby sobie poprzypominać odpalam stare programy które pisałem rok temu, przeglądam kod i kompiluje.
Dla przykładu mam taki bardzo prosty kod:

#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <iostream>
#include "stdafx.h"


using namespace std;

#pragma warning(disable: 4996);

class klasa
{
public:
	char pomoc[20];


	klasa(char *tekst)
	{
		strcpy(pomoc,tekst);
	}
};

int main()
{
	klasa a("tralala");

	cout<<a.pomoc<<endl;

	system("pause");
	return 0;
}

nie jestem pewien ale prawie na sto procent program mi się rok temu kompilował
teraz wyrzuca mi błędy

Error	5	error C3861: 'strcpy': identifier not found	
Error	6	error C2065: 'cout' : undeclared identifier	
Error	7	error C2065: 'endl' : undeclared identifier	
Error	8	error C3861: 'system': identifier not found

Co ciekawe i dla mnie najdziwniejsze - po skopiowaniu kodu do nowego projektu wyrzuca mi tylko błąd

Error	1	error C1083: Cannot open include file: 'stdafx.h': No such file or directory
	2	IntelliSense: cannot open source file "stdafx.h"

i po usunięciu "stdafx.h" program działa...

Dlaczego więc w 'starym' projekcie odpalonym z dysku nie działa a w nowym działa - gdzie szukać przyczyny? pytanie pewnie bardziej dotyczy samego Visual Studio niż programowania w C++ jednak bardzo proszę o pomoc.

Od razu uprzedzam pytania - nie chcę używać innego środowiska ponieważ VS używamy na uczelni.

dodanie znaczników <code> dla list błędów - fp

0
#include "stdafx.h"

To powinno być pierwszym inkludem w całym pliku.
Pozostałe #include możesz przenieść do tego stdafx.h, ten plik jest częścią twojego projektu.
Do tego służy — dzięki temu rekompilacja programu trwa krócej.

0

dzięki!
ale w takim razie pytanie dlaczego po przeniesieniu tego na początek w tym 'oryginalnym' 'starym' pliku działa, a w nowym projekcie z przekopiowanym kodem działa po usunięciu stdafx.h?
W 'starym' pliku bez stdafx.h nie chce ruszyć

1

Plik stdafx.h jest traktowany specjalnie gdy jest włączona opcja “use precompiled header” we właściwościach projektu. Domyślnie w nowym projekcie jest to włączone, ale można odznaczyć w kreatorze albo potem we właściwościach projektu.

Jeśli precompiled header jest włączone, plik stdafx.h (to jest domyślna nazwa, ale może być inna) i wszystko co jest w tym pliku za#include'owane jest kompilowane osobno.

Dzięki temu projekt (zwłaszcza duży) kompiluje się znacznie szybciej, ale wszystkie pliki .cpp muszą mieć #include "stdafx.h" na początku i to na samym początku.

Do stdafx.h należy dodawać #include'y ze standardowych bibliotek (czyli takich z < >), ale nie zaleca się umieszczać tam własnych plików nagłówkowych (czyli takich należących do naszego projektu).

Jeśli wyłączysz precompiled header, plik stdafx.h staje się zwykłym plikiem nagłówkowym (nie obowiązuje zasada że musi być na początku każdego .cpp), projekt się nadal normalnie kompiluje, ale bez zysku przyspieszenia kompilacji.

Jeśli nie chcesz się w to bawić, możesz przy tworzeniu nowego projektu wybrać „empty project” i ręcznie dodać nowy plik .cpp. Nie będzie żadnego stdafx.h ani związanych z nim cudów.
Ale radzę lepiej jednak trzymać się konwencji (czyli umieszczać standardowe inkludy w stdafx.h) bo jak zaczniesz pisać większe programy, zysk w czasie rekompilacji projektu jest spory.

1 użytkowników online, w tym zalogowanych: 0, gości: 1