C++ -kysymykset

Muu yhteisön välinen keskustelu.
User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: C++ -kysymykset

Post by Jani » Tue Dec 23, 2008 8:41 pm

Galgoneer wrote:
Jani wrote:miten suoritan C++ ohjelman komentoriviltä?
Samalla tavalla kuin minkä tahansa muunkin ohjelman: kirjoittamalla sen nimen (mahdollisesti polkuineen, ellet ole oikeassa kansiossa).
Voisitko esittää ongelmasi hieman tarkemmin?
elikkä saan sen auki komentamalla tiedosto.exe -o

mutta miten saan auki muodossa tiedosto.cpp?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 » Tue Dec 23, 2008 8:47 pm

Sinun tulee ensin kääntää ohjelma.

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: C++ -kysymykset

Post by Jani » Tue Dec 23, 2008 8:49 pm

esa94 wrote:Sinun tulee ensin kääntää ohjelma.
??

eikö .cpp päätteistä pysty ajamaan mitenkään?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
TheDuck
Devoted Member
Posts: 632
Joined: Sun Aug 26, 2007 3:51 pm
Location: C:\Program Files\Tuusula\

Re: C++ -kysymykset

Post by TheDuck » Tue Dec 23, 2008 8:52 pm

Ei pysty ellet ala kikkailemaan kääntäjän avulla. (pitempiä komentoja)
^^

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: C++ -kysymykset

Post by Jani » Tue Dec 23, 2008 8:59 pm

eli?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Tue Dec 23, 2008 9:00 pm

.c ja .cpp tiedostot sisältävät vain lähdekoodin. Et saa niistä ajettavaa ohjelmaa ilman kääntäjää.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Dande
Active Member
Posts: 193
Joined: Tue Aug 28, 2007 4:30 pm

Re: C++ -kysymykset

Post by Dande » Tue Dec 23, 2008 9:37 pm

Eli:
windowsiin en osaa sanoa yhden rivin komentoa, mutta linuxin puolella se onnistuisi (korvaa tietenkin hakasuluissa olevat jutut omillasi) :
gcc [lähdetiedostot] -o [ohjelman nimi] | ./[ohjelman nimi]

Windowsissa vastaavasti kahdella rivillä (olettaen että käytät MinGW:tä ja PATH on kunnolla asetettu):
gcc [lähdetiedostot] -o [ohjelman nimi]
[ohjelman nimi]

Siis jos ohjelmasi koostuu vaikkapa tiedostoista eka.cpp ja toka.cpp niin kääntäisit sen ohjelma.exeksi komennolla:
gcc eka.cpp toka.cpp -o ohjelma.exe
Ja voisit sitten suorittaa sen komennolla:
ohjelma.exe

Suosittelen tosin perehtymään makefileihin, jos aiot komentoriviä jäädä käyttämään.

Ja eihän CB:kään aja F5-napplulalla .cb-tiedostoja suoraan vaan kääntää ne ensin exe:ksi ja suorittaa sitten ks. exe:n. Kyseinen cbRun.exe löytyy normaalisti CoolBasicin IDE-kansiosta.

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: C++ -kysymykset

Post by Jani » Tue Dec 23, 2008 11:32 pm

Onko mahdollista palata rivissä takaisin?

eli \n vaihtaa riviä, niin onko joku joka nostaa

?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Tue Dec 23, 2008 11:39 pm

Esimerkiksi tälläisellä funktiolla:

Code: Select all

void asetaKursori(int x=0,int y=0){
  COORD mesta = {x,y};
  SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),mesta);
}
Sorsaan pitää liittää windows.h.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Dande
Active Member
Posts: 193
Joined: Tue Aug 28, 2007 4:30 pm

Re: C++ -kysymykset

Post by Dande » Wed Dec 24, 2008 12:17 am

Tai linuxissa:

Code: Select all

cout<<"\x1b["<<rivi<<";"<<sarake<<"H";
"\x1b":n voi korvata myös "\e":llä. C-tyylillä tuo menisi

Code: Select all

printf("\e[%d;%dH",rivi,sarake);
Lisää tietoa wikipediasta

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: C++ -kysymykset

Post by Jani » Wed Dec 24, 2008 5:58 am

Galgoneer wrote:Tai linuxissa:

Code: Select all

cout<<"\x1b["<<rivi<<";"<<sarake<<"H";
"\x1b":n voi korvata myös "\e":llä. C-tyylillä tuo menisi

