屏幕显示脚本中'.'令牌之前的预期非限定 id
Expected unqualified-id before '.' token in screen display script
我正在尝试使用表示屏幕上位置的字符制作基本的控制台屏幕。我在行上有一个问题:" 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.x
和Size.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)最后,您在main
和InitializeScreen
中在两个不同的位置声明了屏幕。这些是不同的屏幕,大概不是您的意图。查看您的代码,我猜想声明您的屏幕的正确位置实际上是在显示类中,因为您似乎希望display
类的两种方法都可以参考同一屏幕。课堂设计是初学者与之斗争的编程的另一个方面。
简而言之,回到您的书中,阅读有关向量的章节,或者至少阅读了有关数组和指针的适当教程,这些教程解释了使用数组的许多局限性。
- 如何通过cpp程序运行shell脚本
- 在程序中编写脚本来编写和编译代码
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- 如何在c++中使用system()来运行包含空格的python脚本
- FFMPEG配置文件级别id大小无效
- 在cygwin中运行c++脚本时发生错误
- 方法内部但循环仍得到预期的不合格id错误C++
- 如何将真正的字符串从python c-api转换为python脚本
- 用于将C++代码转换为 Web 程序集的脚本未终止
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何获取 GLFW 窗口 ID?
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- 显示数组中的学生 ID 和最高分
- C++:"("令牌"之前有预期的非限定 id 指向类中成员函数的指针
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在原子中使用犰狳与脚本
- C++ 文本消息解码器脚本 编译器 "expects unqualified id" 之前 if 和 else 语句
- 屏幕显示脚本中'.'令牌之前的预期非限定 id