3 Stimmen

Seltsamer Fehler bei mehreren Definitionen

Ich habe etwas Ähnliches in meinem Code:

namespace A {
namespace B {

void
GetLine(std::istream& stream, std::string& line)
{
    line.clear();
    while (stream.good()) {
        std::getline(stream, line);
        boost::trim(line);
        if (not line.empty()) break;
    }
    boost::to_upper(line);
}

}
}

Und ich erhalte mehrere Definitionsfehler, wenn ich die A::B::GetLine . Irgendwelche Ideen, warum?

(Der Code ist bei der Arbeit, so werde ich versuchen, spezifische Schnipsel zu geben, wenn Sie mehr Informationen benötigen, aber ich kann nicht einfach den gesamten Code hier pasen).

4voto

Puppy Punkte 141483

Sie haben den Code höchstwahrscheinlich in mehrere Header aufgenommen, anstatt ihn in einem Header zu deklarieren und in einer Quelldatei zu definieren. Sie müssen die Funktion inline deklarieren, sie als Vorlage verwenden oder die Definition in eine Quelldatei verschieben, die Deklaration aber in einem Header belassen.

1voto

Karel Petranek Punkte 14845

Ihr Problem ist, dass Sie diesen Code wahrscheinlich in einer .h-Datei haben und ihn in weitere .cpp-Dateien einbinden. Die Lösung ist, das Schlüsselwort inline zu verwenden, damit der Compiler den Code einbindet und den Verweis entfernt:

namespace A {
namespace B {

inline void
GetLine(std::istream& stream, std::string& line)
{
    line.clear();
    while (stream.good()) {
        std::getline(stream, line);
        boost::trim(line);
        if (not line.empty()) break;
    }
    boost::to_upper(line);
}

}
}

Eine andere Lösung besteht darin, den Methodenkörper in eine .cpp-Datei zu verschieben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X