Forum » Programiranje » problem pri linkanju c++
problem pri linkanju c++
atasmrk ::
tkole zgleda vsa stvar:
mamo en kniznica.h fajl z definicijami podatkovnih struktur in funkcij, ki se nahajajo v kniznica.cpp. ta kniznica.cpp more met u prvi vrsti #include "kniznica.h" da dela, a ne? No, pol mamo pa se en fajl Main.cpp, kjer tudi pise #include "kniznica.h", da lohk te funkcije uporabim.
Do sem vse prav, ne? no v tem Main.cpp imamo samo main funkcijo, ki samo vrne 0 in nic drugega. Compiler pa vrne "main.obj: errorNK2005 [ime ene spremenljivke iz knjiznica.h] already defined in knjiznica.obj.
Kva bi lohk blo narobe? Se kermu kej sana?
mamo en kniznica.h fajl z definicijami podatkovnih struktur in funkcij, ki se nahajajo v kniznica.cpp. ta kniznica.cpp more met u prvi vrsti #include "kniznica.h" da dela, a ne? No, pol mamo pa se en fajl Main.cpp, kjer tudi pise #include "kniznica.h", da lohk te funkcije uporabim.
Do sem vse prav, ne? no v tem Main.cpp imamo samo main funkcijo, ki samo vrne 0 in nic drugega. Compiler pa vrne "main.obj: errorNK2005 [ime ene spremenljivke iz knjiznica.h] already defined in knjiznica.obj.
Kva bi lohk blo narobe? Se kermu kej sana?
mile ::
v kniznica.h ti manjka en define
#ifndef KNJIZNICA_H #define KNJIZNICA_H vsebina tega headerja #endif
atasmrk ::
Ne, to sm mu, v sicer malo drugacni obliki, pa tud v predlagani ne spila. Se zmerej isto. Sem pregledal vse fajle v projektu, pa ga nikjer ponovno ne definiram, razen tistga dvojnega includa jasno. Poleg tega dobim napako samo za eno spremenjivko, u hederju jih je pa za blejsk jezer. Razen, ce linker samo ta prvo napako javi in je potem tiho.
rasta ::
> definicijami podatkovnih struktur in funkcij,
> ime ene spremenljivke iz knjiznica.h
Imaš v knjižnjici samo definicije ali tudi deklariraš spremenljivke?
Ker če spremenljivke ne deklariraš lokalno (namespace ali static), je seveda napaka, ker imaš v programu dve globalni spremenljivki z enakim imenom.
> ime ene spremenljivke iz knjiznica.h
Imaš v knjižnjici samo definicije ali tudi deklariraš spremenljivke?
Ker če spremenljivke ne deklariraš lokalno (namespace ali static), je seveda napaka, ker imaš v programu dve globalni spremenljivki z enakim imenom.
atasmrk ::
Ok, tkole mam:
mau preprocesorja
int stevec;
struct loto
{
..int stevilka1;
..int stevilka2;
..int stevilka3;
}
in pol naprej prototipi funkcij.
A je s tem kej narobe?
Mater sm zelen.
mau preprocesorja
int stevec;
struct loto
{
..int stevilka1;
..int stevilka2;
..int stevilka3;
}
in pol naprej prototipi funkcij.
A je s tem kej narobe?
Mater sm zelen.
atasmrk ::
Ugotovu. Trko kokr je rasta reku, mu sm definirano eno spremenljivko: int stevec; dopolnil do typedef int stevec; in stvar zdejle spila. sam upam, da to ni srecno naklucje, da spila
mater sm zelen.
mater sm zelen.
rasta ::
typedef int stevec; doda samo nov alias za tip int. Ne predstavlja pa to nobenega mesta v pomnilniku.
Če želiš uporabljati eno globalno spremenljivko v programu, jo v enem modulu (v .cc datoteki) deklariraj normalno, drugje pa daj spredaj še direktivo extern.
Boljša rešitev je, pa da jo podajaš kot parameter funkciji, katero kličeš iz drugega modula.
Če pa imaš veliko skupnih spremenljivk, bi se lahko vprašal, zakaj ne bi dal vse v samo eno datoteko.
Sicer pa se sploh v C++ izogibaj nepotrebnih globalnih spremenljivk.
Če želiš uporabljati eno globalno spremenljivko v programu, jo v enem modulu (v .cc datoteki) deklariraj normalno, drugje pa daj spredaj še direktivo extern.
Boljša rešitev je, pa da jo podajaš kot parameter funkciji, katero kličeš iz drugega modula.
Če pa imaš veliko skupnih spremenljivk, bi se lahko vprašal, zakaj ne bi dal vse v samo eno datoteko.
Sicer pa se sploh v C++ izogibaj nepotrebnih globalnih spremenljivk.
atasmrk ::
Ne, ne, mi je to, kar imam sedaj cisto vsec. Ne nucam ene globalne spremenljvke, nucam sam ime za to spremenljivko. in ta typedef nardi glih to, ne? No, kokrkol, hvala vama
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [Code:Blocks, c++] Program ne najde knjižniceOddelek: Programiranje | 1373 (1152) | gtu |
» | [C++]Uporaba strukture v drugi .cpp datotekiOddelek: Programiranje | 3137 (2840) | mallard |
» | Qt Designer -> KDevelop C++ ErrorOddelek: Programiranje | 2129 (1659) | 'FireSTORM' |
» | [c++]file read problemOddelek: Programiranje | 1600 (1335) | 'FireSTORM' |
» | [C++] prevajalnik hoce konstruktor za strukturoOddelek: Programiranje | 2643 (2347) | Tr0n |