Jeg får nogle, ikke så, underlige fejl fra min linker når jeg bruger IDE'et Dev-C++. Jeg har prøvet at compile det i Linux, og der virker det fint. Mine fejl er,
c:\\documents and settings\\slot\\dokumenter\\programmering\\botv2\\split.o(.text+0xc):split.cpp: multiple definition of `split::split(basic_string<char, string_char_traits<char>, __default_alloc_template<0, 0> >, char)'
c:\\documents and settings\\slot\\dokumenter\\programmering\\botv2\\analyzer.o(.text+0xc):analyzer.cpp: first defined here
c:\\documents and settings\\slot\\dokumenter\\programmering\\botv2\\split.o(.text+0x3ac):split.cpp: multiple definition of `split::getElements(void)'
c:\\documents and settings\\slot\\dokumenter\\programmering\\botv2\\analyzer.o(.text+0x3ac):analyzer.cpp: first defined here
c:\\documents and settings\\slot\\dokumenter\\programmering\\botv2\\split.o(.bss+0x0):split.cpp: multiple definition of `split::m_elements'
c:\\documents and settings\\slot\\dokumenter\\programmering\\botv2\\analyzer.o(.bss+0x0):analyzer.cpp: first defined here
analyzer.h
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class analyzer
{
public:
/*constructor*/
string m_s;
analyzer(string s):m_s(s){};
/*Her vil jeg definere nogle members som kan give mig info om den der skriver paa kanalen*/
string getNick();
string getMsgType();
string getChannel();
string getTekst();
string getPingHost();
};
analyzer.cpp
#include "analyzer.h"
#include "split.cpp"
string analyzer::getChannel()
{
split::split(m_s , ':');
vector<string> v = split::getElements();
string temp = v[0];
split::split(temp , ' ');
vector<string> v2 = split::getElements();
return v2[2];
}
string analyzer::getMsgType()
{
split::split(m_s , ':');
vector<string> v = split::getElements();
string temp = v[0];
split::split(temp , ' ');
vector<string> v2 = split::getElements();
return v2[1];
}
string analyzer::getNick()
{
split::split(m_s , ':');
vector<string> v = split::getElements();
string temp = v[0];
split::split(temp , '!');
vector<string> v1 = split::getElements();
return v1[0];
}
string analyzer::getTekst()
{
split::split(m_s , ':');
vector<string> v = split::getElements();
return v[1];
}
string analyzer::getPingHost()
{
split::split(m_s , ':');
vector<string> v = split::getElements();
return v[1];
}
int main()
{
string test = ":S10t!n=screenuser@252.125.243.80.vl20-arh.dhcp.clearwire.dk PRIVMSG #dat4 :Hj Haj SlottiBotti";
string host = "PING :sw.de.quakenet.org";
analyzer a(test);
cout << a.getChannel() << endl;
cout << a.getMsgType() << endl;
cout << a.getNick() << endl;
cout << a.getTekst() << endl;
analyzer b(host);
cout << b.getPingHost() << endl;
return 0;
}
split.h
#include <vector>
#include <iostream>
#include <string>
using namespace std;
class split
{
public:
split(string s , char splitter);
static vector<string> getElements();
private:
static vector<string> m_elements;
};
split.cpp
#include "split.h"
/**
*$member name split
*$parm s:string
*
*This function splits a given string up
*and adds every atom to a vector
*
**/
split::split(string s , char splitter)
{
//vectoren som den skal returnere
vector<string> elements;
//Vars som skal bruges i splitningen af stringen, s
int start = 0;
int slut = 0;
for(int i = 1; i <= s.length(); i++)
{
if(s[i] == splitter)
{
//Jeg finder start og slut
start = slut;
slut = i;
//Jeg finder den substring jeg skal bruge
string sub = s.substr(start,(slut-start));
//Jeg vil fjerne første tegn fra hver sætning
//da det indholder det tegn som vi splitter med
if(sub[0] == splitter)
{
string rep = sub.replace(0,1,"");
//Nu pusher jeg replace stringen på vectoren
elements.push_back(rep);
}else
{
elements.push_back(sub);
}
}
if(i == s.length())
{
//Jeg finder start og slut
start = slut;
slut = i;
//Jeg finder den substring jeg skal bruge
string sub = s.substr(start,(slut-start));
//Jeg vil fjerne første tegn fra hver sætning
//da det indholder det tegn som vi splitter med
string rep = sub.replace(0,1,"");
//Nu pusher jeg replace stringen på vectoren
elements.push_back(rep);
}
}
m_elements = elements;
}
vector<string> split::getElements()
{
return m_elements;
}
vector<string> split::m_elements;
Nogen der kan give mig svar på mit problem?
min split klasse er som sagt statisk.
Slot - All your base are belong to us
http://www.sigsys.dk