Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Ongelmia VC++ 2008:n kanssa

Tumpelo [02.03.2008 17:40:12]

#

Koitan nyt uupuneena kirjoitella ongelmani tänne, ties kuinka monen tuskaisan googletus- ja vianhakutunnin jälkeen. Ongelma on se, että heti kun yritän lisätä ohjelmaani luokan, alkaa kääntäjä valittamaan kaikista luokan funktioista että:

error LNK2005: "public: void __thiscall Navigation::MoveCoord(int)" (?MoveCoord@Navigation@@QAEXH@Z) already defined in main.obj

Jos poistan luokasta kaikki funktiot, se ei valita. Olen myös hakenut LNK2005 errorille ratkaisuja, mutta mikään ei ole auttanut. Multithreaded DLL on päällä jne jne. Mitään ei ole määritelty moneen kertaan, enkä includeta kuin tarvittavat SDL yms tiedostot. Luokka on heti koodin alussa, eikä sen paikan muuttaminen auta asiaan.

Tuosta löytyy koodin alkuosa: http://pastebin.com/m4339c5e7

Vianhakua ajatellen olen sieltä poistanut kaikki hienoudet ja ylimääräiset includetukset, joten ei tarvi winetä.

Luokan jälkeen tulee pari funktion määrittelyä ja sitten alkaakin jo main.

Metabolix [02.03.2008 18:00:43]

#

Koodi sinänsä on aivan epäolennaista. Olennaista on sen sijoittuminen eri tiedostoihin. Jos funktiot ovat luokan ulkopuolella (kuten sinulla), ne käännetään aivan samalla tavalla kuin kaikki muutkin funktiot, jolloin niiden täytyy tietenkin sijaita vain yhdessä käännettävässä tiedostossa, ei siis luokan otsikkotiedostossa. Eihän main-funktiotakaan voi määritellä useassa tiedostossa, vaikka funktio sinänsä olisikin sama.

Mitään muuta mahdollista virhettä ei tähän hätään tule mieleen, joten tarkistapa koodin sijoittelu (vai onko kaikki yhdessä tiedostossa?) ja se, ettei ole mitään funktiota tuplana.

Kokeile myös main.obj-tiedoston poistamista siltä varalta, että kyseessä onkin jokin kääntäjän/IDEn "ominaisuus".

Tumpelo [02.03.2008 18:06:30]

#

Laitoin nuo kaikki samaan tiedostoon väliaikaisesti jo aikoja sitten, ja kuten sanottu, ei siellä pitäisi minkään funktion esiintyä tuplana. Kaikki includetuksetkin näkyy tuossa koodinpätkässä...

Myös obj-tiedostojen poistoa kokeiltu, no use.

EDIT:

Ratkaistu! Siirsin luokan funktiot suoraan luokan sisälle. Nyt pelittää, mutta olisi kiva tietää miksei funktioita voinut sijoittaa luokan ulkopuolelle...

pieslice [04.03.2008 21:19:51]

#

Itselläni oli joskus vastaavia, mutta koitapa ottaa täppä "precompiled headers" pois projektin asetuksista, josko linkitysongelmat sillä ratkeaisivat?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta