'{'token {之前的预期类名

时间:2014-04-11 10:37:44

标签: c++

我有一个非常简单的程序,两个类,继承,我无法弄清楚它为什么不起作用。这让我很紧张。

我在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'之前得到错误'期望的类名

5 个答案:

答案 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.hshapeparent.h

答案 4 :(得分:1)

必须在声明square之前定义 class shapeparent。 有square.h如下:

#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