RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 818362
Accepted
Johnny Rage
Johnny Rage
Asked:2020-04-24 01:47:19 +0000 UTC2020-04-24 01:47:19 +0000 UTC 2020-04-24 01:47:19 +0000 UTC

未知原因的错误 C2061

  • 772

在我的程序(关于 Pavlovskaya 继承的实验室工作)中,有许多错误表明我犯了语法错误。当我开始为从 Factory.h 继承的 Triangle.h 类编写方法时,就出现了这种行为。我试图分别从 Tetragon.h 和 Rectangle.h 中删除 Triangle 和 Tetragon 类的连接 - 它没有帮助。错误显示在类标题中。如何纠正?原则上造成此类错误的原因是什么?

UPD:为了消除交叉包含,我做了一个初步的类声明,结果,在旧的错误中又增加了 147 个错误。在我描述 Triangle 中的 Move 和 PointIsIncluded 方法之前,一切正常。

我附上标题代码和错误窗口的输出:

错误 1 ​​错误 C2061:语法错误:标识符“三角形”26 1

Error 5 error C2061: syntax error: identifier "Tetragon" 32 1 (在标题Triangle.h中第32行和第33行2次(为什么一行出现2次?)也标明了)

    /*Triangle.h*/
    #pragma once
    #include "Factory.h"
    #include <iostream>
    #include "pre_tetragon.h"
    using namespace std;
    class Triangle: protected Factory
    {
    private:
        const int size = 3; //размер массива    

    public:
        float K[3]; //коэффициенты равенства уравнений
        float coordx[3]; // координаты Х точек фигуры
        float coordy[3]; // координаты y точек фигуры
        bool IntersectLine[3]; // сколько точек находится в другой фигуре
        float minx, miny, maxx, maxy; // проекции на оси
        float interPointX[3]; //Х точки пересечения
        /*МЕТОДЫ*/
    private:
        void WriteFormation()
        {
            cout << "formation     0" << endl;
            cout << "           2     1" << endl;
        }
    public:

        Triangle();
        Triangle(float x1, float y1, float x2, float y2, float x3, float y3);
        ~Triangle();
        void CalcBorders(); // высчитываем границы полигона
        void Move(float onX, float onY);
        bool IsInclude(Tetragon Tet);//ошибка тут
        bool PointIsInclude(Tetragon Tet, int L);//и тут
    };


    /*Tetragon.h*/
    #pragma once
    #include "Factory.h"
    #include <iostream>
    #include "pre_triangle.h"
    using namespace std;
    class Tetragon :protected Factory
    {
        //ПЕРЕМЕННЫЕ
    private:
        const int size = 4; //размер массива    
    public:
        float K[4]; //коэффициенты равенства уравнений
        float coordx[4]; // координаты Х точек фигуры
        float coordy[4]; // координаты y точек фигуры
        bool IntersectLine[4];//существует ли пересечение некоторой данной линии.
        float minx, miny, maxx, maxy; // Крайние точки полигона - мысы
        float interPointX[4]; //Х точки пересечения
        //МЕТОДЫ
    public:
        Tetragon(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4);
        Tetragon();
        ~Tetragon();
        void CalcBorders(); // высчитываем границы полигона
        void Move(float onX, float onY); 
        bool IsInclude(Triangle Tri);//ошибка встречается тут
        bool PointIsInclude(Triangle Tri, int L);//и тут
    private:
        void WriteFormation()
        {
            cout << "formation    0   1" << endl;
            cout << "             3   2" << endl;
        }
    };

    /*Код Factory.h*/
    #pragma once
    class Factory
    {
    protected: 
        float RetMaxX(float *x, int size); // Методы получения мысов фигуры
        float RetMinX(float *x, int size);
        float RetMaxY(float *y, int size);
        float RetMinY(float *y, int size);
        float CalcK(float *y, float y0, int i, int j);
        float CalcPointX(float *x, float K, int i, int j);
    //  bool Factory::CalcEqu(float px, float *x, int i, int j, float K);
    public:
        Factory();
        void ShowFig(float *x, float *y, int size);
        void setCoordinates(float *x, float *y, int size);

        void virtual  WriteFormation();
        ~Factory();
    };
    /*код pre_triangle.h и pre_tetragon.h*/
    #pragma once
    class Triangle;
/*____________________________*/
    #pragma once
    class Tetragon;

/*CPP файлы*/
    /*Triangle.cpp*/
    #pragma once
    #include "stdafx.h"
    #include "Triangle.h"
    #include <iostream>
    #include "Tetragon.h"
    using namespace std;
    void Triangle::Move(float onX = 0, float onY = 0)
    {
        for (int i = 0; i < size; i++)
        {
            coordx[i] = coordx[i] + onX;
            coordx[i] = coordy[i] + onY;
        }
    }
    void Triangle::CalcBorders()
    {
        minx = RetMinX(coordx, 3);
        miny = RetMinY(coordy, 3);
        maxx = RetMaxX(coordx, 3);
        maxy = RetMaxY(coordy, 3);
    }

    bool Triangle::PointIsInclude(Tetragon Tet, int L)
    {
        for (int P = 0; P < 3; P++)
            IntersectLine[P] = false;
        //находит коэффициент равенства уравнений
        K[0] = CalcK(coordy, Tet.coordy[L], 0, 1);
        K[1] = CalcK(coordy, Tet.coordy[L], 1, 2);
        K[2] = CalcK(coordy, Tet.coordy[L], 2, 0);
        //ищем мысы
        CalcBorders();
        /*Словесный алгоритм
        Изначально у нас есть только У = b это у нас луч параллельный Ох и исходя из У мы должны найти Х точки пересечения.
        Если он лежит в границах полигона то засчитываем пересечение, важно проверить, чтобы Х точки пересечения луча с ребром полигона был больше чем значение Х самой точки которую мы проверяем. */
        if (!std::isinf(K[0]))
            interPointX[0] = CalcPointX(coordx, K[0], 0, 1);
        else interPointX[0] = NAN;
        if (!std::isinf(K[1]))
            interPointX[1] = CalcPointX(coordx, K[1], 1, 2);
        else interPointX[1] = NAN;
        if (!std::isinf(K[2]))
            interPointX[2] = CalcPointX(coordx, K[2], 2, 0);
        else interPointX[2] = NAN;

        //проходим финальные условия - если точка в мысу И точки удовлетворяют уравнению - возвращаем TRUE
        //здесь отображены пересечения линий. Дальше нужно подсчитать количество этих пересечений

        for (int ID = 0; ID < 3; ID++)
        {
            if (interPointX[ID] == interPointX[ID])
            {
                if (interPointX[ID] > Tet.coordx[L])
                {
                    if ((interPointX[ID] <= maxx) && (interPointX[ID] >= minx) && (Tet.coordy[L] <= maxy) && (Tet.coordy[L] >= miny))
                    {
                        IntersectLine[ID] = true;
                    }
                }
            }
        }
        float *mast = new float[4];
        for (int i = 0; i < 3; i++)
        {
            mast[i] = interPointX[i];
        }
        mast[3] = interPointX[0];
        for (int i = 0; i < 4; i++)
        {
            if (mast[i] == mast[i + 1])
            {
                IntersectLine[i] = false;
            }
        }
        delete mast;
        int Intersects = 0;
        for (int ID = 0; ID < 4; ID++)
        {
            if (IntersectLine[ID] == true) Intersects++;
        }
        if (Intersects % 2 == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    Triangle::Triangle(float x1, float y1, float x2, float y2, float x3, float y3)
    {
        coordx[0] = x1;
        coordx[1] = x2;
        coordx[2] = x3;
        coordy[0] = y1;
        coordy[1] = y2;
        coordy[2] = y3;
    }
    Triangle::Triangle()
    {
        WriteFormation();
        for (int i = 0; i < size; i++)
        {
            coordx[i] = 0;
            coordy[i] = 0;
        }
    }



    Triangle::~Triangle()
    {
    }


    /*Tetragon.cpp*/
    #include "stdafx.h"
    #include "Tetragon.h"
    #include "Triangle.h"
    /*Да гори оно уже синим пламенем*/
    /*переписать isInclude



    */

    Tetragon::Tetragon()
    {
        setCoordinates(coordx, coordy, 4);
    }


    void Tetragon::Move(float onX = 0, float onY = 0)
    {
        for (int i = 0; i < size; i++)
        {
            coordx[i] = coordx[i] + onX;
            coordy[i] = coordy[i] + onY;
        }
    }
    void Tetragon::CalcBorders()
    {
        minx = RetMinX(coordx, 4);
        miny = RetMinY(coordy, 4);
        maxx = RetMaxX(coordx, 4);
        maxy = RetMaxY(coordy, 4);
    }
    /*void Tetragon::CalculateK_s(Triangle Tri)
    {
        K[0] = CalcK(coordy, Tri.y[0], 0, 1);
        K[1] = CalcK(coordy, Tri.y[1], 1, 2);
        K[2] = CalcK(coordy, Tri.y[2], 2, 3);
        K[3] = CalcK(coordy, Tri.y[3], 3, 0);
    }*/
    bool Tetragon::PointIsInclude(Triangle Tri, int L)
    {
        for (int P = 0; P < 4; P++)
            IntersectLine[P] = false;
        //находит коэффициент равенства уравнений
        K[0] = CalcK(coordy,Tri.coordy[L], 0, 1);
        K[1] = CalcK(coordy, Tri.coordy[L], 1, 2);
        K[2] = CalcK(coordy, Tri.coordy[L], 2, 3);
        K[3] = CalcK(coordy, Tri.coordy[L], 3, 0);
        //ищем мысы
        CalcBorders();
        /*Словесный алгоритм
        Изначально у нас есть только У = b это у нас луч параллельный Ох и исходя из У мы должны найти Х точки пересечения.
        Если он лежит в границах полигона то засчитываем пересечение, важно проверить, чтобы Х точки пересечения луча с ребром полигона был больше чем значение Х самой точки которую мы проверяем. */
        if (!std::isinf(K[0]))
        interPointX[0] = CalcPointX(coordx, K[0], 0, 1);
        else interPointX[0] = NAN;
        if (!std::isinf(K[1]))
        interPointX[1] = CalcPointX(coordx, K[1], 1, 2);
        else interPointX[1] = NAN;
        if (!std::isinf(K[2]))
        interPointX[2] = CalcPointX(coordx, K[2], 2, 3);
        else interPointX[2] = NAN;
        if (!std::isinf(K[3]))
        interPointX[3] = CalcPointX(coordx, K[3], 3, 0);
        else interPointX[3] = NAN;
        //проходим финальные условия - если точка в мысу И точки удовлетворяют уравнению - возвращаем TRUE
        //здесь отображены пересечения линий. Дальше нужно подсчитать количество этих пересечений

        for (int ID = 0; ID < 4; ID++)
        {
            if (interPointX[ID] == interPointX[ID])
            {
                if (interPointX[ID] > Tri.coordx[L])
                {
                    if ((interPointX[ID] <= maxx) && (interPointX[ID] >= minx) && (Tri.coordy[L] <= maxy) && (Tri.coordy[L] >= miny))
                    {
                        IntersectLine[ID] = true;
                    }
                }
            }
        }
        float *mast = new float[5];
        for (int i = 0; i < 4; i++)
        {
            mast[i] = interPointX[i];
        }
        mast[4] = interPointX[0];
        for (int i = 0; i < 4; i++)
        {
            if (mast[i] == mast[i + 1])
            {
                IntersectLine[i] = false;
            }
        }
        delete mast;
        int Intersects = 0;
        for (int ID = 0; ID < 4; ID++)
        {
            if (IntersectLine[ID] == true) Intersects++;
        }
        if (Intersects % 2 == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    bool Tetragon::IsInclude(Triangle Tri)
    {
        bool IsInclude = false;
        int Includes = 0;
        for (int ID = 0; ID < 3; ID++)
        {
            if (PointIsInclude(Tri, ID))
            {
                Includes++;
            }
        }
        if (Includes == 3) IsInclude = true;
        return IsInclude;
    }
    Tetragon::Tetragon(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
    {
        coordx[0] = x1; coordy[0] = y1; 
        coordx[1] = x2; coordy[1] = y2;
        coordx[2] = x3; coordy[2] = y3;
        coordx[3] = x4; coordy[3] = y4; 
    }
    Tetragon::~Tetragon()
    {
    }
    /*Tetragon.cpp*/
    #include "stdafx.h"
    #include "Tetragon.h"
    #include "Triangle.h"
    Tetragon::Tetragon()
    {
        setCoordinates(coordx, coordy, 4);
    }

    void Tetragon::Move(float onX = 0, float onY = 0)
    {
        for (int i = 0; i < size; i++)
        {
            coordx[i] = coordx[i] + onX;
            coordy[i] = coordy[i] + onY;
        }
    }
    void Tetragon::CalcBorders()
    {
        minx = RetMinX(coordx, 4);
        miny = RetMinY(coordy, 4);
        maxx = RetMaxX(coordx, 4);
        maxy = RetMaxY(coordy, 4);
    }
    /*void Tetragon::CalculateK_s(Triangle Tri)
    {
        K[0] = CalcK(coordy, Tri.y[0], 0, 1);
        K[1] = CalcK(coordy, Tri.y[1], 1, 2);
        K[2] = CalcK(coordy, Tri.y[2], 2, 3);
        K[3] = CalcK(coordy, Tri.y[3], 3, 0);
    }*/
    bool Tetragon::PointIsInclude(Triangle Tri, int L)
    {
        for (int P = 0; P < 4; P++)
            IntersectLine[P] = false;
        //находит коэффициент равенства уравнений
        K[0] = CalcK(coordy,Tri.coordy[L], 0, 1);
        K[1] = CalcK(coordy, Tri.coordy[L], 1, 2);
        K[2] = CalcK(coordy, Tri.coordy[L], 2, 3);
        K[3] = CalcK(coordy, Tri.coordy[L], 3, 0);
        //ищем мысы
        CalcBorders();
        /*Словесный алгоритм
        Изначально у нас есть только У = b это у нас луч параллельный Ох и исходя из У мы должны найти Х точки пересечения.
        Если он лежит в границах полигона то засчитываем пересечение, важно проверить, чтобы Х точки пересечения луча с ребром полигона был больше чем значение Х самой точки которую мы проверяем. */
        if (!std::isinf(K[0]))
        interPointX[0] = CalcPointX(coordx, K[0], 0, 1);
        else interPointX[0] = NAN;
        if (!std::isinf(K[1]))
        interPointX[1] = CalcPointX(coordx, K[1], 1, 2);
        else interPointX[1] = NAN;
        if (!std::isinf(K[2]))
        interPointX[2] = CalcPointX(coordx, K[2], 2, 3);
        else interPointX[2] = NAN;
        if (!std::isinf(K[3]))
        interPointX[3] = CalcPointX(coordx, K[3], 3, 0);
        else interPointX[3] = NAN;
        //проходим финальные условия - если точка в мысу И точки удовлетворяют уравнению - возвращаем TRUE
        //здесь отображены пересечения линий. Дальше нужно подсчитать количество этих пересечений

        for (int ID = 0; ID < 4; ID++)
        {
            if (interPointX[ID] == interPointX[ID])
            {
                if (interPointX[ID] > Tri.coordx[L])
                {
                    if ((interPointX[ID] <= maxx) && (interPointX[ID] >= minx) && (Tri.coordy[L] <= maxy) && (Tri.coordy[L] >= miny))
                    {
                        IntersectLine[ID] = true;
                    }
                }
            }
        }
        float *mast = new float[5];
        for (int i = 0; i < 4; i++)
        {
            mast[i] = interPointX[i];
        }
        mast[4] = interPointX[0];
        for (int i = 0; i < 4; i++)
        {
            if (mast[i] == mast[i + 1])
            {
                IntersectLine[i] = false;
            }
        }
        delete mast;
        int Intersects = 0;
        for (int ID = 0; ID < 4; ID++)
        {
            if (IntersectLine[ID] == true) Intersects++;
        }
        if (Intersects % 2 == 0)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
    bool Tetragon::IsInclude(Triangle Tri)
    {
        bool IsInclude = false;
        int Includes = 0;
        for (int ID = 0; ID < 3; ID++)
        {
            if (PointIsInclude(Tri, ID))
            {
                Includes++;
            }
        }
        if (Includes == 3) IsInclude = true;
        return IsInclude;
    }
    Tetragon::Tetragon(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
    {
        coordx[0] = x1; coordy[0] = y1; 
        coordx[1] = x2; coordy[1] = y2;
        coordx[2] = x3; coordy[2] = y3;
        coordx[3] = x4; coordy[3] = y4; 
    }
    Tetragon::~Tetragon()
    {
    }

    /*Factory.cpp*/
    #include "stdafx.h"
    #include "Factory.h"
    #include <iostream>
    using namespace std;

    void Factory::ShowFig(float *x, float *y ,int size)
    {
        for (int i = 0; i < size; i++)
        {
            cout << "x = " << x[i] << ",    y = " << y[i] << ";" << endl;
        }
    }

    void Factory::WriteFormation()
    {}

    void Factory::setCoordinates(float *x, float *y, int size)
    {
        cout << "input coordinates of points" << endl;
        WriteFormation();
        for (int i = 0; i < size; i++)
        {
            cin >> x[i] >> y[i];
        }
    }

    float Factory::RetMaxX(float *x, int size)
    {
        float xMax = FLT_MIN;
        for (int i = 0; i < size; i++){
            if (x[i] > xMax) xMax = x[i];
        }
        return xMax;
    }

    float Factory::RetMinX(float *x, int size)
    {
        float xMin = FLT_MAX;
        for (int i = 0; i < size; i++){
            if (x[i] < xMin) xMin = x[i];
        }
        return xMin;
    }
    float Factory::RetMaxY(float *y, int size)
    {
        float yMax = FLT_MIN;
        for (int i = 0; i < size; i++){
            if (y[i] > yMax) yMax = y[i];
        }
        return yMax;
    }

    float Factory::RetMinY(float *y, int size)
    {
        float yMin = FLT_MAX;
        for (int i = 0; i < size; i++){
            if (y[i] < yMin) yMin = y[i];
        }
        return yMin;
    }

    float Factory::CalcK(float *y, float y0, int i, int j)
    {
        //i - первый
        //j - второй
        float k = 0;
        k = (y0 - y[i]) / (y[j] - y[i]);
        return k;
    }
    float Factory::CalcPointX(float *x, float K, int i, int j)
    {
        float x0 = 0;
        x0 = K * (x[j] - x[i]) + x[i];//X[j] - x2, x[i] - x1, x0 - искомый х
        return x0;
    }
    /*bool Factory::CalcEqu(float px, float *x, int i, int j, float K)
    {
        if ((px - x[i]) / (x[j] - x[i]) == K)
            return true;
    }*/

    Factory::Factory()
    {
    }


    Factory::~Factory()
    {
    }
c++
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Johnny Rage
    2020-04-28T22:34:27Z2020-04-28T22:34:27Z

    我通过添加一个外部类并向其传输方法解决了这个问题。奇怪,但由于某种原因,班级预先声明并没有解决我的问题......

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5