'stdx' не является ошибкой имени пространства имен, отображаемой для программы ptr_vector - PullRequest
0 голосов
/ 18 октября 2010

Я пробовал программу из codeproject , о ptr_vector, и во время компиляции отображается вышеуказанная ошибкаПоиск в Google не дает надежды решить эту проблему.Может ли кто-нибудь здесь помочь?Вот весь код (я компилирую с gcc 4.2.2)

#include <iostream>
#include <string>
#include <boost/ptr_container/ptr_vector.hpp>

using namespace std;    // for cout, endl, find, replace, ...
using namespace stdx;   // for ptr_vector, ptr_vector_owner
using namespace boost;

int main()
{
   cout << "---- ptr_vector demo ----" << endl;

   ptr_vector<string> ptv;
   ptr_vector_owner<string> owner (ptv);  // scope-guard: owner of new-ed objects

   ptv.push_back (new string ("Peter"));
   ptv.push_back (new string ("Paul"));
   ptv.insert    (ptv.end(), new string ("Margaret"));

   cout << " 1: " << ptv.front()  << " " << ptv.back() << endl;
   cout << " 2: " << ptv[1]       << " " << ptv.at(2)  << endl;
   cout << " 3: " << *ptv.begin() << " " << *(ptv.begin() + 1) << endl;

   cout << " 4:";
   for (ptr_vector<string>::iterator it = ptv.begin(); it != ptv.end(); ++it)
      cout << " " << *it;
   cout << endl;

   ptv.sort();
   cout << " 5: " << ptv[0] << " " << ptv[1] << " " << ptv[2] << endl;

   ptv.sort (greater<string>());
   cout << " 6: " << ptv[0] << " " << ptv[1] << " " << ptv[2] << endl;

   ptr_vector<string>::iterator iter;
   iter = find (ptv.begin(), ptv.end(), "Paul");
   if (iter != ptv.end())
      cout << " 7: " << *iter << endl;

   replace (ptv.begin(), ptv.end(), string ("Paul"), string ("Fred"));
   cout << " 8: " << ptv.begin()[1] << endl;

   string* str = ptv.pop_back();
   cout << " 9: " << *str <<  " - size: " << ptv.size() << endl;
   delete str;

   delete ptv.detach (ptv.begin());
   cout << "10: " << ptv[0] << " - size: " << ptv.size() << endl;

   ptr_vector<string> ptvTwo;
   ptr_vector_owner<string> ownerTwo (ptvTwo);

   ptvTwo.push_back (new string ("Elisabeth"));
   ptvTwo.push_back (new string ("Susan"));
   ptv.swap(ptvTwo);
   if (ptv < ptvTwo)
      cout << "11: " << *ptv.begin() << " - size: " << ptv.size() << endl;

   return 0;
}//main

1 Ответ

4 голосов
/ 18 октября 2010

stdx не является стандартным пространством имен, оно определяется конкретной реализацией, которую вы пытаетесь использовать.Вы не используете заголовочный файл, включающий #include "ptr_vector.h", внутри которого существует namespace stdx.В настоящее время ptr_vector, который вы используете, включен из boost namespce.Возникает вопрос: если вы можете использовать boost, почему вы хотите использовать stdx решение пространства имен.

...