Archief - [prog]-[C++] link probleem in Visual C++

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Yngwie

Legacy Member
hellow gaste, normaal schrijf ik mijn c++ progs in dev-c++ maar omda ik van het school nu ook visual studio 6.0 heb, heb ik geprobeerd eens iets te doen met Visual C++. Ik heb dus op twee minute iets uber-basic geschreve om die IDE eens te testen en ik geraak ni voorbij een link-prob.

ik heb één hoofdfile met men main in => hoofdfile.cpp
en een extra file met een functie 'optellen' in => functions.cpp

nu als ik in mijn hoofdfile probeer die functions.cpp te linken geeft Visual C++ volgende error :

Code:
--------------------Configuration: Eerste project - Win32 Debug--------------------
Linking...
hoofdfile.obj : error LNK2005: "int __cdecl optellen(int,int)" (?optellen@@YAHHH@Z) already defined in functions.obj
Output/Eerste project.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.

Eerste project.exe - 2 error(s), 0 warning(s)

Als ik mijn .exe build met dev-c++ geeft hij geen errors en functioneert het programma normaal. Kan iemand mij helpen?

thx, Stef

killgore

Legacy Member
eh, staan die 2 bestanden in 1 project of link je handmatig (dus niet via ide :p)?

en zo ja: laat bron van beide bestanden eens zien ;).

Yngwie

Legacy Member
jup, twee bestanden staan in hetzelfde project. mijn source code volgt hier

hoofdfile.cpp
Code:
#include <iostream>
using namespace std;

#include <C:\Program Files\Microsoft Visual Studio\MyProjects\Eerste project\functions.cpp>

int main()
{
	int uitkomst;
	uitkomst = optellen(5, 6);
	cout << "De uitkomst van 5 + 6 = " << uitkomst << "\n";
	cin.get();
	cin.get();
	return 0;
}

functions.cpp
Code:
int optellen(int x, int y)
{
	int som;
	som = x + y;
	return som;
}

killgore

Legacy Member
omfg

oelang code gij al

bronbestanden include je NOOIT

wa ge dus best doet is dus nog een header maken:
functions.h

en daarin schrijfde enkel:
int optellen(int x, int y);

en die include dan in uw hoofdfile.cpp ipv die andere bronfile (in functions.cpp is het niet echt nodig te includen, hoewel ge het u best gewoon maakt en daar ook include ;)).

ook tip voor dergelijke headers waarin ge functies declareert, zet in het begin iets als:
#ifndef _HEADER_FUNCTIONS
#define _HEADER_FUNCTIONS
en op het einde van je header (onder alle code dus):
#endif

dit zal problemen voorkomen als je de header per ongeluk 2x include

edit, dus:
hoofdfile.cpp:
Code:
#include <iostream>
#include "functions.h"
using namespace std;

int main()
{
	int uitkomst;
	uitkomst = optellen(5, 6);
	cout << "De uitkomst van 5 + 6 = " << uitkomst << "\n";
	cin.get();
	cin.get();
	return 0;
}
functions.h
Code:
#ifndef _HEADER_FUNCTIONS
#define _HEADER_FUNCTIONS
int optellen(int x, int y);
#endif

functions.cpp:
Code:
#include "functions.h" //Niet noodzakelijk hier
int optellen(int x, int y)
{
	int som;
	som = x + y;
	return som;
}

Yngwie

Legacy Member
da van die bronbestanden linken wist ik dus ni :s
mja, heb al een jaar c++ op school mr omda de rest van de klas er ni mee overweg kan blijven we dus serieus steken op gewoon al functies gebruiken. Ik probeer een beetje op mezelf wat bij te leren omdat het op school te traag gaat. Vandaag heb ek weer wa bijgeleerd se.

merci. me die functions.h werkt het wel.

killgore

Legacy Member
mssch voor duidelijkheid: includen =/= linken he :)

bij het includen voeg jij een extra TEKSTbestand toe aan je broncode (meestal dus een headerbestand met de extensie .h, hoewel extensies niet uitmaken). Voor het compileren komt dan eigenlijk al die tekst die in je headerbestand staat op de plaats waar het geinclude wordt. Dus ookal zit alles in 20 headerbestanden & 1 bronbestand, voor het compilen wordt het uiteindelijk 1 bronbestand.

linken gebeurt in een ide vaak zonder dat je het echt weet. Dit is het omzetten van gecompileerde bronbestanden naar uw programma. Dit houdt dus ook in dat als je meerdere bronbestanden hebt deze in die stap worden samengevoegd om het programma te doen werken :).

Vich

Legacy Member
LOL @ Killgore

't Is dus duidelijk makkelijker om van coden naar gitaar spelen te gaan dan omgekeerd? :P

killgore

Legacy Member
Vich zei:
LOL @ Killgore

't Is dus duidelijk makkelijker om van coden naar gitaar spelen te gaan dan omgekeerd? :P
heb ik 1 of andere stomme opmerking gemaakt, zie niet echt in wat er anders zo grappig kan zijn :p?

edit: dunno over da gitaar ze, ik probeer al 2 weken lang is bij vriend te gaan om beke te lere spele, ma altijd al moeten uitstelle :p (kheb geen geld om me mom. zelf 1 te kopen)

Vich

Legacy Member
killgore zei:
heb ik 1 of andere stomme opmerking gemaakt, zie niet echt in wat er anders zo grappig kan zijn :p?
Euhm... ja:
omfg

oelang code gij al

bronbestanden include je NOOIT
Ik vond dat gewoon grappig :P

edit: dunno over da gitaar ze, ik probeer al 2 weken lang is bij vriend te gaan om beke te lere spele, ma altijd al moeten uitstelle :p (kheb geen geld om me mom. zelf 1 te kopen)
Ik zou je direct m'n akoestische lenen, als je niet zo ver weg woont ;)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan