Hej alla wf:are, igen. Jag håller på att lära mig c++, men jag har stannat på ett ställe som jag har provat att lösa i cirka 2 dygn, men det blir bara ett felmedelande hela tiden. Så jag undrar vad som är fel med denna kod
Kompilator: Default compiler
Kör g++.exe...
g++.exe "C:\Dev-Cpp\include\c++\3.4.2\backward\program.cpp" -o "nul" -g3 -I"C:\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Dev-Cpp\include\c++\3.4.2" -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib" -g3
In file included from C:/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31,
from C:\Dev-Cpp\include\c++\3.4.2\backward\program.cpp:1:
C:/Dev-Cpp/include/c++/3.4.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
C:\Dev-Cpp\include\c++\3.4.2\backward\program.cpp:3: error: `main' must return `int'
Okej, om vi översätter det till svenska så har du fått en varning och ett fel. Varningar är mindre allvarliga fel som inte hindrar programmet från att köras.
Varningen är: "This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>."
Vilket översatt betyder att du ska skriva #include <iostream>
Felet är: "`main' must return `int'"
Och det betyder att din main-funktion inte returnerar int, utan du har skrivit void där. Ändra void till int och lägg sedan till return 0; sist i main-funktionen.
Har provat det nu men då får jag massa andra(3) fel. Menar ni verkligen så här:
#include <iostream>
int main()
{
char en_variabel;
cout << "jag är smart\n";
cout << "Tror inte du det? (j/n)";
cin >> en_variabel;
if(en_variabel == 'j')
cout << "\nSåklart";
else
cout << "\nNej";
return 0;
}
jag får detta som svar:
error: `cout' undeclared (first use this function)
error: (Each undeclared identifier is reported only once for each function it appears in.)
error: `cin' undeclared (first use this function)
De filer som C++ har ärvt från C har ändrat namn något: man har tagit bort .h och placerat bokstaven c först: så har t.ex. math.h blivit cmath. Anledningen till att man bytt namn är bl.a. att begreppet namespace införts, detta för att minska riskerna för namnkollisioner. Man kan i stället för att skriva using namespace std skriva t.ex. std::cout i sin kod och på så sätt slippa få problem med namnkollisioner i filen iostream. Nu är detta inget man egentligen behöver tänka på (förutom om man deltar i stora programmeringsprojekt): det räcker att veta hur man ska skriva:
Att inte skicka tillbaka ett värde från main fungerar alldeles utmärkt. Läs C++-standarden, eller sök på nätet. Att inte skriva någonting är samma sak som att skicka tillbaka 0. Dessutom är det bättre, eftersom man då kan koncentrera sig på det viktiga i programmet.
Att ta med två argument till main när de ändå inte används ser jag ingen som helst poäng med. Saker som programmet inte använder sig av (returvärde, kommandoradsparametrar) skall heller inte finnas i källkoden. Punkt.
RED:
Du glömde även säga varför du tyckte det var bättre med "using namespace std" globalt i stället för lokalt i main.
Kan du tala om vart på nätet som det står att det går utmärkt att inte skicka med retur värde från main?
ISO C++ Standard (ISO/IEC 14882:1998) talar klart och tydligt om att main MÅSTE returnera int.
Däremot är det giltligt i C att inte returnera int..
Angående using namespace std; är det väl en smaksak. Anledningen till att ha den överst är att slippa skriva den i varenda funktion som använder stdlib.
Kan du tala om vart på nätet som det står att det går utmärkt att inte skicka med retur värde från main?
Istället för att hänvisa till en källa på nätet, dirigerar jag dig till ISO/IEC 14882:1998, 3.6.1, stycke fem. Där kan läsas att utelämnandet av en return-sats har samma effekt som return 0.
verifier skrev:
ISO C++ Standard (ISO/IEC 14882:1998) talar klart och tydligt om att main MÅSTE returnera int.
Vad jag kan se har ingen i denna tråd påstått annat. Att explicit inkludera en return-sats är däremot frivilligt.