C++ -kysymykset

Muu yhteisön välinen keskustelu.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 »

MaGetzUb wrote:Nyt se toimii, kun latasin MingW:n kanssa. Ei enää tarvitse tästä eteenpäin auttaa tuossa ongelmassa.
Heitänpä kysymyksen: Miten ylipäätään onnisuit asentamaan IDE:n ilman kääntäjää? :D
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: C++ -kysymykset

Post by phons »

esa94 wrote:
MaGetzUb wrote:Nyt se toimii, kun latasin MingW:n kanssa. Ei enää tarvitse tästä eteenpäin auttaa tuossa ongelmassa.
Heitänpä kysymyksen: Miten ylipäätään onnisuit asentamaan IDE:n ilman kääntäjää? :D
En ole varma, mutta joissakin asennus-ohjelmissa saa valita mitä asentaa, onhan siinäkin eri kääntäjiä, joten jos ei ollut asentanut yhtäkään niin kääntäjää, vain IDE:n ja muut turhakkeet mitä paketissa tulevat. Tosin, jotenkin olisi ihan järkevää, defaulttina, että ainakin yksi perus kääntäjä asennetaan.
Image
matti3
Active Member
Posts: 136
Joined: Fri Mar 06, 2009 8:37 pm

Re: C++ -kysymykset

Post by matti3 »

Ongelma SDL:än kanssa kun yritän kirjoittaa.

Projektina on Win32 Console


Selitänpäs:
1. Debugger&Run
2. Aukeaa ikkuna ensin consoli tyylillä sitten se muuttuu windows tyyliseksi (sininen teema)
3. Tulee kaksi neliötä joista toista painaessa pitäisi tulla tekstiä.
4. Painan tätä toista.
5. Ei tule mitään vaikka ränkyttäisin sitä ikuisuuden.

Koodi


Erroreita ei tule.

Ongelma on, että jos painan taloa niin ei tapahdu mitään. Tekstiä ei tule niinkuin pitäisi. Käytän goto:a huono koodaus tapa, mutta käytän kuitenkin.

"jaakaapin_ominaisuudet"

Sen alapuolella on cout<<"Toimiiko"<< endl; jos oikein muistan, mutta se on siellä kuitenkin ja kaikki SDL_ttf tiedostot, mutta silti se ei tulosta tekstiä.
Glory&Pride <--- selainpeli projektini

Pelilä<- yksi ylläpitämäni sivusto.

World leaders Ensimmäinen CoolBasic projektini
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: C++ -kysymykset

Post by JATothrim »

Lyö debuggeri tulille, ja breakponttteja joka paikkaan. (alkaen siitä missä hiiren nappeja käsitellään) :/ Pikaisella vilkaisulla en löytänyt ongelmaa. Kokeileppa vaihtaa projekti GUI:si niin se konsoli ikkuna häiviää kuin taikaiskusta. ;)
Jaa katoppas. löysin vian. Et ikipäivänä, ole edes tulostamassa mitään (paitsi cout:illa stadardiin konsoliivirtaan). Lueppas tarkemmin SDL_ttf manuaali. Ja heitä goto romukoppaan, "Goto + C++" = räpellystä, surkeaa ohjelmointia. Tämä kertoo siitä, ettet halitse kieltä vielä kunnolla. :) Kannataa siis vielä opiskella vähän kaikkea.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
matti3
Active Member
Posts: 136
Joined: Fri Mar 06, 2009 8:37 pm

Re: C++ -kysymykset

Post by matti3 »

Juu lueskelin noita ja sitten rupesin laittamaan koodia. Errori vyöhyke iski. :P

Koodi



Ja sitten errorit. (erroreiden jälkeen tulee suoraan errori rivit)
1>c:\documents and settings\mika.koti-8fec3c6ef1\omat tiedostot\visual studio 2008\projects\business manager 2\business manager 2\business manager 2.cpp(34) : error C2065: 'naytto' : undeclared identifier
Line: ? näyttää ylintä, mutta siellä on kommentti

1>c:\documents and settings\mika.koti-8fec3c6ef1\omat tiedostot\visual studio 2008\projects\business manager 2\business manager 2\business manager 2.cpp(34) : error C3861: 'apply_surface': identifier not found
Line: ? näyttää ylintä, mutta siellä on kommentti

