gpt4 book ai didi

c++ - 类无法找到另一个类(单独的头文件): C++

转载 作者:行者123 更新时间:2023-11-28 02:48:28 24 4
gpt4 key购买 nike

这是我的 Pizaa.h

#pragma once
#ifndef PIZZA_H
#define PIZZA

#include <iostream>
#include <string>
#include <list>
#include <limits>
#include <vector>
#include <cstdlib>

using namespace std;


/****************************
Abstract Base Pizza Class
*****************************/

class Pizza{
string name;
string dough;
string sauce;
std::list<string> topping;

public:
Pizza(string name,string dough,string sauce);
void prepare();
virtual void bake()=0;
virtual void cut()=0;
void box();
string getName();
void addTopping(string str);
void getTopping(std::list<string>& lst);
virtual ~Pizza();
};

#endif

这是 cheesePizza.h

#pragma once
#ifndef CHEEZEPIZZA_H
#define CHEEZEPIZZA_H

#include <iostream>
#include <string>
#include <list>
#include <limits>
#include <vector>
#include <cstdlib>
#include "Pizza.h"

using namespace std;

class cheesePizza:public Pizza{
public:
cheesePizza();
~cheesePizza();
virtual void bake();
virtual void cut();
};

#endif

这是 veggiePizza.h

#pragma once
#ifndef VEGGIEPIZZA_H
#define VEGGIEPIZZA_H

#include <iostream>
#include <string>
#include <list>
#include <limits>
#include <vector>
#include <cstdlib>
#include "Pizza.h"


class veggiePizza:public Pizza{
public:
veggiePizza();
~veggiePizza();
virtual void bake();
virtual void cut();
};

#endif

这是我的工厂类:

#include <iostream>
#include <string>
#include "Pizza.h"
#include "cheesePizza.h"
#include "veggiePizza.h"

using namespace std;

class SimplePizzaFactory{
public:
enum PizzaType {
cheesePizza,
veggiePizza
};
Pizza* createPizza(PizzaType type)
{
switch(type){
case cheesePizza:
// Pizza* p = new cheesePizza(); ##Here
//delete(p); ##Here
case veggiePizza:;
// return new veggiePizza();
}
throw "Invalid Pizza Type";
}
};



int main()
{

Pizza* p = new cheesePizza();
delete(p);
return 0;
}

我的 SimplePizzaFactory 方法 createPizza() 无法找到 new cheesePizza()new veggiePizza() 如果我取消注释 #Here

,我会得到下面的错误
$ g++ -Wall -c SimplePizzaFactory.cpp -o SimplePizzaFactory.o
SimplePizzaFactory.cpp: In member function ‘Pizza* SimplePizzaFactory::createPizza(SimplePizzaFactory::PizzaType)’:
SimplePizzaFactory.cpp:19:33: error: expected type-specifier before ‘cheesePizza’
Pizza* p = new cheesePizza();
^
SimplePizzaFactory.cpp:21:8: error: jump to case label [-fpermissive]
case veggiePizza:;
^
SimplePizzaFactory.cpp:19:25: error: crosses initialization of ‘Pizza* p’
Pizza* p = new cheesePizza();
^
SimplePizzaFactory.cpp:17:8: warning: enumeration value ‘veggiePizza’ not handled in switch [-Wswitch]
switch(type){

我的所有文件,即 *.o*.cpp 都放在同一个文件夹中。

我无法弄清楚为什么会出现此错误。相同的代码Pizza* p = new cheesePizza();
delete(p);
inside main() 工作正常,但如果你取消注释 #Here 它会给出编译错误。

最佳答案

您将 cheesePizza 声明为枚举的元素和类,枚举元素可能获得优先权。

重命名两者之一以解决您的问题。

它在 main 中工作的原因是那里的 cheesePizza 枚举元素超出了范围,因此那里没有名称冲突。

如果您将程序缩减为展示问题的最小示例,您很可能会自己发现问题。

关于c++ - 类无法找到另一个类(单独的头文件): C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23614581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com