У меня есть программа, которая использует tr1::regex
, и пока она компилируется, она дает мне очень подробные ошибки компоновщика.
Вот мой заголовочный файл MapObject.hpp:
#include <iostream>
#include <string>
#include <tr1/regex>
#include "phBaseObject.hpp"
using std::string;
namespace phObject
{
class MapObject: public phBaseObject
{
private:
string color; // must be a hex string represented as "#XXXXXX"
static const std::tr1::regex colorRX; // enforces the rule above
public:
void setColor(const string&);
(...)
};
}
Вот моя реализация:
#include <iostream>
#include <string>
#include <tr1/regex>
#include "MapObject.hpp"
using namespace std;
namespace phObject
{
const tr1::regex MapObject::colorRX("#[a-fA-F0-9]{6}");
void MapObject::setColor(const string& c)
{
if(tr1::regex_match(c.begin(), c.end(), colorRX))
{
color = c;
}
else cerr << "Invalid color assignment (" << c << ")" << endl;
}
(...)
}
и теперь за ошибки:
max @ max-desktop: ~ / Рабочий стол / Разработка / CppPartyHack / PartyHack / lib $ g ++ -Wall -std = c ++ 0x MapObject.cpp
/tmp/cce5gojG.o: в функции std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(char const*, unsigned int)':
MapObject.cpp:(.text._ZNSt3tr111basic_regexIcNS_12regex_traitsIcEEEC1EPKcj[std::tr1::basic_regex<char, std::tr1::regex_traits<char> >::basic_regex(char const*, unsigned int)]+0x61): undefined reference to
std :: tr1 :: basic_regex> :: _ M_compile () '
/tmp/cce5gojG.o: В функции bool std::tr1::regex_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char, std::tr1::regex_traits<char> >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&, std::bitset<11u>)':<br>
MapObject.cpp:(.text._ZNSt3tr111regex_matchIN9__gnu_cxx17__normal_iteratorIPKcSsEEcNS_12regex_traitsIcEEEEbT_S8_RKNS_11basic_regexIT0_T1_EESt6bitsetILj11EE[bool std::tr1::regex_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, char, std::tr1::regex_traits<char> >(__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, __gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::basic_regex<char, std::tr1::regex_traits<char> > const&, std::bitset<11u>)]+0x53): undefined reference to
bool std :: tr1 :: regex_match <__ gnu_cxx :: __ normal_iterator, std :: allocator>>, std :: allocator, std :: allocator>>>>, char, std :: tr1 :: regex_traits> (__ gnu_cxx :: __ normal_iterator, std :: allocator>>, __gnu_cxx :: __ normal_iterator, std :: allocator>>, std :: tr1 :: match_results <__ gnu_cxx :: __ normal_iterator, std :: allocator> >, std :: allocator, std :: allocator>>>>> &, std :: tr1 :: basic_regex> const &, std :: bitset <11u>) '
collect2: ld вернул 1 статус выхода
Я не могу сделать из этого ни головы, ни хвоста, кроме undefined reference to std::tr1::basic_regex
в начале. Кто-нибудь знает, что происходит?