C++ -kysymykset

Muu yhteisön välinen keskustelu.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ -kysymykset

Post by Koodiapina »

Tarvisin kapseloida koodini ja mitä nyt olen lukenut täältä jotain, niin linkkerin pitäisi osata linkata kaikki .o tiedostot automaattisesti. Kysymys kuuluukin, mitäs mun pitää tehdä, että näin kävisi? IDE on DevCPP ja kääntäjä MinGW32.
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: C++ -kysymykset

Post by temu92 »

Ainakin mulla itsellä se tekee sen automaagisesti (jos nyt tajusin mitä tarkoitit)
Pettis
The Evil Admin
The Evil Admin
Posts: 1044
Joined: Sun Aug 26, 2007 5:08 pm
Location: Rovaniemi
Contact:

Re: C++ -kysymykset

Post by Pettis »

Grandi wrote:Tarvisin kapseloida koodini ja mitä nyt olen lukenut täältä jotain, niin linkkerin pitäisi osata linkata kaikki .o tiedostot automaattisesti. Kysymys kuuluukin, mitäs mun pitää tehdä, että näin kävisi? IDE on DevCPP ja kääntäjä MinGW32.
Mites nämä .o:t liittyy kapselointiin?

http://fi.wikipedia.org/wiki/Kapselointi
CB Repository .com - Sinne ne kaikki koodit menneet on!
MunVerkko - Ilmaisia foorumeita ja blogeja
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ -kysymykset

Post by Koodiapina »

temu92 wrote:Ainakin mulla itsellä se tekee sen automaagisesti (jos nyt tajusin mitä tarkoitit)
Jos mulla on kymmenen .cpp tiedostoa, ne muuttuvat automaagisesti .o tiedostoiksi kuten pitääkin. Mutta niitä ei pysty käyttää, sillä jos yritän käyttää niissä olevia funktioita / luokkia / whatever main.cpp:ssä, niin homma ei pelitä. Herjaa sitä että niitä ei ole määritetty.

Pettis: No tarkotuksena olis saada koodi eri tiedostoihin. Mutta Dibalo sanoi, että .cpp tiedostoja ei saa liittää, vaan täytyy käyttää .o tiedostoja jotka linkkerin pitäisi automaattisesti linkata koodiin.

Ja anteeksi termien väärinkäyttö :D Tossa Dibalon viesti, jota en ymmärtänyt.
Dande
Active Member
Posts: 193
Joined: Tue Aug 28, 2007 4:30 pm

Re: C++ -kysymykset

Post by Dande »

Grandi wrote:
temu92 wrote:Ainakin mulla itsellä se tekee sen automaagisesti (jos nyt tajusin mitä tarkoitit)
Jos mulla on kymmenen .cpp tiedostoa, ne muuttuvat automaagisesti .o tiedostoiksi kuten pitääkin. Mutta niitä ei pysty käyttää, sillä jos yritän käyttää niissä olevia funktioita / luokkia / whatever main.cpp:ssä, niin homma ei pelitä. Herjaa sitä että niitä ei ole määritetty.

Pettis: No tarkotuksena olis saada koodi eri tiedostoihin. Mutta Dibalo sanoi, että .cpp tiedostoja ei saa liittää, vaan täytyy käyttää .o tiedostoja jotka linkkerin pitäisi automaattisesti linkata koodiin.

Ja anteeksi termien väärinkäyttö :D Tossa Dibalon viesti, jota en ymmärtänyt.
Luot erikseen Header tiedostot (eli ne .h- tai .hpp-päätteiset) Niissä määrittelet kaikki luokat ja niiden funkiot. Sitten includetat tämän tiedoston pääohjelmaasi, ja luokkien toteutukset teet erikseen .cpp-tiedostoon. Tässä esimerkkiä (ei tietenkään tuollaisenaan toimi, vaan yritän siinä esittää olennaisimman)

Code: Select all

//Pääohjelma.cpp
#include "omaluokka.hpp"
/*
loput ohjelmasta
*/

