Seeig我是C ++的新手我以为我会尝试编写一个非常简单的控制台应用程序来填充2D数组并显示其内容。
但我写的代码不会编译。
我得到的一些错误是:
错误C2065:'box':未声明的标识符
错误C2228:'.GenerateBox'左边必须有class / struct / union
这是我的代码:
#include <iostream>
using namespace std;
int main()
{
Box box;
box.GenerateBox();
}
class Box
{
private:
static int const maxWidth = 135;
static int const maxHeight = 60;
char arrTest[maxWidth][maxHeight];
public:
void GenerateBox()
{
for (int i=0; i<maxHeight; i++)
for (int k=0; k<maxWidth; k++)
{
arrTest[i][k] = 'x';
}
for (int i=0; i<maxHeight; i++)
{
for (int k=0; k<maxWidth; k++)
{
cout << arrTest[i][k];
}
cout << "\n";
}
}
};
有什么想法导致这些错误?
答案 0 :(得分:8)
C ++编译器从上到下一次性读取源文件。您已经在main()后面的底部描述了Box类,在您尝试使用该类的部分之后。因此,当编译器到达你说'Box box;'的部分时,它还没有看到类定义,因此不知道'Box'的含义。
答案 1 :(得分:6)
将main
功能移到代码底部。具体而言,您需要在引用之前定义Box
。
只有当你只使用class Box;
作为指针或参考时,你才能获得前向声明(即Box
)的唯一时间。
答案 2 :(得分:5)
您必须在使用之前定义Box。因此,对于您的小测试,您可以将您的类定义放在main之前。
对于较大的程序,您将把您的类定义放在源文件顶部的.h头文件中。
答案 3 :(得分:2)
是由于预先声明了main()。在使用类Box之后使用main。
答案 4 :(得分:0)
@nikko是对的。你必须在使用它之前声明Box类。通过
extern class Box;
//use box class here
//then define it later as you wish