我有一个非常简单的程序,两个类,继承,我无法弄清楚它为什么不起作用。这让我很紧张。
我在main.cpp
#include <iostream>
#include "square.h"
class shapeparent
{
protected:
int width;
int height;
public:
void setvalues(int a, int b)
{
width = a;
height = b;
}
};
int main()
{
square small;
small.setvalues(5,5);
small.printarea();
// return 0;
}
然后在square.h
#ifndef SQUARE_H
#define SQUARE_H
class square: public shapeparent
{
public:
void printarea()
{
// std::cout << width << std::endl;
// std::cout << height << std::endl;
int area = width*height;
std::cout << area << std::endl;
}
};
#endif
我在square.h中的{'token'之前得到错误'期望的类名
答案 0 :(得分:2)
类shareparent应在class square之前定义。 C +程序中使用的任何名称应在使用前首先定义。
我建议将类shapeparent的定义放在单独的头文件中,例如"shareparent.h"
,并在文件square.h
中包含此标头。例如
#ifndef SQUARE_H
#define SQUARE_H
#include "shareparent.h"
class square: public shapeparent
//...
答案 1 :(得分:2)
所以,来自莫斯科的Nightfold和Vlad表示,shapeparent
类必须在square
类之前声明,它来自它:
class shapeparent
{
...
};
class square : public shapeparent
{
...
}
答案 2 :(得分:1)
错误意味着“shapeparent”是一个未知符号,因为在指定shapepepernt之前包含了square。
最常见的解决方案是将shapeparent类放入单独的文件中,并将其包含在square.h中。
答案 3 :(得分:1)
最好的办法是创建另一个包含shapeparent.h
类的文件shapeparent
。请记住正确设置包含警戒(#ifndef SHAPEPARENT_H
等)。
然后在类声明之前编辑shape.h
以获得#include "shape.h"
。这将解决错误。
在main.cpp
中,同时包含shape.h
和shapeparent.h
。
答案 4 :(得分:1)
#ifndef SQUARE_H
#define SQUARE_H
class shapeparent
{
protected:
int width;
int height;
public:
void setvalues(int a, int b)
{
width = a;
height = b;
}
};
class square: public shapeparent
{
public:
void printarea()
{
// std::cout << width << std::endl;
// std::cout << height << std::endl;
int area = width*height;
std::cout << area << std::endl;
}
};
#endif