Wie löst man den Konflikt zwischen boost :: shared_ptr und std :: shared_ptr?

7

Wenn ich in diesem Code-Snippet von boost :: shared_ptr zu std :: shared_ptr wechsel, bekomme ich Linker-Fehler.

%Vor%

Fehler:

%Vor%

Was habe ich falsch gemacht? Ich vermutete, dass es einen Konflikt zwischen dem Namespace std und dem Boost-Namespace gab, aber ich weiß nicht, wie ich das beheben soll. Irgendeine Idee?

Danke, Danke Chan

    
Chan 13.01.2011, 16:20
quelle

4 Antworten

13

Es sieht so aus, als müssten Sie eine Überladung von get_pointer hinzufügen, um std::shared_ptr mit boost :: bind zu verwenden.

%Vor%

Ich nehme an, dass dies funktioniert, wenn Sie stattdessen std::bind verwenden. Oder verwende tester.get() in bind .

    
ltjax 13.01.2011, 16:39
quelle
6

Boost- und TR1-Shared-Pointer sind separate Implementierungen und nicht kompatibel - wählen Sie das eine oder das andere aus und verwenden Sie es ausschließlich.

    
bdonlan 13.01.2011 16:26
quelle
3

boost :: bind weiß nicht, was mit tr1 :: shared_ptr zu tun ist, weiß, wie man boost :: shared_ptr behandelt.

Sie könnten tr1 :: bind ausprobieren, was wahrscheinlich mit tr1 :: shared_ptr funktioniert.

Das einzige Problem ist dann, ob das in BOOST_TEST_CASE funktioniert. Wenn es nur ein "runnable" erwartet, dann ist eine tr1 :: -Funktion genauso "runnable" wie eine Boost-Eins.

    
CashCow 13.01.2011 16:31
quelle
1

Haben Sie bemerkt, dass Sie die & lt; Speicher & gt; Header (noch & lt; boost / shared_ptr.hpp & gt; für diese Angelegenheit)?

Wenn Sie weitere Informationen zur Verfügung stellen, wäre es einfacher zu helfen.

  1. Welchen Compiler benutzen Sie?
  2. Erwarten Sie, tr1 von Ihrem Compiler von boost zu verwenden?
  3. Möchten Sie auf shared_ptr als std :: tr1 :: shared_ptr oder einfach std :: shared_ptr?
  4. zugreifen?
broc 13.01.2011 16:42
quelle

Tags und Links