» »

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?

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.

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.

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.

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.

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Code:Blocks, c++] Program ne najde knjižnice

Oddelek: Programiranje
111360 (1139) gtu
»

[C++]Uporaba strukture v drugi .cpp datoteki

Oddelek: Programiranje
143115 (2818) mallard
»

Qt Designer -> KDevelop C++ Error

Oddelek: Programiranje
352119 (1649) 'FireSTORM'
»

[c++]file read problem

Oddelek: Programiranje
151584 (1319) 'FireSTORM'
»

[C++] prevajalnik hoce konstruktor za strukturo

Oddelek: Programiranje
182594 (2298) Tr0n

Več podobnih tem