为什么这个c ++代码不能编译?

时间:2011-08-02 08:57:05

标签: c++ visual-c++

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";
      }
    }
};

有什么想法导致这些错误?

5 个答案:

答案 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