Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Jonkin tapainen link-errori

tkok [07.06.2010 13:24:20]

#

Moi,
Jotain itselle käsittämätöntä visual studio c++ juttua. Jokin LNK-error eli ilmeisesti jokin linkki errori? en vielä ole sisällä tässä mvc käytössä.
Löytyisikö täältä apuja.

Koodit ja errorit listattuna:

Apf2.cpp

#include "Pathfinder.cpp"
#include <iostream>

int main()
{
	int xzz = ApfTest();
    return 0;
}

pathfinder.cpp

//simple Apf

#include <stdlib.h>
#include <malloc.h>
#include <math.h>

// datatype in lists are SquareNode type:
struct SquareNode
{
	//own parent
	SquareNode* oParent;
	//cost calcuting variables
	long oF;
	long oG;
	long oH;
	//position variables
	long oX;
	long oY;
};

class ApfList{
public:
	ApfList();
	~ApfList();
	void MoreMem(int i);
	void Add(SquareNode d);
private:
	//Place to have
	SquareNode *list;
	long len;
};

ApfList::ApfList()
{
	len = 0;
	list = (SquareNode*) malloc(len * sizeof(SquareNode));
}

ApfList::~ApfList()
{
	delete [] list;
}

void ApfList::MoreMem(int i)
{
--
}

void ApfList::Add(SquareNode d)
{
--
}

int ApfCalcH(int ax,int ay,int cx,int cy){
- -
}

bool walkable[1000][1000];

//Global lists

ApfList openList;
ApfList closeList;



int ApfTest(){
	struct SquareNode node;
	node.oF = 20;
	openList.Add(node);
	return 0;
}
1>------ Build started: Project: Apf2, Configuration: Debug Win32 ------
1>  stdafx.cpp
1>  Apf2.cpp
1>  AssemblyInfo.cpp
1>  Generating Code...
1>stdafx.obj : error LNK2005: "public: __thiscall ApfList::ApfList(void)" (??0ApfList@@QAE@XZ) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "public: __thiscall ApfList::~ApfList(void)" (??1ApfList@@QAE@XZ) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "public: void __thiscall ApfList::MoreMem(int)" (?MoreMem@ApfList@@QAEXH@Z) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "public: void __thiscall ApfList::Add(struct SquareNode)" (?Add@ApfList@@QAEXUSquareNode@@@Z) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "int __cdecl ApfTest(void)" (?ApfTest@@YAHXZ) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "public: __thiscall ApfList::ApfList(void)" (??0ApfList@@$$FQAE@XZ) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "public: __thiscall ApfList::~ApfList(void)" (??1ApfList@@$$FQAE@XZ) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "public: void __thiscall ApfList::MoreMem(int)" (?MoreMem@ApfList@@$$FQAEXH@Z) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "public: void __thiscall ApfList::Add(struct SquareNode)" (?Add@ApfList@@$$FQAEXUSquareNode@@@Z) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "int __cdecl ApfTest(void)" (?ApfTest@@$$FYAHXZ) already defined in Apf2.obj
1>stdafx.obj : error LNK2005: "class ApfList openList" (?openList@@3VApfList@@A) already defined in Apf2.obj
1>C:\Documents and Settings\Asentaja\Omat tiedostot\Visual Studio 2010\Projects\Apf2\Debug\Apf2.exe : fatal error LNK1169: one or more multiply defined symbols found
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Macro [07.06.2010 13:27:02]

#

"already defined in xxx"

Tämä tarkoittaa sitä, että tiedostossa Apf2.cpp olet jo määrittänyt nuo asiat. Teet siis saman asian tuplasti.

Näin siis käänsin virheen, en tiedä kielestä nykyisin hölkäsen pöläystä.

Metabolix [07.06.2010 13:54:52]

#

Vain otsikkotiedostot (.h, .hpp) kuuluu liittää includella. Jokainen .cpp-tiedosto käännetään erikseen, ja lopuksi koodi linkitetään yhteen. (Tämä tapahtuu MSVC:ssä tietenkin automaattisesti yhdellä napinpainalluksella.) Nyt kun olet lisäksi liittänyt tiedoston includella, sama koodi tulee ohjelmaan kahteen kertaan, mikä ei sovi.

Lue C++-oppaan 6. osasta jaarittelut esittelyistä, määrityksistä ja linkityksistä. Kyseisessä oppaassa on myös pari linkkiä tekemiini koodivinkkeihin, joissa selitetään usean tiedoston käyttöä. (En nyt ehdi kyseisiä linkkejä kaivaa, pitäisi kyllä löytyä helposti.)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta