Frage

Ich bin nicht allzu vertraut mit c ++ und wie instanziieren Objekten Arbeit, so dass dies wahrscheinlich eine sehr einfache Sache ist, zu lösen. Wenn ich Kompilieren mit g ++ ich den Fehler "undefined Verweis auf die 'Foo :: Foo (std :: string)'" erhalten. Ich möchte eine Instanz der Klasse Foo erstellen, die einen String-Parameter in seinem Konstruktor hat. Hier ist der Code:

foo.h

#include <string>
using namespace std;

class Foo
{
    public:
        Foo(string s);

    private:
        string id;
};

foo.cpp

#include <string>
#include "Foo.h"
using namespace std;

Foo::Foo(string s)
{
    id = s;
}

main.cpp

#include <string>
#include "Foo.h"
using namespace std;

int main()
{
    Foo foo("bar");

    return 0;
}
War es hilfreich?

Lösung

Du bist wahrscheinlich nicht einschließlich foo.cpp in Ihrer Kompilierung Linie. Es soll wie folgt aussehen:

g++ main.cpp Foo.cpp -o testFoo

Andere Tipps

Zusammenhang nicht auf das Problem, das Sie haben waren, aber denken Sie daran machen, ein paar kleinere Änderungen:

  1. Führen Sie das Argument in einer konstanten Referenz. const, weil Sie den Wert des Arguments und Referenz nicht planen, so weiter zu ändern, dass Sie keine zusätzlichen temporäre Objekte erstellen.

  2. C ++ hat ein Initialisierer Konzept, das effizienter ist dann mit dem Zuweisungsoperator auf Mitglied ‚id‘ im Körper des Konstrukteurs. Die aktuelle Version des Konstruktors wird Mitglied ids Standardkonstruktor aufrufen und dann seine Zuordnung Konstruktor. Das initializer Konzept (d ‚id (n)‘) wird eine Methode rufen Sie einfach an der Kopierkonstruktor.

    Foo :: Foo (const string & s): id (en)
    {
    }

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top