Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用抽象类C+进行单独编译+; 关于在C++中用抽象类构建一个项目,我有个问题。_C++_Oop - Fatal编程技术网

使用抽象类C+进行单独编译+; 关于在C++中用抽象类构建一个项目,我有个问题。

使用抽象类C+进行单独编译+; 关于在C++中用抽象类构建一个项目,我有个问题。,c++,oop,C++,Oop,假设在头文件中有一个抽象类A,然后在cpp文件中有一个类B,用于从类A创建对象。到目前为止,我们有: A.h类,B.cpp类 Class_B::myFunc() { ... } 在Class_B.cpp文件中,我包含了头类_A.h 现在我想在主文件中创建类_B的对象,例如:main.cpp。我在main.cpp中添加了头类_A.h,在编译时,我得到的“Class_B”未在此范围内声明为错误。所有文件都在同一目录中。我不太确定如何解决这个问题,或者我是否正确使用了抽象类。我在网上找到的所有示

假设在头文件中有一个抽象类A,然后在cpp文件中有一个类B,用于从类A创建对象。到目前为止,我们有:

A.h类,B.cpp类

Class_B::myFunc()
{
  ...
}
在Class_B.cpp文件中,我包含了头类_A.h

现在我想在主文件中创建类_B的对象,例如:main.cpp。我在main.cpp中添加了头类_A.h,在编译时,我得到的“Class_B”未在此范围内声明为错误。所有文件都在同一目录中。我不太确定如何解决这个问题,或者我是否正确使用了抽象类。我在网上找到的所有示例都是这样做的:在main.cpp中定义Class_B,而不为Class_B创建单独的cpp文件

例如:

抽象类:Car.h

抽象类的实例:Toyota.cpp

main.cpp:

#include 'Car.h'

...

Toyota new_car = new Toyota(...);

只需要组织你的代码。关于如何实现这一点没有硬性规定,但通常在头文件(.h或.hpp)中定义类,并在源文件(.cpp)中实现类。在这种情况下,我将:

A.h类

class Class_A
{
public:
  virtual void myFunc() = 0;  // Class_A is abstract
  ...
}
B.h类

#include "Class_A.h"
class Class_B : public Class_A
{
public:
  void myFunc();
  ...
}
B.cpp级

Class_B::myFunc()
{
  ...
}
main.cpp

#include "Class_B.h"
int main()
{
  Class_B myClassB;
  myClassB.myFunc();
  ...
  return 0;
}

当然,您需要将所有源文件正确地提供给编译器,在本例中至少是Class_B.cpp和main.cpp。

您必须声明您想要使用的任何文件。您还应该将
Class_B.cpp
Class_B.h
配对,其中您只声明
.cpp
文件中定义的内容。然后,您应该在
main.cpp
文件中包含
。在Class_B.h中定义Class_B,并在main中包含
。cpp@Fureeish六羟甲基三聚氰胺六甲醚?Class_B应该是Class_A的一个实例。例如,我们有一个抽象类Car,那么在这个场景中Class_B应该是Toyota。所以,我不太清楚为什么我们需要为CaseSub B创建另一个头文件,当CaseJavaA应该覆盖这个文件时?@ YANO我上面说的,我猜可以是对你的响应,你可以在一个单独的C++文件中实现CaseBub,但是如果你想在另一个文件中使用它,你必须声明它,通常在.h文件中。嘿!谢谢,成功了。