Code: Select all

//Omaluokka.hpp
#ifndef OMALUOKKA_HPP
#define OMALUOKKA_HPP
/* kaikkea muuta tarpeellista */
class omaluokka{
    void jokufunktio();
};
/* kaikkea muuta tarpeellista */
#endif

Code: Select all

//omaluokka.cpp
#include "omaluokka.hpp"
/*kaikkea muuta tarpeellista */
void omaluokka::jokufunktio(){
    /* toteutus */
};
/* kaikkea muuta tarpeellista */
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ -kysymykset

Post by Koodiapina »

Kiitos avusta jälleen kerran :) Kokeilinkin jo noiden header filujen käyttöä, mutta hieman eri tavalla, ja eihän se tietenkään toiminut. Yritin nimittäin kirjoittaa .cpp:ien sisällön niihin O_o'

EDIT: W0h000! Tasan 1000 viestiä ja arvonimenä "guru".
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda »

Grandi wrote:Kiitos avusta jälleen kerran :) Kokeilinkin jo noiden header filujen käyttöä, mutta hieman eri tavalla, ja eihän se tietenkään toiminut. Yritin nimittäin kirjoittaa .cpp:ien sisällön niihin O_o'
Tämän takia on yleensä hyvä lukea oppikirja ennen koodauksen aloittamista ;) Etenkin tuo #ifndef-define -hässäkkä on asia joka ei kyllä heti tulisi itsellä mieleen, mutta se kannattaa tosiaan ottaa tavaksi aina headeria tehdessä. Tässäpä lisäksi yksi "kikka" jota käyttämällä koodista saa "promaista" ;) Nimittäin forward declaration.

Esmerkki:

Code: Select all

#ifndef __HEROH__
#define __HEROH__

//Include files
#include "GameObject.h" //CGameObject declaration

//Forward declarations
class CMonster;
class CGameEngine;

class CHero : public CGameObject
{
public:
    CHero(const CGameEngine* engine);
    void AttackMonster(CMonster* monster);

private:
    CGameEngine* engine; //Not owned, do not delete
};

#endif //__HEROH__
Forward declaration on käytännöllinen esimerkin mukaisissa tilanteissa, jossa oliolla on jäsenenään osoitinmuuttuja, tai oliota käytetään parametrina. Koska muuttujan varsinaisesta tyypistä ei tarvita minkäänlaista tietoa tässä headerissa, riittää pelkästään sen nimen esittely. Tämä taas poistaa tarpeen sisällyttää luokan esittelevää headeria (tässä se olisi esim. GameEngine.h tai Monster.h). Tästä on se hyöty, että koodista saadaan poistettua aina yksi riippuvuus tiedostojen välillä, ja kääntäminen nopeutuu. Tämä on tärkeää hiemankin isompien projektien kanssa. Kun luokka peritään jostain tyypistä, tarvitaan include mukaan.
OoO
x

Re: C++ -kysymykset

Post by x »

anttipanda wrote:
x wrote:tää luulee et Ä on D ja Ö on v

tälläst tulee ku yritän buildaa, miten ideaa?
Aika "Ns. ei hyvälle terveydelle" -osastoa tuo sun viestisi :D Harhar.

Onko muuta vikaa kuin väärät kirjaimet? Esimerkiksi estääkö tuo asia projektin kääntymisen? Ei k
yllä hajuakaan mistä moinen johtuu, pistäpä vaikka testiprojekti zippinä tänne jossa moinen ongelma ilmenee (poista kaikki debug ja release -kansiot ennen zippaamista).
erm siis, tuo ilmestyy ku yritän buildaa ja mun projekti oli pelkästään yksinkertanen laskin jota väsäilin tylsyyksissäni
mut jostain syystä tuli tuo eikä ole mitään hajua mistä johtus :/
kokeilin updatee koneen kielet mut eipä löytyny vinukan toista CD:tä ni jäi siihen :E [en omista polttavaa... toimivaa..]
koska mul näkyy tietyt merkit sellasena jännänä merkkinä.. [suurin osa kiinalaisist/erikois.]
joku ratkasu pitäs saada et vois jatkaa tän c++ alottelemista :|
autoitillä osaisin mut emmä haluu siihen jäädä tahon oppia c++ ;)