Code: Select all

printf("\e[%d;%dH",rivi,sarake);
Lisää tietoa wikipediasta
käytän seuraavat 3 vuotta windowwsia.. ehkä.

EDIT: ei toiminut tuo asetaKursori funktio (vai mikä se nyt oli...)
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Wed Dec 24, 2008 11:05 am

Jani wrote:ei toiminut tuo asetaKursori funktio (vai mikä se nyt oli...)
Jaa ei vai?

Code: Select all


  #include <windows.h>
  #include <iostream>
  
  using namespace std;
  
  void asetaKursori(int x=0,int y=0)
  {
    COORD mesta = {x,y};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),mesta);
  }
  
  int main(int argc, char *argv[])
  {
    asetaKursori(10,6);
    cout << "Dead man walking..\n";
    asetaKursori(10,5);
    cout << "Here we go.";
    cin.get();
  }

E: Oho, tää oli mun 1337. viesti :D
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: C++ -kysymykset

Post by Jani » Fri Dec 26, 2008 10:51 pm

Kiitos!

Voiko funktion tallentaa toiseen tiedostoon?

Siis jotenkin näin:

Code: Select all

// Ohjelma.cpp

#include <iostream>
#include "funktio.cpp"

using std::cout

int main(void) {
    Teksti();
}

Code: Select all

//funktio.cpp

char Teksti() {
    cout << "Funktio";
}
Onko muuta tapaa koska tuo ei toimi?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Fri Dec 26, 2008 11:02 pm

Älä liitä .cpp vaan .h tai .hpp tiedostoja. Sellaisen sisältö voisi olla vaikka tälläinen:

Code: Select all

// * test.h

#ifndef test_H
#define test_H

// Tänne sisältö ...

#endif  // test_H
Jotkut luovat vielä .cpp tiedoston erikseen toteutuksille, mutta minun mielestäni se on täysin turhaa eikä selkeytä mitään. Tuohon samaan filuun voi ihan hyvin sysätä kaiken.

Muista sitten liittää kaikki tarvittavat kirjastot päämoduulissasi ihan koodin alussa niin ei tule turhaa työtä.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Dande
Active Member
Posts: 193
Joined: Tue Aug 28, 2007 4:30 pm

Re: C++ -kysymykset

Post by Dande » Sat Dec 27, 2008 12:02 am

Grandi wrote:Älä liitä .cpp vaan .h tai .hpp tiedostoja. Sellaisen sisältö voisi olla vaikka tälläinen:
Jotkut luovat vielä .cpp tiedoston erikseen toteutuksille, mutta minun mielestäni se on täysin turhaa eikä selkeytä mitään. Tuohon samaan filuun voi ihan hyvin sysätä kaiken.
Krhm... Sen tarkoituksena ei välttämättä olekaan niinkään selkiyttää vaan se on useissa tapauksissa muutenkin järkevää.
Oletetaan, että koodisi koostuu kahdesta moduulista ja ne molemmat sisällyttävät saman header-tiedoston, jonne joku älypää on mennyt tunkemaan koodiakin. Tällöin molemmat moduulit tulevat sisältämään samat funktiot ja niistä linkitetty exe tulee sisältämään saman funktion kahdesti.

Itseasiassa vastaavasta ongelmasta oli juuri kysymys: Oletan että Jani käytti IDEä, jossa nuo molemmat tiedostot olivat osa projektia. Kääntäjä käänsi ensiksi ohjelma.cpp:n, joka sisälsi includen takia Teksti()-funktion. Sen jälkeen kääntäjä käänsi vielä funktio.cpp:n joka sisältää myös Teksti()-funktion. Nyt kääntäjä ei osaa enää jatkaa, koska sillä on kaksi Teksti()-funktiota. Jos yllä olevassa tapauksessa haluaa välttää header tiedoston käyttöä, voisi menetällä seuraavasti:

Code: Select all

// Ohjelma.cpp

//iostreamia ei tarvitse sisällyttää tähän, sillä mainin ei tarvitse tietää kuin Teksti funktion olemassa olosta
void Teksti(); //Tämä olisi normaalisti header tiedostossa, mutta voi sen sijoittaa tähänkin.
//Tämä siis kertoo että on olemassa Teksti()-funktio.


int main(void) {
    Teksti();
}

Code: Select all

