2016-09-12 48 views
0

我得到錯誤「./test.h:10:3:錯誤:未知類型名稱'PROCESS'」當我包含我的頭文件test.h具有結構定義PROCESS作爲我的C的一部分Go Lang應用程序。該代碼使用C編譯沒有問題,所以我想我做的事情很簡單的錯誤...爲什麼CGo不能識別我在頭文件中聲明的結構?

package main 

// #include <sys/mman.h> 
// #include <errno.h> 
// #include <inttypes.h> 
// #include <stdlib.h> 
// #include "test.h" 
import "C" 

import (
    "fmt" 
    _"unsafe" 
) 


func main() { 
    fmt.Println("Retrieving process list"); 

} 

test.h的含量低於...

#include <sys/mman.h> 
#include <errno.h> 
#include <inttypes.h> 
#include <stdlib.h> 

struct PROCESS { 
    char *name; 
    int os_type; 
    addr_t address; 
    PROCESS *next; 

    //fields we care about 
    unsigned int uid; 
    unsigned int gid; 
    unsigned int is_root; 
    unsigned int io_r; 
    unsigned int io_wr; 
    unsigned int io_sys_r; 
    unsigned int io_sys_wr; 
    unsigned int used_super; 
    unsigned int is_k_thread; 
    unsigned int cpus; 
    unsigned long hw_rss; 
    unsigned long vma_size; 
    unsigned long map_count; 
    unsigned long pages; 
    unsigned long total_map; 
    unsigned long min_flt; 
    unsigned long mm_usrs; 
    unsigned long nr_ptes; 
    unsigned long nvcsw; 

}; 

回答

2

在C, (與C++不同),struct關鍵字不會聲明可以自己使用的類型名稱;它需要使用struct關鍵字的資格。該類型是struct PROCESS不是PROCESS

struct PROCESS 
{ 
    char* name ; 
    int os_type ; 
    addr_t address ; 
    struct PROCESS* next ; // The struct keyword is needed here 
    ... 
+0

哇,這工作完美,謝謝你克利福德。我將C++重構爲C以避免必須使用SWIG,甚至不知道這會是一個問題。謝謝。 – dimlee

相關問題