2015-06-02 97 views
1

更改它,所以這是我的代碼,但它不會因某種原因而編譯。將結構數組傳遞給一個函數,並通過函數

錯誤3錯誤C2036: 'PJS *':未知大小 錯誤4錯誤C2100:非法間接
錯誤5錯誤C2037:左 '尺寸' 的指定未定義結構/聯合 'PJS'

void initArray(struct pjs* array) 
{ 

    (*array[1]).size = 1; 
} 
struct pjs{ 
char* name; 
int size; 
int price; 
}; 
int main(int argc , char** argv) 
{ 
    struct pjs array[10]; 
    initArray(array); 
    system("PAUSE"); 
    return (0); 
} 
+0

,對象定義必須在使用之前是已知的。建議將結構定義放置在首次使用的位置之前,而不要放在第一次使用它的位置之後。 – user3629249

回答

1

以下可能會有所幫助:

struct pjs{ 
    char* name; 
    int size; 
    int price; 
}; 

// safer to use one of the following declaration 
// void initArray(pjs *array, std::size_t size) // simpler 
// void initArray(pjs (&array)[10]) // more restrictive but unintuitive syntax 
void initArray(pjs* array) 
{ 
    array[1].size = 1; 
} 

int main() 
{ 
    pjs array[10]; 
    initArray(array); 
} 
  • pjs的定義應在使用之前給出(或要求其大小)。
  • array[1]pjs所以*array[1]是非法的(如pjs不具有operator*
+0

聲明/類型定義_before_的使用實際上是必需的,不僅僅是「應該」暗示的建議。 – Olaf

+0

非常這是問題! @ Jarod42 –

0

更正您initArray 1日聲明:

array[1].size = 1; 

切結構聲明粘貼到函數之前。

0

如果要初始化整個陣列,則需要將數組和大小傳遞給initArray

int main(int argc , char** argv) 
{ 
    struct pjs array[10]; 
    initArray(array, sizeof(array)/sizeof(array[0])); 
    system("PAUSE"); 
    return (0); 
} 

然後,初始化每個對象陣列爲:

void initArray(struct pjs* array, size_t size) 
{ 
    for (size_t i = 0; i < size; ++i) 
    { 
     array[i].size = 1; 
     array[i].price = 0; // Or whatever makes sense 
     array[i].name = malloc(1); // Or whatever makes sense. 
    } 
} 
用C