Moro, oon alotellu harjottelee C++ ohjelmointia, mutta ongelmana on, etten jostain syystä pysty compiloimaan mitään. Painan Compile (Tai Ctrl+F9), niin välähtää joku ikkuana ja ei tapahdu mitään. Compile logeista näkyy, että on yksi virhe:
Compiler: Default compiler
Building Makefile: "C:\Documents and Settings\Omistaja\Omat tiedostot\Dev-Cpp\LScript\Makefile.win"
Executing make...
make.exe -f "C:\Documents and Settings\Omistaja\Omat tiedostot\Dev-Cpp\LScript\Makefile.win" all
Execution terminated
Osaako joku auttaa mut aluilleen? =)
laita sinne loppuun system ("PAUSE");
Tai sano kääntäjälle ettei se saa sulkea termistä.
http://pp.kpnet.fi/blaze/codefaq/#justflashes
system("PAUSE") ei ole oikea tapa (vaikka se ei pienissä opetteluohjelmissa paljoa haittaa), sillä se olettaa, että PATH:issa on ohjelma nimeltä PAUSE. Minulla tuollainen sanoo: "bash: PAUSE: command not found".
kayttaja-4976 kirjoitti:
Tai sano kääntäjälle ettei se saa sulkea termistä.
Miten? En tiedä yleisesti muutenkaa tästä kääntämis systeemeistä paljoo... Oon nii paljon webohjelmointiin, ettei tämmönen käytännössä ohjelmien ohjelmointi suju hyvin (compiloidaan ja haetaan kirjastoja yms.) Löytyykö hyvää persteellista suomalaista opasta compiloimisesta?
Sitä ohjelmaa ei siis oo compiloituna mun mielestä missään, et se välähtävä ikkuna oli joku ihme juttu mite ite en tiiä.....
Kokeilitko nyt tuota system("pause")-komentoa? Sitä varten sinun täytyy koodissasi ottaa includella mukaan stdlib.h. Jos mitään virheilmoituksia ei tule (kuten tuossa ei kai tullut), niin ohjelman pitäisi kyllä olla olemassa, eli tarkistapa vielä uudestaan. Hassua, ettei tuossa näkynyt yhtään kooditiedoston käännöskomentoa, muistaakseni Dev-C++ näyttää nekin. Onhan kooditiedostosi varmasti osa projektia?
Ei onnistu. Siinä muuten vilahti Compile progress -ikkuna... Eli se käytännössä vaan reportoi on saman paskan...
Ja koodissakaan ei pitäis olla vikaa (conioo tarviin myöhemmin, mutten usko että se erroria antais turhasta hausta):
#include <stdio.h> #include <conio.h> #include <stdlib.h> int main(void) { printf("Marsu on paskaperse!"); system("PAUSE"); return 0; }
getch();
ton system(pausen) tilalle saattaa auttaa.
Ei auta...
Jos windowsissa asustat niin ota vaikka nuo stdlib.h ja conio.h pois. Tuohon HelloWorldiin riittää pelkkä stdio.h tai sit sä oot säätänyt jotain ihan omiasi.
EDIT: ja mitä sä oot kääntäjän asetuksiin laittanut?
Mikset vain mene komentorivillä hakemistoon, jossa ohjelma on ja sitten kirjoita sen nimeä? :o
mulla ei ainakaan pidä olla
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
vaan riittää että on
#include <iostream.h>
osku91 kirjoitti:
mulla ei ainakaan pidä olla
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
vaan riittää että on
#include <iostream.h>
Ei se printf kyllä ole iostreamissa. Ja .h-päätteinen iostream on vanhentunut.
No onko sillä tosiaan merkitystä kompiloinnin epäonnistumiseen?
kayttaja-4976, en tiiä compile-settingseistä mitään. Ne on perusasetuksilla...
En ymmärrä, miten Dev-C++:n käyttäjillä voi olla ongelmia kääntämisessä, mutta ehkäpä se sitten toimii salaperäisesti aivan eri tavalla muilla kuin minun koneellani. ^^ No mutta suosittelen kuitenkin, että opettelet komentorivin käyttöä ja alat kääntää ohjelmiasi sitä kautta. Silloin opit käyttämään kääntäjää ja voit vaikka väsätä jossakin vaiheessa omat käännösskriptit tai jotain.
Järjestä siis niin, että kääntäjäohjelma on polussa.
SET PATH=C:\Dev-C++\bin;%PATH%
Sitten käännä ohjelmasi.
g++ koodi.cpp -o ohjelma.exe
Ja aja se.
ohjelma.exe
Mitä tässä nyt oikein hösätään? Nuo vihoviimeiset PAUSE-ehdotukset ja header-korjaukset eivät vissiin liity millään lailla tähän ongelmaan, eihän tässä edes ole päästy siihen asti, että käännettyä ohjelmaa jotenkin ajettaisiin.
Kääntäminenkö siis ei onnistu? Mulla ei ole samaa kääntäjää, mutta yleensä homma menee kyllä niin, että käännös joko onnistuu tai sitten se epäonnistuu niin, että siitä tulee jokin virheilmoitus. Onko tosiaan niin, että lopputuloksena on pelkästään "Execution terminated"? Jos tuo on todellakin kaikki, mitä millekään ruudulle tai lokiin ilmaantuu, Dev-C++ on varmaankin puutteellisesti asennettu.
Dev-C++ muistaakseni kääntää sorsat uudessa ikkunassa. Jos sinne ei tuu mitään missä lukisi "Error" niin luulisi kääntämisen onnistuvan. Unohtuiko että ohjelma pitää myös ajaa? Aika merkillisesti toimiva laite jos et toimi niin kuin muilla.
Metabolixin ideaa "konsolista kääntäminen" on suorastaan ihanaa, mutta kun alla on Winukka, niin en sitten millään suostu leikki jonkin alkeispaskan MS-DOSIA.... Linuxia käyttäisin, mutta on ohjelmia, joita käytän päivittäin ja niitä ei saa toimimaan täysin Linukassa..... Joten winukkaan haluun käyttää tätä graafista käyttöliittymää pelkästään...
Koo, kyllä. Siinä lukee perässä "Execution terminated"... En tiiä yhtään onko puutteellisesti asennettu, mutta Visual C++ kun yritin kääntää yhtä sourcee dll-kirjastoon, niin se valitti jotain että windows.h puuttuu, siihen joku heitti jotain, että hae Windows Server 2003 .net Platform SDK, tai jotain... Liittyiskö tää asiaan?
kayttaja-4976, erillinen ikkuna kyllä tulee ja menee (prosessi kestää 5ms =) Sitten ei voi muuta kun kattoo sinne mihkä lie compile log ikkunaan... Mitä tarkotat, että ohjelma pitää ajaa?
Käynnistä->Suorita->cmd
¯\(º_o)/¯
No johan nyt. "En voi tehdä sitä haluamallani tavalla, niin en sitten suostu tekemään."
VC++ Express vaatii Platform SDK:n. Dev-C++ ei vaadi. Ajaminen tarkoittaa, että ohjelma pitäisi käynnistää myös. Painapa pelkkää F9:ä, niin se muistaakseni sekä kääntää että ajaa. Eihän kääntäessä ohjelman kuulukaan käynnistyä.
Metabolix kirjoitti:
Painapa pelkkää F9:ä, niin se muistaakseni sekä kääntää että ajaa. Eihän kääntäessä ohjelman kuulukaan käynnistyä.
Juuri niin! Etkö tiedä että ohjelma pitää ajaa? o/ Siellä on jossain Build-valikossa "Execute" tjsp. Klikkaa sitä.
Ei se mitään aja, ja eikä pysty kääntämään, edelleen... Ilmottaa compile logeissa ylläolevan tekstin ja ei näy exe-tiedostoo missään...
No jos suosiolla lopetan C++:aan tutustumisen =/
Ihan varmuuden vuoksi, oletko kokeillut komentoa Build komennon Compile sijaan ja sitten sen jälkeen etsit sitä valmista exeä. Jospa tuo Dev-cpp avuliaasti poistaa exen compile+runin jälkeen. Ja jos se pelkällä compilella jättää linkkaamisen sikseen eli tuottaa pelkän objektitiedoston.
Pistä sinne loppuun:
cin.ignore(1000, '\n').ignore(1000, '\n');
Dev-C++:n kanssa on ollut aikojen kuluessa ongelmia yhdellä jos toisellakin. Monta surullista tarinaa löytyy haulla. Minun tietääkseni mitään kunnon ratkaisua ei ole keksitty, eli on lähinnä onnenkauppaa, toimiiko Dev-C++ omalla koneella vai ei. Toki on paljon niitäkin, joilla Dev-C++ toimii alusta alkaen moitteettomasti. Valitettavasti en osaa auttaa enempää, kun satun kuulumaan jälkimmäiseen ryhmään.
Hmm. Nyt näyttäis toimivan aika hyvin... Asensin nelosversion... Toi uusin beta ei todennäkösesti ollu yhteensopiva mun koneen kanssa... Kiitoksia silti tuesta ja vaivasta =)
"Uusin beta" on jo pari vuotta vanha. Eipä taida tuokaan ohjelma enää paljon kehittyä.
Metabolix kirjoitti:
Kokeilitko nyt tuota system("pause")-komentoa? Sitä varten sinun täytyy koodissasi ottaa includella mukaan stdlib.h. Jos mitään virheilmoituksia ei tule (kuten tuossa ei kai tullut), niin ohjelman pitäisi kyllä olla olemassa, eli tarkistapa vielä uudestaan. Hassua, ettei tuossa näkynyt yhtään kooditiedoston käännöskomentoa, muistaakseni Dev-C++ näyttää nekin. Onhan kooditiedostosi varmasti osa projektia?
Istelläni ainakin toimii tuo Dev-Cpp, joten olisikohan tämä sitä, mistä Antti mainitsi..
Mutta esim. tällainen ohjelma toimii moitteettomasti, vaikka ei komentoriviltä avaisikaan ja ei olisi tehnyt Projectina ja puhtaana lähdekoodina:
# include <iostream> using namespace std; # include <stdio.h> int main() { puts("Nyt tulostuu tekstii!!"); system("PAUSE > nul"); system("CLS"); system("ECHO Bat-tyyliin..."); system("ECHO."); system("PAUSE"); return 0; }
Missä iostream noita system-komentoja varten.
Kentti kirjoitti:
Mutta esim. tällainen ohjelma toimii moitteettomasti
Voi ei! Kyllä mullakin toimii vatupassilla naulaaminen ihan moitteettomasti, mutta koska tajuan naulaamisesta jotakin, en pidä sitä oikein malliratkaisuna.
Oikea tapa tämän vilautteluonglman hoitoon on se, että konffaa työkalun niin, että ajon jälkeen ikkuna ei heti sulkeudu. Jos tämä on mahdotonta, kannattaa työkalu ensin kirota perimmäiseen hornan tuuttiin, sitten itkeä kurjaa kohtaloa, ja vaihtaa työkalua tai muuttaa ohjelman logiikkaa niin, että loppuun pari tulee pari ylimääräistä lukukomentoa odottamaan käyttäjän enteriä.
Jos homman meinaa tehdä C++:lla, sypressin ehdottama cin.ignore
-temppu on erinomaisen hyvä hätäkeino ja se vaatii, että koodissa on #include <iostream>
. Huom: Älkää enää kaupatko iostream.h
:ta!
Jos meinaa tehdä DOS-riippuvaista huttua, niin siitä vain sitten käyttämään tuota system
-funktiota ja dossin PAUSE
-komentoa. Heikki kyllä aika selvästi sanoi, mikä siinä voi mättää. Metabolix kertoi oikean include-tiedostonkin nimen, vaikka C++:ssa cstdlib
onkin suositeltavampi.
Se, että Kentin koodi toimii, on ihan kiva yhteensattuma. C++-headerit voivat includoida toisia headereita, mutta siitä ei ole mitää takeita. Voipa olla niinkin, että koska Dev-C++ toimii välillä kuin vanha romu, se nyt vaan sallii system
-funktion käytön, vaikkei mikään headeri sitä esittelisikään.
koo kirjoitti:
Voipa olla niinkin, että koska Dev-C++ toimii välillä kuin vanha romu, se nyt vaan sallii system-funktion käytön, vaikkei mikään headeri sitä esittelisikään.
Tuo Dev-Cpp kyllä toimii silloin tällöin hieman arveluttavasti, mutta toimii loistavasti harjoitteluun.
Ja se ei muuten salli system()-komentoa, ellei iostreamia ole sisällytetty :)
Niissä tapauksissa se käännettäessä heittää herjan.
Nyt olet kuule Kentti väärässä. Miten luulet, että C-ohjelmassa voisi käyttää system-funktiota, kun eihän C:ssä ole iostream-otsikkoa? Oikea otsikko on edelleenkin stdlib.h eli C:ssä cstdlib, ja vaikka iostream sattuukin tuossa tapauksessa ilmeisesti myös sen liittämään, iostream ei silti ole oikea otsikko tuohon. Ja itse käännöksen toiminnassa ja toimimattomuudessa on takana mingw32 eli GCC, joka on kyllä sinänsä varsin hyväksi todettu kääntäjä.
(Ja aika kumman pätkän lainasit tuossa aiemmassa viestissäsi, eihän se puhunut mitään Dev-C++:n toimimattomuudesta. ^^)
Aihe on jo aika vanha, joten et voi enää vastata siihen.