Mehrdeutige Referenz und der namespace (der Kampf der Definitionen aus den beiden externen Bibliotheken)

Erlebe ich den Zusammenbruch der Definitionen kann ich nicht deuten.

Schematisch das problem ist wie folgt:

Die wichtigsten Projekt-Datei hat zwei umfasst:

include <lib1.h>
include <lib2.h>

Den ersten header enthält paar andere Header aus der Bibliothek, in einer von denen gibt es eine direkte (nicht mit einem name-space) definition:

template<typename T> class SparseMatrix;

Den lib2.h hat die folgenden innerhalb

namespace lib2
{
   using namespace lib3;

   class ...
   {
      ...
      SparseMatrix<double> ...
      ...
    }
}

Innen lib3, abgedeckt mit dem namespace, gibt es auch eine definition der Klasse SparseMatrix.

Jede Bibliothek separat kompiliert kein problem. Wenn ich versuche zu kompilieren Sie die ausführbare Datei verwendet, der compiler erzeugt einen Fehler:

lib2.h:70:7: error: reference to 'SparseMatrix' is ambiguous

Die sieht seltsam für mich, da nirgendwo im main Programm Schreibe ich

using namespace lib3;

Somit sehe ich keinen Grund, warum diese Definitionen einstürzen sollte.
Ich würde mich sehr über jede mögliche Erklärung für das problem.

Natürlich, ich kann schließen Sie die Definitionen aus der lib1 in einem eigenen namespace, aber dann müsste ich ändern, ganz eine Reihe von Dateien, die würde ich eher nicht tun.

KOMMENTAR:
die Antwort unten ist richtig, aber ich war auch in der Lage zu bekommen, um das problem durch änderung der Reihenfolge der enthaltenen Dateien, also in Erster umfassen lib2 und dann lib1.

InformationsquelleAutor Denis | 2013-03-26
Schreibe einen Kommentar