1>c:\documents and settings\mika.koti-8fec3c6ef1\omat tiedostot\visual studio 2008\projects\business manager 2\business manager 2\business manager 2.cpp(214) : error C2660: 'tprint' : function does not take 4 arguments
214

1>c:\documents and settings\mika.koti-8fec3c6ef1\omat tiedostot\visual studio 2008\projects\business manager 2\business manager 2\business manager 2.cpp(217) : error C2146: syntax error : missing ';' before identifier 'SDL_Flip'
217

ps. Suur kiitos auttajalle. :)
Glory&Pride <--- selainpeli projektini

Pelilä<- yksi ylläpitämäni sivusto.

World leaders Ensimmäinen CoolBasic projektini
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 »

matti3 wrote:Juu lueskelin noita ja sitten rupesin laittamaan koodia. Errori vyöhyke iski. :P

Koodi



Ja sitten errorit. (erroreiden jälkeen tulee suoraan errori rivit)
1>c:\documents and settings\mika.koti-8fec3c6ef1\omat tiedostot\visual studio 2008\projects\business manager 2\business manager 2\business manager 2.cpp(34) : error C2065: 'naytto' : undeclared identifier
Line: ? näyttää ylintä, mutta siellä on kommentti

1>c:\documents and settings\mika.koti-8fec3c6ef1\omat tiedostot\visual studio 2008\projects\business manager 2\business manager 2\business manager 2.cpp(34) : error C3861: 'apply_surface': identifier not found
Line: ? näyttää ylintä, mutta siellä on kommentti

1>c:\documents and settings\mika.koti-8fec3c6ef1\omat tiedostot\visual studio 2008\projects\business manager 2\business manager 2\business manager 2.cpp(214) : error C2660: 'tprint' : function does not take 4 arguments
214

1>c:\documents and settings\mika.koti-8fec3c6ef1\omat tiedostot\visual studio 2008\projects\business manager 2\business manager 2\business manager 2.cpp(217) : error C2146: syntax error : missing ';' before identifier 'SDL_Flip'
217

ps. Suur kiitos auttajalle. :)
Mitä ihmeen sekasotkua tää on? Listaanpa:

Sulla on includattu iostream, mutta käytät silti C:n ulostusfunktioita. Kumpikaan näistä ei sitäpaitsi muistaakseni toimi SDL-sovelluksessa!

Olisit voinut tehdä luokkana nuo kuvafunktiot (Lyhentää nimiä kiwisti)

Code: Select all

#ifdef main
#undef main
#endif
En tajua tätä kohtaa, poistatko sä include guardin? :O

Rivi 214 (2 alinta ongelmaasi):

Code: Select all

tprint(message, naytto, Xteksti, Yteksti) //PUUTTUU PUOLIPILKKU, lisäksi tprint ei ota neljää argumenttia
Kovasti näyttää, ettei se löydä funktiota apply_surface. Voi johtua siitä, että olet copypastannut koodin jostain toisesta, jossa kyseinen funktio on luotu. apply_surface ei ole SDL:n perusfunktio, joten eihän se nyt käy. Samaan liittyen, tuossa funktiossa ei ole olemassa muuttujaa naytto. Pitäisikö olla game.naytto?
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ -kysymykset

Post by Koodiapina »

esa94 wrote:Sulla on includattu iostream, mutta käytät silti C:n ulostusfunktioita. Kumpikaan näistä ei sitäpaitsi muistaakseni toimi SDL-sovelluksessa!
Toimivat yhtä hyvin kuin ilman SDL:ääkin.

Btw, tuo koodi on aikamoista copypastea.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 »

Grandi wrote:Toimivat yhtä hyvin kuin ilman SDL:ääkin.
Konsoli (STDOUT) on piilossa :)
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ -kysymykset

Post by Koodiapina »

Jos avaat SDL-sovelluksen konsolista, niin ei se pääteikkuna mihinkään katoa (Ellei sellaista temppua ole koodissa erikseen määritelty). Kuvailemasi ominaisuus on varmaankin IDE-kohtainen. Esimerkki:

Code: Select all

#include <SDL/SDL.h>
#include <iostream>

