Permalänk
Medlem

C++ - Newbie

Tänkte börja lära mig c++, stötte på ett problem på denna enkla kod:

Citat:

#include <iostream>

int main()
{
cout << "heff heff";
return 0;
}

Använder mig av gcc v3.3.3

Felmeddelande:

Citat:

test.cpp: In function `int main()':
test.cpp:5: error: `cout' undeclared (first use this function)
test.cpp:5: error: (Each undeclared identifier is reported only once for each function it appears in.)

Någon smarty som har en lösning?

Visa signatur

chassi('Corsair Graphite 600T'); mobo('Asus Sabertooth Z87'); cpu('i7 4770K'); ram('2x8GB@1600MHz'); gfx('Nvidia 970 Strix DC2 OC'); psu('Corsair 860W Platinum');

Permalänk
Medlem

std::cout << "heff heff";

Permalänk
Avstängd

Under #include <iostream> ska du skriva using namespace std;

Visa signatur

. C++
. PHP

Permalänk
Medlem

#include <iostream.h>

int main(void)
{
cout << "heff heff";
return 0;
}

Det skulle funka på skolans kompilator.

#include <iostream>
using namespace std;

int main(void)
{
cout << "heff heff";
return 0;
}

Det där kanske funkar på andra kompilatorer jag har inte arbetat med någon annan dock så jag är osäker.

Permalänk
Medlem

Jag skulle kört med printf() istället.

#include <stdio.h> int main() { printf( "Heff heff" ); return 0; }

Visa signatur

must!

Permalänk

printf är kvar från C. Ska det vara riktig C++ så är det cout som gäller.

Visa signatur
Permalänk
Medlem

printf är helt riktigt en kvarleva från C och headern heter inte <iostream.h> i C++ utan enbart <iostream> om man ska va petig.. alternativt <cstdio> (om bara printf söktes).

Anledningen till att man bör använda strömmar (cout, cin, cerr, clog) är att de är objekt med alla fördelar det innebär. De kan skickas som parameter till funktioner, andra strömmar, du kan ärva streambuf och göra helt egna strömmar som kanske läser/skriver nätverkstrafik. Det blir möjligt att lägga till funktionalitet dynamiskt genom att bygga lager med strömmar, ex.

OutputStream os(CompressedStream(SocketStream()));
os << "USER " << username << endl;

En ström som komprimerar "USER" innan det skickas som nätverkstrafik någonstans. Byter man SocketStream mot cout får man en komprimerad utskrift på skärmen snabbt och enkelt.

Något kort om namnrymder
http://www.cplusplus.se/wiki.php?keyword=FAQ#2.4

Visa signatur

cplusplus.se

Permalänk
Medlem

printf ligger väl också i std (om man använder cstdio), så att göra som Hocce hjälper ingenting.

Visa signatur

:€

Permalänk
Medlem

Nuvarande kod efter allas bra tips och råd:

#include <iostream> using namespace std; int main(void) { cout << "heff heff"; return 0; }

Fel:

(15:04:18) gcc -o test test.cpp /tmp/ccZI6o1i.o(.text+0x19): In function `main': : undefined reference to `std::cout' /tmp/ccZI6o1i.o(.text+0x1e): In function `main': : undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)' /tmp/ccZI6o1i.o(.text+0x4a): In function `__static_initialization_and_destruction_0(int, int)': : undefined reference to `std::ios_base::Init::Init[in-charge]()' /tmp/ccZI6o1i.o(.text+0x79): In function `__tcf_0': : undefined reference to `std::ios_base::Init::~Init [in-charge]()' /tmp/ccZI6o1i.o(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status

Är det gcc som är inställd på att jag inte ska lära mig c++ eller?

Visa signatur

chassi('Corsair Graphite 600T'); mobo('Asus Sabertooth Z87'); cpu('i7 4770K'); ram('2x8GB@1600MHz'); gfx('Nvidia 970 Strix DC2 OC'); psu('Corsair 860W Platinum');

Permalänk
Medlem

DU ska använda g++

Visa signatur

cplusplus.se

Permalänk
Hedersmedlem

gcc är för C, g++ är för C++.

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

DOH!
Fungerar utmärkt nu

Tack för alla svar!

Visa signatur

chassi('Corsair Graphite 600T'); mobo('Asus Sabertooth Z87'); cpu('i7 4770K'); ram('2x8GB@1600MHz'); gfx('Nvidia 970 Strix DC2 OC'); psu('Corsair 860W Platinum');

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Slemh
#include <iostream.h>

int main(void)
{
cout << "heff heff";
return 0;
}

Det skulle funka på skolans kompilator.

#include <iostream>
using namespace std;

int main(void)
{
cout << "heff heff";
return 0;
}

Det där kanske funkar på andra kompilatorer jag har inte arbetat med någon annan dock så jag är osäker.

sheet har ni inte .Net på er skola *we have*

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av EpaUlle
sheet har ni inte .Net på er skola *we have*

Spelar ingen roll eftersom att .NET suger (enligt mig) ;).

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

Tror han syftade på Visual C++ .NET 2003 eller 2002, man kan kompilera vanliga C++-program med det.