Kiedyś robiłem programy z książki z 2003 roku i wtedy działały ok ale teraz nawet jak wklejam kod z płyty to zawsze znajdzie jakiś błąd. Zaszły jakieś zmiany w c++? To w ogóle możliwe?
Używasz tego samego kompilatora? Jak tak, to może jakieś modyfikacje w nim porobiono…
Z tego co ja sprawdzałem wszystkie programy z starych książek działały… (ten sam kompilator - tyle, że inna wersja)
Podaj przykładowy kod który Ci nie działa.
W C++ nie ma zmian,co najwyżej możesz mieć żle skonfigurowany kompilator,jeśli masz kod w czystym c++,to powinien on działać,tylko to musi być czysty C++,jeśli w kodzie masz jakieś niestandardowe biblioteki,to to jest przyczyną błędów,można też trafić na jakiś felerny kompilator,żle sygnalizujący błędy.
Ostatnie drobne zmiany w C++ miały miejsce w 2003. Tak jak powiedział flaszer, podaj kod to się zobaczy. Możliwe, że przykłady w książce nie są w pełni zgodne ze standardem, np. w Symfonii niektóre są niepoprawne z punktu widzenia standardu, bo Symfonia powstawała wcześniej, a potem była jedynie uaktualniania. A co to za książka, którą Ty posiadasz?
no to tak wcześniej używałem Microsoft Visual Studio 2003 a teraz próbowałem na wersji 2008 tego samego programu. Z książki już drugi program nie działał bo pierwszy to był Hello World i akurat ten musi działać a tutaj ten program cały kod ja go nie pisałem jest prosto z płytki dołączonej do książki:
// This is the main project file for VC++ application project
// generated using an Application Wizard.
#include "stdafx.h"
#include
#using
#include
using namespace System;
__gc class animal
{
public:
int legs;
void SetName(String *Name) { strName = strName->Copy(Name); };
String* GetName() { return strName; };
private:
String *strName;
};
// This is the entry point for this application
int _tmain(void)
{
// TODO: Please replace the sample code below with your own.
animal *Cat, *Dog;
Cat = new animal;
Dog = new animal;
Cat->SetName("Cat");
Cat->legs = 4;
Dog->SetName("Dog");
Dog->legs = 4;
Console::WriteLine("Animal 1");
Console::Write("Name ");
Console::WriteLine(Cat->GetName());
Console::Write("Legs ");
Console::WriteLine(Cat->legs);
Console::WriteLine();
Console::WriteLine("Animal 2");
Console::Write("Name ");
Console::WriteLine(Dog->GetName());
Console::Write("Legs ");
Console::WriteLine(Dog->legs);
Console::WriteLine();
return 0;
}
główna funkcja to void main(),nie _tmain(void),to samo _gc class animal,zamiast class animal,to są jakieś niestandardowe wywołania funkcji,jeśli konfiguracja kompilatora nie jest odpowiednio ustawiona,to tego nie obsłuży i masz błędy,jeśli dalej się wywala,to są problemy ze wskażnikami - naruszenie ochrony pamięci.
Zamiast np.
String *Dog - to tylko wskażnik dać String Dog[5];
Dog[5] to tablica 6 znaków (od 0 do 5)
może być tak jak piszesz dziwnie to napisane ale tak było w książce to takie dodatkowe pytanie jaki projekt otwierać bo wybór jest duży teraz w tych nowych kompilatorach i są troszeczkę inaczej opisane niż kiedyś zresztą jak ktoś może to niech poda tytuł sprawdzonej książki która ma poprawnie napisane programy.
Ten kod to nie jest C++ To Microsoftowy twór C++/CLI. Odpowiedni projekt to CLR Console Application.
To jest kod C++ wykorzystujący Managed Extensions. Sam Managed Extensions został już zastąpiony przez język C++/CLI w nowszych wersjach Visual Studio.
Proponuje pisać kod w czystym C++ a z rozszerzeniami dla kodu zarządzanego dać sobie spokój.
Hiciorman , proszę poprawić tytuł tematu na konkretny, mówiący dokładnie o problemie. W przeciwnym razie temat zostanie usunięty.
to by się zgadzało bo książka Microsoftu to poproszę jeszcze tytuł jakiejś książki gdzie programy pisane są w czystym C++ czyli taka która dałaby dobre podstawy słyszałem że Symfonia C++ jest dobra
Tutaj masz dostępny bardzo obszerny i praktyczny kurs języka C++
spróbowałem kilka programów i bez problemu odpalają dziękuje bardzo na pewno przeczytam może nie cała ale większą część tej książki