Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Omituinen virhe toimivassa koodissa

DumTom [28.01.2011 06:04:03]

#

Jatkoin pitkästä aikaa projektia ja nyt kääntäjä tai siis linkkeri heittää tämmöstä toimivaan koodiin. Missä voisi olla vika?

.objs\main.o:main.cpp|| undefined reference to `Tapahtumat()'|
.objs\main.o:main.cpp|| undefined reference to `Tapahtumat()'|
.objs\main.o:main.cpp|| undefined reference to `Tapahtumat()'|
.objs\main.o:main.cpp|| undefined reference to `Tapahtumat()'|
.objs\main.o:main.cpp|| undefined reference to `Tapahtumat()'|
.objs\main.o:main.cpp|| more undefined references to `Tapahtumat()' follow|
||=== Build finished: 6 errors, 0 warnings ===|

Teuro [28.01.2011 07:01:40]

#

Yrität kutsua funktiota 'Tapahtumat()', joka on (mahdollisesti) esitelty, mutta sitä ei ole määritelty. Lisää funktion määrittely ennen kutsua. Muuta on melkeinpä mahdoton sanoa ilman koodin katsomista.

Metabolix [28.01.2011 08:39:20]

#

Teuro, menivätkö termit nyt juuri väärin päin? Määrittely on se funktion sisältö, esittely on pelkkä prototyyppi.

DumTomin ohjaisin C++-oppaan pariin, asiat ovat samat kuin C:ssä.

Teuro [28.01.2011 17:21:06]

#

Tarkoitin tällaista koodia, jossa on esittely ennen mainia. Vai menikö nyt sittenkin vielä väärin?

#include <iostream>

int kertoma(int n);

int main() {
	std::cout << kertoma(2) << std::endl;
    return 0;
}

Tämä tuottaa juuri tuon undefined reference linkkausvirheen. Lisäämällä funktion määrittelyn virhe poistuu.

#include <iostream>

int kertoma(int n);

int main() {
	std::cout << kertoma(2) << std::endl;
    return 0;
}

int kertoma(int n) {
	return (n * n);
}

Tarkoitus ei ole aloittaa kinaamista, vaan selkeyttää ajatuksia tuon edellisen kirjoituksen takaa. Termit menivät minusta kuitenkin ihan oikein.

Chiman [28.01.2011 17:22:43]

#

Ylläolevassa koodissa sinulla on kuitenkin määrittely (rivit 10-12) vasta kutsun jälkeen (rivi 6). Se on ok, koska esittely (rivi 3) on tehty ennen kutsua.

Metabolix [28.01.2011 17:25:28]

#

Teuro: Valitin näköjään aamusella vähän väärästä asiasta. :) Vika ei ollutkaan termeissä sinänsä vaan oudossa ohjeessa. Jos funktion esittely on oikeassa paikassa, määrittelyn ei tarvitse olla ennen kutsua vaan sen voi lisätä yhtä hyvin vasta kutsun jälkeen, kuten Chiman yllä taitaakin juuri sanoa. (Tuon outouden takia ehkä luin viestistä loputkin kohdat hassusti.)

DumTom [28.01.2011 17:27:43]

#

Virhe oli sangen simppeli mutta yllättävä,jostain syystä short Tapahtumat(void){return 0;} puuttui koodista kokonaan..... Itse funktio löytyi varmuuskopiosta. Saatanan pitkä funktio ja mulla ois menny ikuisuus kirjottaa se uudestaan...Kaikkee sitä sattuu kun väsyneenä koodaa....Red Bull Rules????

Vastaus

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

Tietoa sivustosta