我试图将一个类及其超类分成两个不同的头文件和cpp文件。在主要方法中,我想要包括它们。
目前我的主程序 example.cpp 如下所示:
#include <iostream>
#include "header.h"
using namespace std;
int main(void)
{
Rectangle Rect;
Rect.setWidth(5);
Rect.setHeight(7);
// Print the area of the object.
cout << "Total area: " << Rect.getArea() << endl;
return 0;
}
我的Rectangle.cpp是这样的:
#include <iostream>
#include "Shape.h"
#include "Rectangle.h"
using namespace std;
int getArea()
{
return (Shape::width * Shape::height);
}
我的Rectangle.h:
class Rectangle: public Shape
{
public:
int getArea();
};
Shape.cpp:
#include <iostream>
#include "Shape.h"
using namespace std;
void Shape::setWidth(int w)
{
width = w;
}
void Shape::setHeight(int h)
{
height = h;
}
和Shape.h:
class Shape
{
public:
void setWidth(int w);
void setHeight(int h);
int width;
int height;
};
header.h 只包含两个类的标题:
#include "Shape.h"
#include "Rectangle.h"
如果我编译它,编译器说:
Lukass-MacBook-Pro:Oberklassenbeispiel Lukas$ g++ -c Rectangle.cpp
Rectangle.cpp:9:17: error: invalid use of non-static data member 'width'
return (Shape::width * Shape::height);
~~~~~~~^~~~~
Rectangle.cpp:9:32: error: invalid use of non-static data member 'height'
return (Shape::width * Shape::height);
~~~~~~~^~~~~~
2 errors generated.
似乎Rectanlge.cpp
无法看到超类的属性。我该如何解决这个问题?
答案 0 :(得分:0)
当您使用#include时,您提供文件名,而不是文件中指定的类。在单个文件中具有多个紧密耦合的类是很常见的。你的例子并不是最好的(它是单一的继承,而不是标题所暗示的多重),但是使用它......
您可以拥有一个包含以下内容的shapes.h文件:
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};
// Derived class
class Rectangle: public Shape
{
public:
int getArea()
{
return (width * height);
}
};
然后在你的主函数(和包含它的文件)中。
#include <iostream>
#include "shapes.h"
int main(void)
{
Rectangle Rect;
Rect.setWidth(5);
Rect.setHeight(7);
// Print the area of the object.
cout << "Total area: " << Rect.getArea() << endl;
return 0;
}