ja se koodi oli siis tyyliin just

cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2
cout >> num1 laskutyyppi num2 = "vastaus on:" ->

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

Re: C++ -kysymykset

Post by temu92 »

x wrote: cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2
cout >> num1 laskutyyppi num2 = "vastaus on:"
Väärin. Oikea tyyli on

Code: Select all

cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2;
cout >> num1 >> laskutyyppi >> num2 >> "vastaus on:";
Toivottavasti tuo oli kuitenkin vain nopeasti kirjoitettu esimerkki ettet oikeasti tee noin pahoja virheitä :P
x

Re: C++ -kysymykset

Post by x »

temu92 wrote:
x wrote: cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2
cout >> num1 laskutyyppi num2 = "vastaus on:"
Väärin. Oikea tyyli on

Code: Select all

cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2;
cout >> num1 >> laskutyyppi >> num2 >> "vastaus on:";
Toivottavasti tuo oli kuitenkin vain nopeasti kirjoitettu esimerkki ettet oikeasti tee noin pahoja virheitä :P
no se oli just sellanen :)

mutjoo tarviin vieläki jotain joka auttaa mua.. muuten pitää siirtyä c# ;(
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda »

x wrote:mutjoo tarviin vieläki jotain joka auttaa mua.. muuten pitää siirtyä c# ;(
Luuletko että seikka on C++-ympäristöstäsi kiinni, vai onko windows-asennuksesi ryssitty pahemman kerran? En ymmärrä mikä vaihtoehto C# on jos C++-ympäristö ei toimi. Tai miksi siihen siirtyminen pitää ilmaista surullisella hymiöllä :D Se on tarkoituksiinsa loistava, muttei millään muotoa korvaa C++-kieltä.

Voisitpa asentaa sen käyttiksesi uusiksi. Sillä tuollaiset asiat yleensä hoituu ;)
OoO
Guest

Re: C++ -kysymykset

Post by Guest »

anttipanda wrote:
x wrote:mutjoo tarviin vieläki jotain joka auttaa mua.. muuten pitää siirtyä c# ;(
Luuletko että seikka on C++-ympäristöstäsi kiinni, vai onko windows-asennuksesi ryssitty pahemman kerran? En ymmärrä mikä vaihtoehto C# on jos C++-ympäristö ei toimi. Tai miksi siihen siirtyminen pitää ilmaista surullisella hymiöllä :D Se on tarkoituksiinsa loistava, muttei millään muotoa korvaa C++-kieltä.

Voisitpa asentaa sen käyttiksesi uusiksi. Sillä tuollaiset asiat yleensä hoituu ;)
joo mut oon laiska.. +,0

ja c++:saan mua yritettiin saada vissiin se 2viikkoa ku alottelin c# :E

ja tuskin winukan asetuksis mitään vikaa on ku mulla on kuitenki kone 24/7 päällä ja vielä muutama tunti aikasemmin olin säätäny samaa..

~
Guest

Re: C++ -kysymykset

Post by Guest »

temu92 wrote:
x wrote: cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2
cout >> num1 laskutyyppi num2 = "vastaus on:"
Väärin. Oikea tyyli on

Code: Select all

cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2;
cout >> num1 >> laskutyyppi >> num2 >> "vastaus on:";
Toivottavasti tuo oli kuitenkin vain nopeasti kirjoitettu esimerkki ettet oikeasti tee noin pahoja virheitä :P
Väärin. Oikea tyyli on

Code: Select all

cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2;
cout << num1 << laskutyyppi << num2 << "vastaus on:";
x

Re: C++ -kysymykset

Post by x »

Guest wrote:
temu92 wrote:
x wrote: cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2
cout >> num1 laskutyyppi num2 = "vastaus on:"
Väärin. Oikea tyyli on

