在“.”之前需要不合格的 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.x
和Size.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) 最后,您在 main
和 InitializeScreen
两个不同的地方声明了您的屏幕。这些是不同的屏幕,这可能不是您想要的。查看您的代码,我猜想声明屏幕的正确位置实际上是在显示 class 中,因为您似乎希望 display
class 的两种方法都引用同一屏幕. Class 设计是编程的另一个方面,初学者为此苦苦挣扎。
简而言之,回到你的书,阅读关于向量的章节,或者至少阅读一个关于数组和指针的适当教程,其中解释了使用数组的许多限制。
我正在尝试使用代表屏幕位置的字符制作一个基本的控制台屏幕。我在 "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.x
和Size.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) 最后,您在 main
和 InitializeScreen
两个不同的地方声明了您的屏幕。这些是不同的屏幕,这可能不是您想要的。查看您的代码,我猜想声明屏幕的正确位置实际上是在显示 class 中,因为您似乎希望 display
class 的两种方法都引用同一屏幕. Class 设计是编程的另一个方面,初学者为此苦苦挣扎。
简而言之,回到你的书,阅读关于向量的章节,或者至少阅读一个关于数组和指针的适当教程,其中解释了使用数组的许多限制。