0

编译时出现架构 x86_64 错误的未定义符号。

我构建了一个游戏树并使用函数检查树的哪些节点是空的isEmpty()

虽然没有显示错误,但我不确定我将二维数组树传递给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;
}

我该如何解决这个错误?任何帮助请..

4

1 回答 1

1

您的函数原型与您的定义isEmpty不匹配。isEmpty

不幸的是,在将多维数组传递给函数时,C++ 并不是很友好。您的选择是:

  1. 而是删除数组和用户指针。您必须改用动态分配。
  2. 与其使用二维数组,不如使用 size 的一维数组(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
的 Ideone 方法 3的 Ideone

于 2012-10-29T18:26:40.323 回答