Code: Select all

cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2;
cout >> num1 >> laskutyyppi >> num2 >> "vastaus on:";
Toivottavasti tuo oli kuitenkin vain nopeasti kirjoitettu esimerkki ettet oikeasti tee noin pahoja virheitä :P
Väärin. Oikea tyyli on

Code: Select all

cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2;
cout << num1 << laskutyyppi << num2 << "vastaus on:";

joojoo kysymys ei ollu mun tyylistä vaan miten ton saa korjattua :D
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda »

Pistäpä x edelleen se projekti mitä olet kääntämässä tänne zippinä, ja voit pistää myös Visual C++:n Output- ja Error List -ikkunoiden sisällön. Pyysinkin näitä jo aikaisemmin. Ja ei, pelkkä pieni virheellinen koodinpätkä ei ole sama kuin Visual C++ -projekti. Projektiin kuuluu mm. sln, vcproj, ja tietysti .h ja .cpp -tiedostot. Eli koko kansio missä .sln on, paitsi voit poistaa debug- ja release -kansiot ja luultavasti ncb-filenkin.
OoO
temu92
Web Developer
Web Developer
Posts: 1226
Joined: Mon Aug 27, 2007 9:56 pm
Location: Gamindustri
Contact:

Re: C++ -kysymykset

Post by temu92 »

Guest wrote:Väärin. Oikea tyyli on

Code: Select all

cout << "mitä tahot laskee?" << endl;
cin >> num1 >> laskutyyppi >> num2;
cout << num1 << laskutyyppi << num2 << "vastaus on:";
Mjoo, mäki tein sit virheen :P
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 »

Ajattelin tänään tässä, että voisin kokeilla OGRE:a jos vaikka siirtyisin Irrlichtin käytöstä siihen. Ongelmaksi tuli, että ogrea ei näköjään saa toimimaan Dev-Cpp:llä. Sivustoilla lukee, että se tukee MS Visual C++:ssaa. Yritin ladata tätä ohjelmaa, mutta jokainen versio minkä lataan on joko maksullinen tai sitten shareware. Saako tätä ilmaisena mistään?
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ -kysymykset

Post by Koodiapina »

Tuosta: http://www.microsoft.com/express/download/#webInstall

EDIT: Eikös Shareware == maksullinen?
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 »

Sain ladattua sen ilmaisen version ja olen nyt onnistunut asentamaan OGRE:n onnistuneesti. Ongelmaksi tuli ymmärtää OGRE:n perus toiminta idea (ja siihen päälle viellä, että pitää totutella uuteen editoriin ja kääntäjään). Jos joku joka on käyttänyt ogrea voisi kertoa vähäsen miten edes aloitan uuden projektin? Sen verran olen ymmärtänyt, että OGRE:ssa on jokin application luokka, joka vastaa Irrlichtin device luokkaa. Tutoriaalessa kaikki koodi kirjoitetaan yhden luokan sisälle ja sitä en ymmärrä, että miksi . :| Eli miten saan kaikista yksinkertaisimmalla keinolla, vaikka kuution näkymään ruudussa?
http://www.rockodilegames.com
CoolBasickin käyttäjä vuodesta 2004.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: C++ -kysymykset

Post by koodaaja »

Uskoin kerrankin viisaampia ja uskaltauduin kokeilemaan uudelleen VC++:aa. Osoittautui, että anttipanda tiesi ( yllättäen ) paremmin, ja kehitysympäristö on - pienestä hitaudesta huolimatta - vallan mainio. Hitauskin johtuu vain koneeni muinaudesta.

Nyt vain tällainen yleinen kysymys: miten C++ -koodi on järkevintä jaotella eri tiedostoihin? Kun on näitä .h, .cpp, .obj ynnä muita tiedostoja, jotka liittyvät jotenkin asiaan, muttei mitään hajua kuinka näitä tulisi käyttää parhaan ( selkeimmän ja toimivimman ) lopputuloksen saavuttamiseksi.
Post Reply