在“.”之前需要不合格的 ID屏幕显示脚本中的标记

Expected unqualified-id before '.' token in screen display script

我正在尝试使用代表屏幕位置的字符制作一个基本的控制台屏幕。我在 "char _Screen[screenSize.x][screenSize.y] = MainDisplay.InitializeScreen(screenSize,defaultIcon);" 和 "display.DisplayScreen(_Screen);" 行遇到问题 他们试图从对象 "display" 的实例调用函数。我假设我在这些行中或在定义 类 时没有使用正确的语法。 如果您能告诉我我做错了什么以及如何解决它,我将不胜感激

谢谢。

代码如下:

#include <iostream>

using namespace std;

struct Vector2 {
   static int x;
   static int y;
};

class Object {
     public:

    static Vector2 Size;
    static Vector2 Position;
    static char icon;
};

class display {
    public:

        void DisplayScreen(char Screen[100][100])
        {
            for (int i = 0; i < sizeof(Screen) / sizeof(*Screen);i++)
            {
                for (int j = 0; j < sizeof(Screen[1]) / sizeof(*Screen[1]);j++)
                {
                    cout << Screen[i][j];
                }
                cout << endl;
            }
        }

        char InitializeScreen(Vector2 Size,char icon)
        {
            char Screen[Size.x][Size.y];
            for (int i = 0; i < Size.y;i++)
            {
                for (int j = 0; j < Size.x;j++)
                {
                    Screen[i][j] = icon;
                }
            }
        }
};

int main()
{
    Vector2 screenSize;
    screenSize.x = 100;
    screenSize.y = 100;
    char defaultIcon = '.';

    display MainDisplay;
    char _Screen[screenSize.x][screenSize.y] = MainDisplay.InitializeScreen(screenSize,defaultIcon);
    display.DisplayScreen(_Screen);
}

我将尝试消除您对 C++ 的一些重大误解。上面的代码无法修复,您需要重新开始。特别是你需要学习如何使用向量而不是数组。数组在 C++ 中有各种怪癖,使它们难以使用,向量更容易。

1) 除非数组的大小是编译时间常数,否则不能声明数组。所以这是不合法的

char Screen[Size.x][Size.y];

因为Size.xSize.y是变量。这样就可以了

char Screen[100][100];

如果您需要可变大小的数组,技术是使用动态分配。进行动态分配的简单方法是使用 std::vector class。这是 C++

char 的二维向量
std::vector<std::vector<char>> Screen(Size.x, std::vector<char>(Size.y));

2) 你不能 return 函数中的数组,所以即使忽略第 1 点,这也是不合法的

char _Screen[screenSize.x][screenSize.y] = MainDisplay.InitializeScreen(screenSize,defaultIcon);

同样,解决数组问题的通常方法是使用 std::vector,它可以 return 从函数中编辑。

3) 不能将数组传递给 C++ 中的函数。所以虽然这段代码是合法的

    void DisplayScreen(char Screen[100][100])

Screen 在此代码中不是数组,它是一个指针。在 C++ 中任何将数组声明为函数参数的尝试都会被转换为指针。这对初学者来说尤其令人困惑。这个问题的答案是使用 std::vector 而不是数组。向量可以作为参数传递给函数。

4) 您不能使用sizeof 来获取指针指向的数组的大小。所以这段代码是合法的,但并不像你期望的那样工作

for (int i = 0; i < sizeof(Screen) / sizeof(*Screen);i++)

如果 Screen 是一个数组,此代码将起作用,但如第 3 点所述,它不是,它是一个指针。这个问题的答案是使用 std::vector 而不是数组,因为向量有一个内置的 size 方法,它 return 是向量的大小,像这样

for (int i = 0; i < Screen.size(); i++)

5) 最后,您在 mainInitializeScreen 两个不同的地方声明了您的屏幕。这些是不同的屏幕,这可能不是您想要的。查看您的代码,我猜想声明屏幕的正确位置实际上是在显示 class 中,因为您似乎希望 display class 的两种方法都引用同一屏幕. Class 设计是编程的另一个方面,初学者为此苦苦挣扎。

简而言之,回到你的书,阅读关于向量的章节,或者至少阅读一个关于数组和指针的适当教程,其中解释了使用数组的许多限制。