-1

多分私はそれを間違って初期化していますか?これが私たちの先生が私たちにそれを行う方法を教えてくれた方法であると確信してください..しかし私は困惑しています。この関数をアクセサーとして使用し、データを取得して、メンバー「Entrance」の下の構造体「coordinate」にすでに格納されているものを表示しようとしています。

ヘッダーファイル:

#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;

#include "type.h"
const int MAX = 50;
#ifndef MazeClass_H
#define MazeClass_H

class MazeClass
{
    private:
        SquareType Maze[MAX][MAX];
        coordinate      Entrance, Exit;
        int     height, width;
    public:
        MazeClass();
        void    ReadMaze(ifstream&);
        void    DisplayMaze();
        void    GetEntrance(coordinate);
        void    GetExit(coordinate);
        void    MarkVisited(coordinate);
        void    MarkPath(coordinate);
        bool    IsWall(coordinate);
        bool    IsClear(coordinate);
        bool    IsPath(coordinate);
        bool    IsVisited(coordinate);
        bool    IsExit(coordinate);
        bool    IsInMaze(coordinate);
};
#endif

実装ファイル:

#include "MazeClass.h"
#include <iostream>
#include <cstdlib>

char maze[50][50];
MazeClass::MazeClass()
{
}

void MazeClass::ReadMaze(ifstream& myIn)
{
    int x, y;
    myIn >> x;
    myIn >> y;
    height = x;
    width = y;
    myIn >> x;
    myIn >> y;
    Entrance.row = x;
    Entrance.col = y;
    myIn >> x;
    myIn >> y;
    Exit.row = x;
    Exit.col = y;
    myIn.ignore(100, '\n');
    for(int i = 0; i < height; i++)
    {
        for(int k = 0; k < width + 1; k++)
        {
            myIn.get(maze[i][k]);
            if(maze[i][k] == '*')
                Maze[i][k] == Wall;
            else
                Maze[i][k] == Clear;
        }
    }
}

void MazeClass::DisplayMaze()
{

    for(int i = 0; i < height; i++)
    {
        for(int k = 0; k < width + 1; k++)
        {
            cout << maze[i][k];
        }
    }
}

void MazeClass::GetEntrance(coordinate Entrance)
{
}

void MazeClass::GetExit(coordinate Exit)
{
}

そしてそれを試して使用するための私のファイル:

#include "MazeClass.h"
#include<iostream>
#include<fstream>
using namespace std;


int main(int argc,char *argv[])
{
    MazeClass maze;
    ifstream myIn;
    int x,y;
    string filename = argv[1]; // command line arguement stuff

    myIn.open(filename.c_str());
    maze.ReadMaze(myIn); //reads in the maze from a data file
    maze.DisplayMaze();
    cout << "The entrance is at: " << maze.GetEntrance().row << " " << maze.GetEntrance.col << endl;
    myIn.close();

    return 0;
}

そして、このエラーが発生します:

ola4A1.cc:17: error: no matching function for call to ‘MazeClass::GetEntrance()’
MazeClass.h:21: note: candidates are: void MazeClass::GetEntrance(coordinate)
ola4A1.cc:17: error: ‘maze.MazeClass::GetEntrance’ does not have class type

私はこのように座標を配置しようとしました:

#include "MazeClass.h"
#include<iostream>
#include<fstream>
using namespace std;


int main(int argc,char *argv[])
{
    MazeClass maze;
    ifstream myIn;
    int x,y;
    string filename = argv[1]; // command line arguement stuff

    myIn.open(filename.c_str());
    maze.ReadMaze(myIn); //reads in the maze from a data file
    maze.DisplayMaze();
    cout << "The entrance is at: " << maze.GetEntrance(coordinate).row << " " << maze.GetEntrance(coordinate).col << endl;
    myIn.close();

    return 0;
}

しかし、私はそれからエラーを受け取ります:

ola4A1.cc: In function ‘int main(int, char**)’:
ola4A1.cc:17: error: expected primary-expression before ‘)’ token
ola4A1.cc:17: error: expected primary-expression before ‘)’ token

その後…「エントランス」にこんな感じで追加しました。

#include "MazeClass.h"
#include<iostream>
#include<fstream>
using namespace std;


int main(int argc,char *argv[])
{
    MazeClass maze;
    ifstream myIn;
    int x,y;
    string filename = argv[1]; // command line arguement stuff

    myIn.open(filename.c_str());
    maze.ReadMaze(myIn); //reads in the maze from a data file
    maze.DisplayMaze();
    cout << "The entrance is at: " << maze.GetEntrance(coordinate Entrance).row << " " << maze.GetEntrance(coordinate Entrance).col << endl;
    myIn.close();

    return 0;
}

そしてそれは私にこのエラーを与えます...

ola4A1.cc: In function ‘int main(int, char**)’:
ola4A1.cc:17: error: expected primary-expression before ‘Entrance’
ola4A1.cc:17: error: expected primary-expression before ‘Entrance’

そうです...私は困惑しています...どんな助けでも大歓迎です!私は今これを1時間理解しようとしています:(

4

4 に答える 4

1

エラーメッセージは実際に何が間違っているかを示しています:

error: no matching function for call to ‘MazeClass::GetEntrance()’
                                                              ^^^^^

あなたが提供した機能は次のとおりです。

void MazeClass::GetEntrance(coordinate Entrance)
                          ^^^^^^^^^^^^^^^^^^^^^^

上記に注意してください^^^^^^

ご覧のとおり、両方の機能は同じではありません!
オブジェクトをパラメーターとして受け取るメソッドを宣言および定義しましたcoordinateが、引数を取らないメソッドを呼び出しています。明らかに、コンパイラーはそのようなメソッドを見つけられず、適切に文句を言います。

于 2013-03-20T07:02:08.533 に答える
1

の定義はGetEntrance、(タイプの)パラメーターが必要であると述べていますcoordinate

呼び出そうとする場所では、パラメーターを渡していないため、パラメーターなしで呼び出すことができる他のオーバーロードを探しています。

また、おそらく代わりにmaze.GetEntrance.col必要であることに注意してください。maze.GetEntrance().col

于 2013-03-20T07:02:12.390 に答える
1

1) を呼び出していますが、メソッドmaze.GetEntrance()MazeClassありませんGetEntrance()。しかありませんMazeClass::GetEntrance(coordinate)

2) への呼び出しは、何かを返すことmaze.GetEntrance().rowを期待していることを示唆しています。MazeClass::GetENtrance()現在は戻りますがvoidvoidメンバーはありませんrow

于 2013-03-20T07:02:42.543 に答える
1

Entrance mainの variable のメンバー変数にアクセスしたいとします。必要なのはこれだと思います

coordinate MazeClass::GetEntrance()
{
   return Entrance;
}

それに応じて、ヘッダーファイルの関数プロトタイプを変更します。

この変更により、以下のステートメントは正常に機能します(()呼び出しを確認してくださいcol

cout << "The entrance is at: " << maze.GetEntrance().row << " " << maze.GetEntrance().col << endl;

GetExitそれを使用するために、関数もこのように変更します

于 2013-03-20T07:12:38.280 に答える