错误C2065:但肯定是

时间:2015-12-02 20:59:28

标签: c++ visual-studio

#include <iostream>
#include <string>
#include <sstream>
#include <ostream>
#include "battleshipgrid.h"
using namespace std;

battleshipgrid::battleshipgrid ()
{
    for (int i=0;i < 10;i++)
    {
        for (int j =0; j<10;j++)
        {
            waters[i][j]='o';
        }

    }
}


void battleshipgrid::shotat (position pos, bool hit, char initial)
{
    if (hit)
    {
        waters[pos.getcol()][pos.rowindex()]=initial;
    }
    if (!hit)
    {
        waters[pos.getcol()][pos.rowindex()]='x';
    }
}

bool battleshipgrid::hit(position pos)
{
    if (o.hit(pos))
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool battleshipgrid::miss(position pos)
{
    if (!o.hit(pos))
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool battleshipgrid::empty(position pos)
{
    if (waters[pos.getcol()][pos.rowindex()]=='o')
    {
        return true;
    }
    else
    {
        return false;
    }

}

char battleshipgrid::boatinitial(position pos)
{
    return waters[pos.getcol()][pos.rowindex()];
}

void print ()
{
    for (int i=0; i <10;i++)
    {
        std::cout<<"\n";
        for (int j=0;j<10;j++)
        {
            cout<<waters[i][j]<<" ";
        }
    }

因此,您可以看到我收到未声明标识符的错误,这是确切的错误

错误C2065:&#39;水域&#39; :未声明的标识符

它说水是一个未声明的标识符。正如您所知,水已被用于多个区域,我们没有收到错误。如果我们注释掉void print方法它解决了所有问题,但我们需要print方法。如果你看到了什么我不能告诉我。

2 个答案:

答案 0 :(得分:2)

waters显然是class battleshipgrid的成员。

在此功能中, 不属于battleshipgrid ,您尝试访问成员变量waters

void print ()  // Not part of class battleshipgrid!
{
    for (int i=0; i <10;i++)
    {
        std::cout<<"\n";
        for (int j=0;j<10;j++)
        {
            cout<<waters[i][j]<<" "; // Trying to access data in class battleshipgrid!
                                     // but without referring to the class or an instance!
        }
    }
}

另外,以下是简化大量代码的方法:

bool battleshipgrid::hit(position pos)   { return o.hit(pos);  }
bool battleshipgrid::miss(position pos)  { return !o.hit(pos); }
bool battleshipgrid::empty(position pos) { return ('o'==waters[pos.getcol()][pos.rowindex()]); }

答案 1 :(得分:0)

似乎watersbattleshipgrid类的成员变量。另一方面,print()与该类无关。

您是否意味着实施

void battleshipgrid::print ()