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
, undCarnivoroPizza
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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
CFLAGS
ist für C-Compiler. Sie sind mit C++ und ein C++ - compiler. VerwendenCXXFLAGS
im Makefile die C++ compiler flags:Da Sie mit der Einstellung C-flags, C++11 nicht aktiviert, da
-std=c++11
ist nicht an Ihrem C++ - compiler. Wenn Sie wurden mit einem C-compiler der compiler (zumindest der GCC tut es AFAIK) warnen würde über die C++ - flag auf der C-compiler. Könnten Siemake VERBOSE=1
in diese Art von compiler-Fehler-Situationen für die Fehlersuche.Versuchen Sie,
Den Anfang der Datei.
Wenn Ihr das cmake-Projekt, fügen Sie eine Zeile code zu CmakeLists.txt wie unten gezeigt.
Ätherische hat erklärt, die details der Grund für den Fehler.