屏幕显示脚本中'.'令牌之前的预期非限定 id

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

本文关键字:id 脚本 令牌 屏幕显示      更新时间:2023-10-16

我正在尝试使用表示屏幕上位置的字符制作基本的控制台屏幕。我在行上有一个问题:" char _screen [screensize.x] [screensize.y] = maindisplay.initializesCreen(screenSize,defaulticon);"answers" display.displayscreen(_screen);";他们试图从对象实例中调用函数为"显示"。我认为我不使用正确的语法,在这些行或定义类时。如果您能告诉我我做错了什么以及如何解决它,我将非常感谢它

谢谢。

这是代码:

#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类。这是C

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

2)您无法从功能中返回数组,因此即使忽略点1,这也不是合法的

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

再次对数组问题的通常答案是使用可以从函数返回的std::vector

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方法,该方法返回向量大小,例如此

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

5)最后,您在mainInitializeScreen中在两个不同的位置声明了屏幕。这些是不同的屏幕,大概不是您的意图。查看您的代码,我猜想声明您的屏幕的正确位置实际上是在显示类中,因为您似乎希望display类的两种方法都可以参考同一屏幕。课堂设计是初学者与之斗争的编程的另一个方面。

简而言之,回到您的书中,阅读有关向量的章节,或者至少阅读了有关数组和指针的适当教程,这些教程解释了使用数组的许多局限性。