0

コンパイルすると、アーキテクチャx86_64の未定義のシンボルエラーが発生します。

ゲームツリーを構築し、関数を使用してツリーのどのノードが空であるかを確認しisEmpty()ます。

エラーは表示されませんが、2次元配列ツリーをisEmpty()関数に渡す方法がわかりません。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
//#include "header.h"
#define YES 10
#define NO 20

struct Node
{
    Node ** children;
    int     childCount;
    char name[1];
    int empty;//YES or NO
    int sequence;
    double  value;
};

using namespace std;

bool isEmpty(Node, int);

bool isEmpty(Node **ptr, int bsize) {    
    for (int i = 0; i<bsize; i++) {
        for (int j = 0; j < bsize; j++) {
            if((*(ptr+i)+j)->empty == YES){
                return true;
            }
        }
    }
    return false;
}

int main (int argc, const char * argv[])
{
    int size  = 4;
    Node tree[size][size];
// some stuff
    if (isEmpty(tree[size][size], size)) {
        cout<<"this is empty\n";
        return 0;
    }
    return 0;
}

このエラーを修正するにはどうすればよいですか?任意のヘルプplz..

4

1 に答える 1

1

isEmpty関数プロトタイプがisEmpty定義と一致しません。

残念ながら、多次元配列を関数に渡す場合、C++ はあまりフレンドリーではありません。オプションは次のとおりです。

  1. 代わりに、配列とユーザー ポインターを削除します。代わりに動的割り当てを使用する必要があります。
  2. 2 次元配列を使用するのではなく、 size の 1D 配列を使用します(length * width)
  3. 配列には普遍的に固定されたサイズを使用してください。

番号 2 はおそらく最も簡単です。コード:

#define YES 10
#define NO 20
using namespace std;
#include <iostream>

struct Node
{
    Node ** children;
    int     childCount;
    char name[1];
    int empty;//YES or NO
    int sequence;
    double  value;
};

using namespace std;

bool isEmpty(Node ptr[], int bsize) {    
    for (int i = 0; i<bsize; i++) {
        for (int j = 0; j < bsize; j++) {
            if(ptr[i * bsize + j].empty == YES){
                return true;
            }
        }
    }
    return false;
}

int main (int argc, const char * argv[])
{
    int size  = 4;
    Node tree[size * size];
// some stuff
    if (isEmpty(tree, size)) {
        cout<<"this is empty\n";
        return 0;
    }
    return 0;
}

方法 1
のイデオン 方法 3 のイデオン

于 2012-10-29T18:26:40.323 に答える