"必须使用' struct'标记用于表示类型'节点'"

时间:2015-05-26 01:59:16

标签: c data-structures

这里发生了什么?我得到了

  

必须使用' struct'标记以引用类型'节点'

gxhx

typedef struct node {
    char * fx; // function
    node * gx; // left-hand side
    char * op; // operator
    node * hx; // right-hand side    
} node;

我也试过

typedef struct node {
    char * fx; // function
    node * gx; // left-hand side
    char * op; // operator
    node * hx; // right-hand side
};

struct node {
    char * fx; // function
    node * gx; // left-hand side
    char * op; // operator
    node * hx; // right-hand side
};

typedef struct  {
    char * fx; // function
    node * gx; // left-hand side
    char * op; // operator
    node * hx; // right-hand side
} node;

typedef struct treeNode {
    char * fx; // function
    treeNode  * gx; // left-hand side
    char * op; // operator
    treeNode * hx; // right-hand side
} node;

我得到了所有这些错误。普通C中的正确语法是什么?

3 个答案:

答案 0 :(得分:9)

在c中,您无法使用结构名称来引用struct,您需要在名称前添加struct,或者您可以typedef,例如

typedef struct node node;

struct node 
 {
    /* Whatever */
    node *link;
 };

答案 1 :(得分:4)

让我们看看第一个片段:

$scope.AddPost = function(){
    console.log("This was called.");
   var title = $scope.article.title;
   var post = $scope.article.post;

   var firebaseObj = new Firebase("https://yyear.firebaseio.com/Articles");
   var fb = $firebase(firebaseObj);

   fb.$push({ title: title,post: post,emailId: CommonProp.getUser() }).then(function(ref) {
    console.log(ref); 
    //$location.path('/welcome');
   }).then(function(ref) {
    $('#createModal').modal('hide');
  }, function(error) {
    console.log("Error:", error);
  });
};
typedef struct node { char * fx; // function node * gx; // left-hand side char * op; // operator node * hx; // right-hand side } node; 语句完成之前,{p> gxhx出现在struct node / node类型定义的中间。在此计划中,typedef不是有效的类型名称,因为node尚未结束(并且,与C ++不同,编写typedef不会自动生成{ {1}}类型名称)。但是,此时struct node { ... }; 是一个有效的类型名称(只要您将其用于指针类型),因此要声明node和{{1}正确地说,你需要写:

struct node

答案 2 :(得分:1)

我这样做

struct node {
    char        * fx;   // function
    struct node * gx;   // left-hand side
    char        * op;   // operator
    struct node * hx;   // right-hand side
};
typedef struct node node;