
Hello All, During migrating my project under new development environment I face out following issue: ambiguous unqualified 'shared_ptr' name resolution. For example in .cpp files I using several usings such as: using namespace std; using namespace std::tr1; using namespace boost; In source code I have something like this: shared_ptr<SomeType> var = /*...*/; And for each such line I have an error: error C2872: 'shared_ptr' : ambiguous symbol could be 'c:\program files\microsoft visual studio 9.0\vc\include\memory(1392) : std::tr1::shared_ptr' or 'c:\program files\microsoft visual studio 9.0\vc\include\memory(1392) : std::tr1::shared_ptr' or 'p:\projects\common\boost_1.36.0\boost\shared_ptr.hpp(165) : boost::shared_ptr' What I have to do to avoid this errors for boost 1.36 except explicit share_ptr qualification? Explicit including of "boost/shared_ptr" or "memory" I already put into #ifdef/#endif braces. But this didn't help. -- Best Regards, Sergey mailto:flex_ferrum@artberg.ru

During migrating my project under new development environment I face out following issue: ambiguous unqualified 'shared_ptr' name resolution.
For example in .cpp files I using several usings such as:
using namespace std; using namespace std::tr1; using namespace boost;
In source code I have something like this:
shared_ptr<SomeType> var = /*...*/;
And for each such line I have an error:
What I have to do to avoid this errors for boost 1.36 except explicit share_ptr qualification?
Personally I'd get rid of all the using statements and then you'd never get this sort of error again. If you're too slow a typist to write boost::shared_ptr when you need it then typedef it to something shorter. Alternatively remove all #includes to boost\shared_ptr.hpp, or \include\memory. You don't need to include both the MS and boost shared_ptrs. Of course this won't work if some library header include the header you remove in which case see above. ****************************************************************************** "This message and any attachments are solely for the intended recipient and may contain confidential and privileged information. If you are not the intended recipient, any disclosure, copying, use, or distribution of the information included in this message and any attachments is prohibited. If you have received this communication in error, please notify us by reply e-mail and immediately and permanently delete this message and any attachments. Thank you." Interactive Transaction Solutions Ltd (2473364 England) Registered Office: Systems House, Station Approach Emsworth PO10 7PW ********************************************************************** Ce message �lectronique contient des informations confidentielles � l'usage unique des destinataires indiqu�s, personnes physiques ou morales. Si vous n'�tes pas le destinataire voulu, toute divulgation, copie, ou diffusion ou toute autre utilisation de ces informations, est interdite. Si vous avez re�u ce message �lectronique par erreur, nous vous remercions d'en avertir son exp�diteur imm�diatement par email et de d�truire ce message ainsi que les �l�ments attach�s. Interactive transaction Solutions SAS- France (RCS Pontoise : 489 397 877) Si�ge social : Parc Saint Christophe, 10, Avenue de l�Entreprise 95865 Cergy-Pontoise Cedex ______________________________________________________________________ This email has been scanned by the MessageLabs Email Security System. For more information please visit http://www.messagelabs.com/email ______________________________________________________________________

Hi, "using" the whole namespace is not healthy, because you "dirty" the global namespace and raise the probability of conflicts. Instead, you could "import" some specific classes: using boost::shared_ptr; Then, if you decide to use the tr1 one, you just change it to: using std::tr1::shared_ptr;
For example in .cpp files I using several usings such as:
using namespace std; using namespace std::tr1; using namespace boost;
In source code I have something like this:
shared_ptr<SomeType> var = /*...*/;
And for each such line I have an error: error C2872: 'shared_ptr' : ambiguous symbol

Igor R wrote:
For example in .cpp files I using several usings such as:
using namespace std; using namespace std::tr1; using namespace boost;
In source code I have something like this:
shared_ptr<SomeType> var = /*...*/;
And for each such line I have an error: error C2872: 'shared_ptr' : ambiguous symbol
Nothing unusual about that: you have two different shared_ptr's visible in scope: boost::shared_ptr and std::tr1::shared_ptr. You need to decide which you intend to use and either prefix all shared_ptr usages with the appropriate qualifiers, or else just take care to only import the one shared_ptr in the first place. HTH, John.
participants (4)
-
Igor R
-
John Maddock
-
Patrick Loney
-
Sergey Sadovnikov