int main (int argc, char **argv)
{
	SDL_Init (SDL_INIT_EVERYTHING);

	SDL_Surface *Ruutu;
	SDL_Event Tapahtuma;

	int Liput = SDL_HWSURFACE | SDL_DOUBLEBUF;
	Ruutu = SDL_SetVideoMode (320, 240, 32, Liput);
	
	int Hiiri, x, y, ox, oy;
	
	while (Tapahtuma.type != SDL_QUIT)
	{
		Hiiri = SDL_GetMouseState (&x, &y);
		
		if (x != ox || y != oy)
		{
			std::cout << x << ", " << y << '\n';
			oy, ox = x, y;
		}
		
		SDL_PollEvent (&Tapahtuma);
		SDL_Flip (Ruutu);
	}
	
	SDL_Quit();
}
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: C++ -kysymykset

Post by JATothrim »

SDL ohjaa cout:in ja printf:n omaan tulostusvirtaansa stdout.txt-tiedostoon exen viereen. :) Esikäsittelijän komento #undef main kiertää SDL:n tulostusvirta asetukset. Itse selvitin asian selaamalla SDL:n sorsat läpi. Ja coutin käyttäminen kannattaa.. vaikka se hieman opettelua vaatiikin. Mm. koordinaatti luokan tulostaminen virtaan on poskettoman nättiä. C:n tulostusfunktiot ovat jotain ihmeellistä. :lol:
EDIT:

Wintoosallahan minä.

Last edited by JATothrim on Wed Aug 26, 2009 8:28 pm, edited 1 time in total.
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: C++ -kysymykset

Post by Koodiapina »

JATothrim wrote:SDL ohjaa cout:in ja printf:n omaan tulostusvirtaansa stdout.txt-tiedostoon exen viereen. :)
Minulla ei ainakaan moista tee.

Code: Select all

#include <SDL/SDL.h>
#include <iostream>

int main (int argc, char **argv)
{
	SDL_Init (SDL_INIT_EVERYTHING);
	SDL_Surface *Ruutu;

	int Liput = SDL_HWSURFACE | SDL_DOUBLEBUF;
	Ruutu = SDL_SetVideoMode (320, 240, 32, Liput);

	for (int i=0; i<10; ++i)
		std::cout << i << '\n';

	SDL_Quit();
}
Image

Toisaalta en kyllä tee EXE:äkään. Puhutko nyt jostain järjestelmäkohtaisesta ominaisuudesta?
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 »

Grandi wrote:
JATothrim wrote:SDL ohjaa cout:in ja printf:n omaan tulostusvirtaansa stdout.txt-tiedostoon exen viereen. :)
Minulla ei ainakaan moista tee.

Code: Select all

#include <SDL/SDL.h>
#include <iostream>

int main (int argc, char **argv)
{
	SDL_Init (SDL_INIT_EVERYTHING);
	SDL_Surface *Ruutu;

	int Liput = SDL_HWSURFACE | SDL_DOUBLEBUF;
	Ruutu = SDL_SetVideoMode (320, 240, 32, Liput);

	for (int i=0; i<10; ++i)
		std::cout << i << '\n';

	SDL_Quit();
}
Image

Toisaalta en kyllä tee EXE:äkään. Puhutko nyt jostain järjestelmäkohtaisesta ominaisuudesta?
Varmaankin tämä on sitten ihan Windowsilla vaan, kun tunnetusti Winnaabit pelkäävät komentoriviä. Jos saisinkin joskus koneen johon voi asentaa linuxin... (Bash <3)
anttipanda
Active Member
Posts: 248
Joined: Mon Aug 27, 2007 9:23 pm
Location: Oulu

Re: C++ -kysymykset

Post by anttipanda »

Varmaankin tämä on sitten ihan Windowsilla vaan, kun tunnetusti Winnaabit pelkäävät komentoriviä.
O_o
Mm. koordinaatti luokan tulostaminen virtaan on poskettoman nättiä. C:n tulostusfunktiot ovat jotain ihmeellistä.
Sitä se stream-operaattorien totetuttaminen teettää.
OoO
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: C++ -kysymykset

Post by esa94 »

anttipanda wrote:
Varmaankin tämä on sitten ihan Windowsilla vaan, kun tunnetusti Winnaabit pelkäävät komentoriviä.
O_o
Mm. koordinaatti luokan tulostaminen virtaan on poskettoman nättiä. C:n tulostusfunktiot ovat jotain ihmeellistä.
Sitä se stream-operaattorien totetuttaminen teettää.
Vastaukseksi ilmeeseen, tarkoitin sitä, että wintoosalla SDL piilottaa oletuksena konsoli-ikkunan ja ohjaa stdoutin tiedostoon stdout.txt, koska harvempi naabimpi Windows-käyttäjä tietää komentorivistä paljon mitään.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: C++ -kysymykset

