“董事会”未在此范围内声明 我写了一个C++ Tic Tac Toe游戏,这是我至今所做的: #include <iostream> using namespace std; int main() { board *b; b->draw(); return 0; } class board { void draw() { for(int i = 0; i < 3;++i){ cout<<"[ ][ ][ ]"<<endl; } } };

“董事会”未在此范围内声明 我写了一个C++ Tic Tac Toe游戏,这是我至今所做的: #include <iostream> using namespace std; int main() { board *b; b->draw(); return 0; } class board { void draw() { for(int i = 0; i < 3;++i){ cout<<"[ ][ ][ ]"<<endl; } } };,c++,class,codeblocks,C++,Class,Codeblocks,然而,当我创建指向board的指针时,CodeBlocks给了我一个错误:“board”未在此范围内声明。我该如何解决这个问题?我是一个新的C++程序员。 你至少有以下问题正在进行: 在尝试访问堆对象之前,不要初始化它。在这个简单的场景中,我建议使用堆栈对象而不是堆 在堆上实例化电路板之前,没有已知的电路板类型。只需将board类声明移到main函数之前,或向前声明即可。在这个简单的例子中,我会选择正确的顺序 draw方法是私有的,因为这是类中的默认可见性。您需要将其标记为公共。或者,您可以切换

然而,当我创建指向board的指针时,CodeBlocks给了我一个错误:“board”未在此范围内声明。我该如何解决这个问题?我是一个新的C++程序员。

你至少有以下问题正在进行: 在尝试访问堆对象之前,不要初始化它。在这个简单的场景中,我建议使用堆栈对象而不是堆

在堆上实例化电路板之前,没有已知的电路板类型。只需将board类声明移到main函数之前,或向前声明即可。在这个简单的例子中,我会选择正确的顺序

draw方法是私有的,因为这是类中的默认可见性。您需要将其标记为公共。或者,您可以切换到struct而不是class,以使board方法可用,因为默认可见性在struct中是公共的

这将修复您的代码:

#include <iostream>
using namespace std;

class board
{
public:
    void draw()
    {
        for(int i = 0; i < 3;++i){
            cout<<"[ ][ ][ ]"<<endl;
        }
    }

};

int main()
{
    board b;
    b.draw();
    return 0;
}

您至少存在以下问题:

在尝试访问堆对象之前,不要初始化它。在这个简单的场景中,我建议使用堆栈对象而不是堆

在堆上实例化电路板之前,没有已知的电路板类型。只需将board类声明移到main函数之前,或向前声明即可。在这个简单的例子中,我会选择正确的顺序

draw方法是私有的,因为这是类中的默认可见性。您需要将其标记为公共。或者,您可以切换到struct而不是class,以使board方法可用,因为默认可见性在struct中是公共的

这将修复您的代码:

#include <iostream>
using namespace std;

class board
{
public:
    void draw()
    {
        for(int i = 0; i < 3;++i){
            cout<<"[ ][ ][ ]"<<endl;
        }
    }

};

int main()
{
    board b;
    b.draw();
    return 0;
}

您应该在main之前声明board类,因为在对象创建时它不知道board类。 之后代码也会崩溃,因为board*b只会生成指向board对象的指针,所以需要将代码更改为-

  #include <iostream>
  using namespace std;

class board
{  
 public :
 void draw()
  {
        for(int i = 0; i < 3;++i)
            cout<<"[ ][ ][ ]"<<endl;
  }
};
int main()
{
    board *b = new board();
    b->draw();
    if(b)
      delete b;
    b=0;
    return 0;
}

您应该在main之前声明board类,因为在对象创建时它不知道board类。 之后代码也会崩溃,因为board*b只会生成指向board对象的指针,所以需要将代码更改为-

  #include <iostream>
  using namespace std;

class board
{  
 public :
 void draw()
  {
        for(int i = 0; i < 3;++i)
            cout<<"[ ][ ][ ]"<<endl;
  }
};
int main()
{
    board *b = new board();
    b->draw();
    if(b)
      delete b;
    b=0;
    return 0;
}

将board类定义放在main之前。即使这样做,代码在运行时也会崩溃;您尚未初始化b。请注意,您有一个未初始化的指针,您必须使用new创建一个实例,并在完成main之前将其删除。@xorguy:或使用堆栈变量。请将board类定义放在main之前。即使这样做,您的代码在运行时也会崩溃;您尚未初始化b。请注意,您有一个未初始化的指针,您必须使用new创建一个实例,并在完成main之前将其删除。@xorguy:或使用堆栈变量。内存分配不带delete吗?的确,操作系统可能会释放它以避免泄漏,但这并不是一个好的例子。另外,请修改语法和缩进。@Laszlo-是!!但我只是想说明如何通过动态内存分配来创建对象。不过,您的代码是错误的,即使现在,您似乎认为delete无法在空指针上工作。此外,它在这里甚至不能为空…你搞错了,伙计。。示例演示了如何仅分配和取消分配内存。不删除内存分配?的确,操作系统可能会释放它以避免泄漏,但这并不是一个好的例子。另外,请修改语法和缩进。@Laszlo-是!!但我只是想说明如何通过动态内存分配来创建对象。不过,您的代码是错误的,即使现在,您似乎认为delete无法在空指针上工作。此外,它在这里甚至不能为空…你搞错了,伙计。。该示例演示了如何仅分配和取消分配内存。