Forum » Programiranje » C++ funkcije - več datotek
C++ funkcije - več datotek
![](https://static.slo-tech.com/stili/avatar_gray.gif)
Madmax_ ::
Pozdravljeni!
Imam en problem pri enem začetniškem programu Imam 3 datoteke, ki so med sabo povezane.
Problem je, da main.cpp prevajalnik NE more prevesti in javi napako: In function 'main'
[Linker error] undefined reference to 'kvadrat(int)'
A kdo ve v čem je problem oz. kaj storiti??
lp in hvala za odgovore
Imam en problem pri enem začetniškem programu Imam 3 datoteke, ki so med sabo povezane.
1.kvadrat.h - prototip funkcije int kvadrat(int); 2.kvadrat.cpp - definicija funcije #include "kvadrat.h" int kvadrat(int x) { return x*x; } 3.main.cpp - program za izracun kvadratov stevil #include <iostream> using namespace std; #include "kvadrat.h" main(){ for(int i=1;i<=10;i++){ cout << kvadrat(i)<< endl; } system("pause"); return 0; }
Problem je, da main.cpp prevajalnik NE more prevesti in javi napako: In function 'main'
[Linker error] undefined reference to 'kvadrat(int)'
A kdo ve v čem je problem oz. kaj storiti??
lp in hvala za odgovore
- spremenil: Madmax_ ()
![](https://static.slo-tech.com/stili/avatar_gray.gif)
smoke ::
v main fajlu nimas definirane kvadrat funkcije? dodal si samo prototip, koda funkcije pa je v kvadrat.cpp ki pa ni vkljucen.
Zgodovina sprememb…
- spremenil: smoke ()
![](https://static.slo-tech.com/stili/avatar_gray.gif)
Madmax_ ::
Ja, sem dodal #include "kvadrat.cpp" v main fajlu, pa zdaj dela. Hvala za odgovor in lep pozdrav.
![](https://static.slo-tech.com/stili/avatar_gray.gif)
fiction ::
Ja, sem dodal #include "kvadrat.cpp" v main fajlu, pa zdaj dela. Hvala za odgovor in lep pozdrav.
Dela mogoce ze, ampak to ni nacin kako naj bi se vse skupaj uporabljalo.
g++ -o program main.cpp kvadrat.cpp bi (najbrz) delalo.
Header includas zato, da dobis deklaracijo (prototip funkcije). Zato da prevajalnik, ko pride do kvadrat() ve kaj to sploh je. Ne rabis pa same definicije znotraj main.cpp.
V drugi datoteki je ravno zato, da je locena od main-a in ni treba tudi main.cpp
na novo prevajati, ko se spremeni kvadrat.cpp. Pri tvojem nacinu pa itak to vsebino "skopiras" v main.cpp.
Pri cemer v C-ju sploh ni treba da includas tisti .h file pa bo delalo, medtem ko je C++ malo bolj strikten glede tega in mora ze prevajalnik vedeti za kaksno funkcijo gre. C bo enostavno rekel klic neke funkcije, ki je ne poznam (warning), datoteka pa je se vedno sintakticno pravilna, medtem ko bo C++ prevajalnik to smatral kot error.
Sele povezovalnik (linker) bo, ko bo hotel narediti izvrsljiv program, zanimalo kje
je tista kvadrat() koda in ce res obstaja kaksna main() funkcija. Torej moras takrat
zagotoviti, da bo dobil vse potrebne datoteke kot vhod. Za take fore je Makefile, kjer vse skupaj opises, da se ob spremembi ene datoteke samo tista na novo prevede in ponovno pozene povezovanje. Ker je popravljanje make datoteke lahko precej zamudno, imas v razvojnih okoljih koncept "projekta", kjer samo dodas datoteke in potem sistem sam skrbi za take stvari.
Aja pa system("pause"); je slabo. Neprenosljivo, nevarno in grdo.
![](https://static.slo-tech.com/stili/avatar_gray.gif)
Madmax_ ::
Vse 3 datoteke sem dodal v nov project. In zdaj main fajl ne potrebuje #include "kvadrat.cpp", da deluje. Hvala za obširno pojasnilo.
lp
lp
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | JavaOddelek: Programiranje | 1300 (668) | 123mg |
» | Neznan problem #2 [C]Oddelek: Programiranje | 1703 (1493) | videc |
» | Java zvezdice - malo drugačeOddelek: Programiranje | 2348 (2150) | Leyla_ |
» | Vmesnik v JaviOddelek: Programiranje | 2302 (2085) | Camel |
» | C++ in en začetniški problemOddelek: Programiranje | 1205 (1074) | Person |