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 ==========
"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ä.
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.)
Aihe on jo aika vanha, joten et voi enää vastata siihen.