Post by MaGetzUb »

Toimiiko G++ kääntäjä Paremmin, kuin Dev C++? Devin kääntäjä tuntuisi olevan melko buginen.
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: C++ -kysymykset

Post by JATothrim »

*reps* Et oo näköjään tutkinu kovin paljoa kääntäjääsi... :lol: Dev-C++ IDE kääntää C++ koodisi juuri täsmälleen tuolla g++ ohjelmalla, joka siis kuuluu MinGW kääntäjään (tai GNU GCC, mistä MinGW on versio windowsille). Eli Dev-C++ käyttää kääntäjänä MinGW:tä. Sen sijaan totesin vuoden käytön jälkeen itse editorin olevan aiga buginen joten vaihdoin IDE:ä. :-/ Toivottavasti pahimmat bugit on korjattu, hyvä editori. Minulla sattuu juuri olemaan MinGW-4.40 kääntäjän uusin, käsityönä räältälöity paketti, toimii heti, eikä kohta. Voisin koettaa uploadata sen jonnekkin..
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: C++ -kysymykset

Post by SPuntte »

Pyydän anteeksi, jos tämän aiheen nostaminen aiheuttaa jollekulle henkisiä kärsimyksiä. Näin kuuitenkin asialliseksi postata tämän tänne:
Olen tässä nimenomaista kieltä opiskellessa tullut ajatelleeksi, miten viittaukset oikein toimivat. En tarkoita nyt syntaksia, vaan siis ihan kirjaimellisesti, konepellin alla.

Osoittimesta saa jotenkin paremmin otteen. Sillä on oma osoite, eli se sijaitsee muistissa. Siis oleellisesti kuluttaa muistia. Mutta jos luo osoittimen viittaukseen, tulee kyseisen osoittimen arvoksi sen muuttujan muistiosoite, johon viittaus viittaa. Siis viittauksen muistiosoite on sama kuin viitattavan muuttujan, eli viittaus on jossain mielessä sama kuin itse viitattava muuttuja. Silti viittaus mahdollistaa viitattavan muuttujan käsittelyn sen näkyvyysalueen ulkopuolelta - esimerkiksi funktiosta, jos viittaus viedään sinne argumenttina.

Osaako joku sanoa, miten tämä teknisesti toimii? Kuluttavatko viittaukset muistia? Ovatko ne turvallisuuden lisäksi osoittimia parempia myös suorituskyvyn kannalta? Ei sinänsä mikään vitaali tieto; haluaisin ihan uteliaisuudesta tietää.

Ja tässä vielä asiaa selventävä ohjelma, jos joku ei ymmärtänyt.

Code: Select all

#include<iostream>

#ifndef EXIT_SUCCESS
#define EXIT_SUCCESS 0;
#endif

using namespace std;

int  main()
{
    //Mielivaltainen muuttuja
    int muuttuja = 1337;

    //Viittaus
    int &rViittaus = muuttuja;
    int *pOsoitin_rViittaukseen = &rViittaus;

    cout << "Muuttujan arvo on " << muuttuja << " ja toista kautta haettuna myös " << rViittaus << endl;
    cout << "Muuttujan muistiosoite on " << &muuttuja << " eli sama kuin " << &rViittaus << endl;
    cout << "Myös viittauksen oma muistiosoite on " << pOsoitin_rViittaukseen << endl;

    cout << endl;

    //Osoitin
    int *pOsoitin = &muuttuja;
    int **pOsoitin_pOsoittimeen = &pOsoitin;

    cout << "Muuttujan arvo on " << muuttuja << " ja toista kautta haettuna myös " << *pOsoitin << endl;
    cout << "Muuttujan muistiosoite on " << &muuttuja << " eli sama kuin " << pOsoitin << endl;
    cout << "Osoittimen oma muistiosoite sen sijaan on " << pOsoitin_pOsoittimeen << endl;

    //Jos ohjelma vain vilahtaa ruudulla, poista kahden seuraavan rivin kommentointi
    //int turhaMuuttuja;
    //cin >> turhaMuuttuja;

    return EXIT_SUCCESS;
}
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
User avatar
Dibalo
Advanced Member
Posts: 298
Joined: Mon Aug 27, 2007 8:12 pm
Location: Espoo, Finland
Contact:

Re: C++ -kysymykset

Post by Dibalo »

