STL under LINUX compile problems
3 отговора
155 прегледа
STL under LINUX compile problems
Zdraveite, moje li njakoi da mi pomogne? Stava vapros za C++ STL kod koito ne se kompilira pod Linux. Vsichko napisano se kompilira i linkva pod windows i si varvi chudesno. No celta e da se podkara (izkompilira i linkne) pod linux. Po dolu paste-vam malyk primer na tova koeto po princip pravi problem. Kogato se opitam da napravia std::for_each() ili std::translate() kompilatora kazva che ne mojel da si konvertira tipovete koito mu se podavat za primera po-dolu ne moje da konvertira basic_string kym string. Ako ima njakoi da mi obiasni v kakvo tochno se sastoia problema i kak moje da byde razreshen molia da pishe ili moje da mi pishe na ICQ:76042513.
#pragma warning(disable:4786)
#include <iostream>
#include <set>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct ltstr
{
bool operator()(std::string s1, std::string s2) const
{
return s1 < s2;
}
};
//TYPEDEFS
typedef std::set<std::string, ltstr> StringSet;
typedef std::vector<std::string> StringVector;
void PrintUsage1(char *progname)
{
cerr << "usage: " << progname << " <dictionary name> <file 1> [<file 2> ...]" << endl;
exit(1);
}
char * strProgramName = "spell-check";
template<class T> struct copy_word : public std::unary_function<T, void>
{
copy_word(StringVector & _copyTo) : copyTo(_copyTo) {};
void operator() (T & x)
{
copyTo.push_back(x);
}
StringVector & copyTo;
};
void CopyTo(StringSet & from, StringVector & to)
{
//ako razkomentiram dolnia red se piaviavat problemite
//std::for_each(from.begin(), from.end(), copy_word<std::string>(to));
}
int main(int argc, char * argv[])
{
StringSet sDict;
sDict.insert("grozdan");
sDict.insert("danko");
sDict.insert("asen");
StringVector vDict;
CopyTo(sDict, vDict);
for(StringVector::iterator it = vDict.begin(); it != vDict.end(); ++it)
{
cout << it->c_str()<<endl;
}
return 0;
}
#pragma warning(disable:4786)
#include <iostream>
#include <set>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct ltstr
{
bool operator()(std::string s1, std::string s2) const
{
return s1 < s2;
}
};
//TYPEDEFS
typedef std::set<std::string, ltstr> StringSet;
typedef std::vector<std::string> StringVector;
void PrintUsage1(char *progname)
{
cerr << "usage: " << progname << " <dictionary name> <file 1> [<file 2> ...]" << endl;
exit(1);
}
char * strProgramName = "spell-check";
template<class T> struct copy_word : public std::unary_function<T, void>
{
copy_word(StringVector & _copyTo) : copyTo(_copyTo) {};
void operator() (T & x)
{
copyTo.push_back(x);
}
StringVector & copyTo;
};
void CopyTo(StringSet & from, StringVector & to)
{
//ako razkomentiram dolnia red se piaviavat problemite
//std::for_each(from.begin(), from.end(), copy_word<std::string>(to));
}
int main(int argc, char * argv[])
{
StringSet sDict;
sDict.insert("grozdan");
sDict.insert("danko");
sDict.insert("asen");
StringVector vDict;
CopyTo(sDict, vDict);
for(StringVector::iterator it = vDict.begin(); it != vDict.end(); ++it)
{
cout << it->c_str()<<endl;
}
return 0;
}
Re: STL under LINUX compile problems
Shtom tuk si popital, tuk i shte si poluchish otgovora :-)
#include <iostream>
#include <set>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct ltstr
{
bool operator()(std::string s1, std::string s2) const
{
return s1 < s2;
}
};
//TYPEDEFS
typedef std::set<std::string, ltstr> StringSet;
typedef std::vector<std::string> StringVector;
void PrintUsage1(char *progname)
{
cerr << "usage: " << progname << " <dictionary name> <file 1> [<file 2> ...]" << endl;
exit(1);
}
char * strProgramName = "spell-check";
template<class T> struct copy_word : public std::unary_function<T, void>
{
copy_word(StringVector & _copyTo) : copyTo(_copyTo) {};
void operator() (const T & x)
{
copyTo.push_back(x);
}
StringVector & copyTo;
};
void CopyTo(StringSet & from, StringVector & to)
{
//ako razkomentiram dolnia red se piaviavat problemite
std::for_each(from.begin(), from.end(), copy_word<std::string>(to));
}
int main(int argc, char * argv[])
{
StringSet sDict;
sDict.insert("grozdan");
sDict.insert("danko");
sDict.insert("asen");
StringVector vDict;
CopyTo(sDict, vDict);
for(StringVector::iterator it = vDict.begin(); it != vDict.end(); ++it)
{
cout << it->c_str()<<endl;
}
return 0;
}
#include <iostream>
#include <set>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
struct ltstr
{
bool operator()(std::string s1, std::string s2) const
{
return s1 < s2;
}
};
//TYPEDEFS
typedef std::set<std::string, ltstr> StringSet;
typedef std::vector<std::string> StringVector;
void PrintUsage1(char *progname)
{
cerr << "usage: " << progname << " <dictionary name> <file 1> [<file 2> ...]" << endl;
exit(1);
}
char * strProgramName = "spell-check";
template<class T> struct copy_word : public std::unary_function<T, void>
{
copy_word(StringVector & _copyTo) : copyTo(_copyTo) {};
void operator() (const T & x)
{
copyTo.push_back(x);
}
StringVector & copyTo;
};
void CopyTo(StringSet & from, StringVector & to)
{
//ako razkomentiram dolnia red se piaviavat problemite
std::for_each(from.begin(), from.end(), copy_word<std::string>(to));
}
int main(int argc, char * argv[])
{
StringSet sDict;
sDict.insert("grozdan");
sDict.insert("danko");
sDict.insert("asen");
StringVector vDict;
CopyTo(sDict, vDict);
for(StringVector::iterator it = vDict.begin(); it != vDict.end(); ++it)
{
cout << it->c_str()<<endl;
}
return 0;
}
Редактирано от Potencialen emigrant на
Re: STL under LINUX compile problems
Potencialen emigrant вече е решил задачката
Аз само ще добавя, че неща като това тук са ужасно неефективни:
struct ltstr
{
bool operator()(std::string s1, std::string s2) const
{
return s1 < s2;
}
};
Много по-добре е да го замениш с това:
struct ltstr
{
bool operator()(const std::string& s1, const std::string& s2) const
{
return s1 < s2;
}
};
struct ltstr
{
bool operator()(std::string s1, std::string s2) const
{
return s1 < s2;
}
};
Много по-добре е да го замениш с това:
struct ltstr
{
bool operator()(const std::string& s1, const std::string& s2) const
{
return s1 < s2;
}
};
Много си прав
Все пак ако това ще му бъде оператора за сравнение най-добре изобщо да не слага втори аргумент на std::set.
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_
System Doctor Error:
Your girlfriend is pregnant.
(A)bort, (M)arry, (I)gnore?_