Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  7 1022
Jeg har et prosjekt bestående av flere filer, blant annet
main.cpp
debug.cpp
itembase.cpp
itembase.h
display.h

Problemet er at selv om jeg har følgende kode:

Kode

#ifndef DISPLAY_H
#define DISPLAY_H
-code-
#endif
og tilsvarende i alle header-filene får jeg denne feilen når jeg prøver å compile:

Kode

  multiple definition of `clear()' 
  first defined here 
  ld returned 1 exit status 
 D:\Dragon 2\Makefile.win [Build Error]  ["Dragon] Error 1
De to første linjene gjentar seg med alle forskjellige funksjoner. Problemet er at når jeg trykker på feilen blir jeg ikke tatt til noe sted i dokumentet, som om programmet ikke vet hvor feilen er.
Er du sikker på at du ikke har oversett noen externs og på den måten deklarert samme sak to ganger ;o ? Ta også en ekstrasjekk på scope -- om problemet vedvarer kunne du jo lagt ved prosjektet så vi kunne tatt en grundigere titt.
Sist endret av John B; 20. desember 2006 kl. 17:51.
▼ ... noen uker senere ... ▼
Sykt word.
Pantheon's Avatar
Trådstarter
Jeg har prøvd å løse feilene uten suksess. Jeg har lagt ved prosjektet her, det er lagd i siste versjon av Dev C++. Feilene står i comments nederst i main.cpp.
Oki, mekka litt på det der, og det var noen feil, du kan prøve å sjekke koden med det jeg poster her.


Og se på forandringene jeg gjorde ikke ta deg for nær av kommentarene jeg bruke
Sykt word.
Pantheon's Avatar
Trådstarter
Så ikke så mye av endringene du hadde gjort, men jeg leste kommentarene dine, og jeg er enig, men jeg tror jeg har fått forklart extern feil. Husk at alt jeg kan om C++ er selvlært gjennom prøving og feiling, jeg har aldri fått forklart hva som er "Riktig" måte å gjøre ting på og slikt.

edit: Og den compiler fortsatt ikke. Samme feil.
fiksa feilen din litt mere nå da

player.h & display.h var feil, skulle kanskje ikke bare ha brukt notepad i 2min

Jeg måtte også legge til et par header filer for å sjekke at saken virkelig kompilerte, mest sansynlig fordi jeg bruker Visual Studio pakken

Display.h:
#include <time.h>
#include <limits>
▼ ... over en uke senere ... ▼
Sykt word.
Pantheon's Avatar
Trådstarter
Denne fungerte å compile. Beklager for litt sent svar.

Jeg har ett par spørsmål: Jeg fikk inntrykk av en annen her på forumet at om jeg har deklarert en funksjon i en annen fil (f. eks en header) så må jeg deklarere den med extern i de andre filene for å fortelle at det er en funksjon fra en annen fil. Men dette er da feil.

Hvorfor må de funksjonene være inline?
Siden du lager funksjonen i header fila (ikke bare deklarerer funksjonen) må den deklareres inline, så ikke c compiler funksjonen inn i hver objekt fil, noen som vil føre til at du har samme funksjonsnavn (med samme parametere) i flere objekter, noe som ikke går i C/C++ verden.

extern specifies that the variable has static duration (it is allocated when the program begins and deallocated when the program ends). The variable or function may be defined in another source file, or later in the same file. Declarations of variables and functions at file scope are external by default.
Vis hele sitatet...
Mere info i klikkbart format