Probleme mit unique_ptr : nicht ein Mitglied von 'std'

Ich habe eine harte Zeit zu finden, warum compiler sagt mir das:

main.cpp:51:17: error: unique_ptr in namespace std does not name a template type
 static std::unique_ptr<Pizza> createPizza(PizzaType t_pizza)

und so:

main.cpp:69:5: error: unique_ptr is not a member of std
 std::unique_ptr<Pizza> pizza = PizzaFactory::createPizza(t_pizzaType);

Habe ich die include für unique_ptr

#include <memory>

und ich benutze die guten C++ - Kompilierung flags

CFLAGS  =   -std=c++11 -W -Wall -Wextra -Werror -pedantic

Habe ich bereits versucht, using namespace std;

Hier sind die code-block wo ich std::unique_ptr

class PizzaFactory
{
 public:
  enum PizzaType
  {
  Hawaiian,
  Vegetarian,
  Carnivoro
  };

  static std::unique_ptr<Pizza> createPizza(PizzaType t_pizza)
  {
  switch (t_pizza)
  {
  case Hawaiian:
    return std::unique_ptr<HawaiianPizza>(new HawaiianPizza());
  case Vegetarian:
    return std::unique_ptr<VegetarianPizza>(new VegetarianPizza());
  case Carnivoro:
    return std::unique_ptr<CarnivoroPizza>(new CarnivoroPizza());
  default:
    throw "Invalid pizza type.";
  }
  }
};

void pizza_information(PizzaFactory::PizzaType t_pizzaType)
{
  std::unique_ptr<Pizza> pizza = PizzaFactory::createPizza(t_pizzaType);
  std::cout << "Price of " << t_pizzaType << "is " << pizza->getPrice() << '\n';
}

Kann ich wirklich herauszufinden, was falsch mit diesem code, bitte um Hilfe

Danke.

Bearbeiten.

Hier ist die Makefile, die ich benutze:

NAME    =   plazza

G++ =   g++

CFLAGS  =   -W -Wall -Wextra -Werror -std=c++11

SRC =   main.cpp

OBJ =   $(SRC:.cpp=.o)

RM  =   rm -rf

all:    $(NAME)

$(NAME):    $(OBJ)
    $(G++) $(CFLAGS) $(OBJ) -o $(NAME)

clean:
    $(RM) $(OBj)

fclean: clean
    $(RM) $(NAME)

re: fclean  all

edit2.

Hier einen kleinen code, der mir den gleichen Fehler:

#include <memory>
#include <iostream>

class Hi
{
    public:
        void sayHi(const std::string &t_hi)
        {
            std::cout << t_hi << '\n';
        }
};

int main()
{
    auto hi = std::unique_ptr<Hi>(new Hi());

    hi->sayHi("Salut");
    return 0;
}

kompilieren mit Makefile oben sollten Sie den Fehler haben

  • Wo tun Sie <memory>? Können Sie bitte versuchen, erstellen Sie eine Minimale, Vollständige und Überprüfbare Beispiel und uns das zeigen?
  • Wie es scheint, haben Sie #include in Ihrem make-Datei anstelle der Quell-Datei
  • Fragt das offensichtliche: Haben Sie definiert die Klassen Pizza, HawaiianPizza, VegetarianPizza, und CarnivoroPizza im Quellcode oder erklärten Sie in einer Kopf-du bist wie?
  • Der gesamte code ist in einer einzigartigen main.cpp Datei und ich haben definieren Sie die Klasse, die ich brauchte
  • Wenn Gebäude mit makefile, werfen Sie einen Blick auf die Ausgabe und den Befehl schafft für den Aufbau von Objekt-Dateien. Sind nicht Eure Fahnen fehlen?
InformationsquelleAutor Mocking Bird | 2017-04-17
Schreibe einen Kommentar