//funktio.cpp
#include <iostream> //Teksti()-funktio tarvitsee iostreamin funktioita
/* Tähänkin voi halutessaan liittää tuon rivin:
void Teksti();
joka kertoisi että se on olemassa myös tälle funktiolle */
void Teksti() { //en tiedä miksi tyyppinä oli char, koska funktio ei kerran palauta mitään?
    std::cout << "Funktio";
}
Header-tiedostojen tarkoitus on kertoa, että jotakin on olemassa jossakin, niiden ei tule itse sisältää varsinaisia toteutuksia (paitsi inline-funktiot).

User avatar
Sami The Great
Advanced Member
Posts: 485
Joined: Tue Aug 28, 2007 4:15 pm
Contact:

Re: C++ -kysymykset

Post by Sami The Great » Sat Dec 27, 2008 12:26 am

Grandi wrote:Älä liitä .cpp vaan .h tai .hpp tiedostoja. Sellaisen sisältö voisi olla vaikka tälläinen:

Code: Select all

// * test.h

#ifndef test_H
#define test_H

// Tänne sisältö ...

#endif  // test_H
Jotkut luovat vielä .cpp tiedoston erikseen toteutuksille, mutta minun mielestäni se on täysin turhaa eikä selkeytä mitään. Tuohon samaan filuun voi ihan hyvin sysätä kaiken.

Muista sitten liittää kaikki tarvittavat kirjastot päämoduulissasi ihan koodin alussa niin ei tule turhaa työtä.
Pääasiassa toteutus tehdään cpp tiedostoon, koska .h tiedostot täytyy kääntää joka kerta uudestaan kun ohjelma käännetään.
Kun cpp tiedostossa on toteutus se käännetään vain kun sitä on muutettu ja käännös vaiheessa aiemmin käännetyt cpp käännökset vain linkitetään lopulliseen exeen. Tämä nopeuttaa kääntämistä, jos sitä tehdään toistuvasti.
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.

User avatar
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: C++ -kysymykset

Post by temu92 » Sun Dec 28, 2008 3:52 pm

Jani wrote:Voiko funktion tallentaa toiseen tiedostoon?
http://www.ohjelmointiputka.net/koodit_ ... unnus=1770

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: C++ -kysymykset

Post by Jani » Tue Dec 30, 2008 9:25 am

Olisiko jokin järkevämpi tapa toteuttaa tämä?

Code: Select all

#include <iostream>

using namespace std;

class Testi {
    public:
        string nimi;
        int ika;
        void ITiedot();
        void YTiedot(int l=0);
        void APiste(int p) { Piste=p; }
        int PalautaPiste() { return Piste; }
        int operator+(Testi& t) { return Piste + t.PalautaPiste(); }
    private:
        int Piste;
};

void Testi::ITiedot() { cout << "Nimi: " << nimi << ", ikä: " << ika << "\n"; }

void Testi::YTiedot(int l) { if (l<1) cout << "Yritys: " << nimi << "\n"; }

int main() {
    Testi p; Testi y;
    p.nimi="Ilkka"; p.ika=45; p.APiste(10); p.ITiedot();
    y.nimi="A1Autoväri"; y.APiste(10); y.YTiedot(0);
    cout << "\n\nPisteet yhteensä: " << p+y;
    cin.get();
}
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

User avatar
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm
Contact:

Re: C++ -kysymykset

Post by Koodiapina » Tue Dec 30, 2008 3:44 pm

Noita metodeja voisi jaotella eri riveille ihan selkeyden kannalta ja voisit luoda konstruktorin noiden joidenkin tietojen asettamiselle. Silloin nuo kaikki luokan sisältämät muuttujat voisivat olla privatessa. Jos taas et tarvi tälläisiä ominaisuuksia niin voit tietenkin C-mäisesti käyttää struktuurejakin.

E: Kiitos muuten Galgoneerille ja Sami The Greatille väärän tiedon korjaamisesta ;-)
Last edited by Koodiapina on Tue Dec 30, 2008 3:49 pm, edited 2 times in total.
Olen liian älykäs ollakseni väärässä. Jos olet kanssani eri mieltä, suosittelen sinua pohtimaan omaa elämänkatsomustasi ja sen perusteita.

User avatar
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 5:53 pm

Re: C++ -kysymykset

Post by Jani » Tue Dec 30, 2008 11:54 pm

Yritän tehdä jonkinlaista tekstipeliä mutta miten saan sen tarkastamaan painalluksen?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition

Post Reply