SPuntte: tuo on mielenkiintoinen kysymys. Käsittääkseni joissain kielissä osoittimet ja viittaukset toimivat konepellin alla täysin samalla tavalla, mutta viittausten "API" on osoittimia siistimpi (eikä näin ollen tarjoa samanlaisia kikkoja). Konepellin alla muuttujiin siis joka tapauksessa osoitetaan muistiosoitteen kautta. Paikallisissa muuttujissa tämä tapahtuu suhteessa pohja-osoittimen tjsp (engl. base pointer) arvoon. Kirjoitan selvyydeksi pari riviä ASM-koodia:

Code: Select all

int x;
int* pX = &x;

x = 5;
*pX = 4;

; x "osoite" (offset) (e)bp:hen nähden -4
; pX offset bp:hen nähden -8
; pino kasvaa siis alaspäin

; pX = &x
mov eax, ebp
sub eax, 4       ; eax sisältää nyt x:n muistiosoitteen
mov dword ptr[ebp-8], eax    ; sijoitetaan muistiosoite pX:ään

; x = 5
mov dword ptr[ebp-4], 5    ; huomaa, että osoitin ja muuttuja ovat kumpikin aivan samanalaisia 32-bit lukuja, niihin pätevät samat operaatiot
; *pX = 4
mov eax, dword ptr[ebp-8]    ; haetaan pX:n arvo (joka on siis x:n osoite!) eax:aan
mov dword ptr[eax], 5     ; käytetään muistiosoitetta hyväksi ja sijoitetaan siihen arvo
On siis mahdollista, että viittaukset ja osoittimet toimivat pinnan alla samalla tavalla, MUTTA on myös mahdollista (ja jopa todennäköistä), että kääntäjä pyrkii optimoimaan viittauksien käyttöä. Kuten ylemmästä esimerkistäni näkee, voidaan ainakin paikallisia muuttuja varten viittaukset tallentaan käännöksen aikana vain symboleiksi, jotka korvataan oikealla offsetin arvolla näin nopeuttaen ohjelmaa ja vähentäen muistin kulutusta. Parametriviittaukset ovat sen sijaan hieman monimutkaisempia enkä keksi niihin näin äkkiseltään muuta vaihtoehtoa kuin toteuttaa samalla tavalla osoittimien kanssa. Jos haluat tutkia oikeasti näitä kannattaa lukea jonkun C++-kääntäjän tekemää assembly-koodia (esim Visual C++ antaa jopa debugata asm-koodia, kun valitsee debuggauksen aikana "show disassembly"-kohdan editorista).

Nämä tekstit on kirjoitettu pienessä aamupöhnässä, jotta jos virheitä löytyy, niin ilmoitelkaahan niistä. Voin korjailla vielä jälkeen päin. :)
The darkest spells can be found from
http://tunkkaus.blogspot.fi
Feuer
Devoted Member
Posts: 520
Joined: Tue Jun 16, 2009 11:13 am
Contact:

Re: C++ -kysymykset

Post by Feuer »

Saahan tätä ketjua käyttää samalla lailla kuin Ongelmat - alueen Tyhmät Kysymykset - ketjua? :)

Code: Select all

pilpo.hax0rnikki="Feuer";
tuottaa käännettäessä virheen
ISO C++ forbids assignment of arrays
kys. riviltä. Ja luokka, josta tuo olio on luotu, näyttää seuraavalta:

Code: Select all

class hakkerit
{
      public:
      char nimi[14];
      int ika;
};

class taitavat_hakkerit : public hakkerit
{
      public:
             
      char hax0rnikki[6];
};
Ja tosiaan taso on sitä että tiistaina löysin kipinän alkaa kielen opettelemisen...
Asus P8P67 LE/Intel Core i5 2500K/ GTX560/ 8GT RAM/750GT HDDt + 120GT SSD + 13" Macbook Pro
Blogi - Peräpohjola - MERPG
User avatar
Dibalo
Advanced Member
Posts: 298
Joined: Mon Aug 27, 2007 8:12 pm
Location: Espoo, Finland
Contact:

Re: C++ -kysymykset

Post by Dibalo »

Virheviestin suomentamalla: "taulukkojen sijoittaminen kielletty".
Yrität siis sijoittaa merkkijonotaulukkoa toiseen, ei hyvä. Tutustu mieluummin string-luokkaan ja käytä sitä. ;)
The darkest spells can be found from
http://tunkkaus.blogspot.fi
Post Reply