2013-01-24 145 views
2

所以這是我的程序的一部分,我無法調用這些函數,我真的需要一些幫助。這基本上是選擇功能和輸入數據,然後打印該數據。我究竟做錯了什麼?請大家幫幫忙,我不斷收到C++未定義的引用?

「[鏈接]參考Customer_Record()'" , [Linker error] undefined reference toCar_Record()「和 」LD返回1個退出狀態「

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 
#include <windows.h> 
#include <conio.h> 

void Customer_Record(), Car_Record(); 
int num; 

struct Customer { 
    char customer_ID[20]; 
    int license; 
    char address[20]; 
    int phone; 
    char email[20]; 
} cust; 

struct car { 

    int regno[20]; 
    char model[20]; 
    char colour[10]; 
} car; 


main() { 
    printf("    Enter 1 to go to Customer Record \n\n"); 
    printf("    Enter 2 to go to Car Record \n\n"); 
    scanf("%d", &num); 
    if (num = 1) { 
     Customer_Record(); 
    } else if (num = 2) { 
     Car_Record(); 
    } else { 
     printf("Invalid Number"); 
    } 

    system("cls"); 

    void Customer_Record(); { 
     printf("********CUSTOMER RECORD********"); /* accepts into*/ 
     printf("\nEnter the name of the customer "); 
     scanf("%s", &cust.customer_ID); 
     printf("Enter the license number of the customer "); 
     scanf("%d", &cust.license); 
     printf("Enter the address of the customer "); 
     scanf("%s", &cust.address); 
     printf("Enter the cell phone number of the customer "); 
     scanf("%d", &cust.phone); 
     printf("Enter the email address of the customer "); 
     scanf("%s", &cust.email); 
    } 

    void Car_Record(); { 
     printf("********CAR RECORD********"); 
     printf("\nEnter the car's registration number "); 
     scanf("%d", &car.regno); 
     printf("Enter the car's model "); 
     scanf("%s", &car.model); 
     printf("Enter the colour of the car "); 
     scanf("%s", &car.colour); 
    } 
    getchar(); 
    getchar(); 
} 
+0

'void Car_Record();'聲明一個函數。 – chris

+1

@chris:我認爲這是 –

+0

函數定義中的大括號外沒有分號。這應該給你一個編譯錯誤,而不是一個鏈接器錯誤。請顯示實際的代碼。 – aschepler

回答

6

不嵌套的功能,如Customer_Record()Car_Record()的定義應該是以外的main()。您還需要將;從這些功能的定義中刪除。

嘗試更好地格式化您的代碼 - 從長遠來看這將有很大幫助。

+0

分離功能並起飛;關閉函數的定義,但我遇到了另一個錯誤「預期的初始化 - 聲明之前」void「對不起,這一切,但我很新 –

+0

對不起,沒有看到新的代碼,這將是很難診斷。你當然可以提出一個新的問題來跟進。 –

+0

終於可以工作了,非常感謝你!!!!! –

2
  1. 你在main的末尾缺少a},編譯器認爲你的函數聲明在main函數中。

  2. 從函數中刪除尾隨分號。例如:

    void Car_Record(); 
    { 
    

    void Car_Record() 
    { 
    

這分號是沒有必要的。

+0

'main'末尾有一個'}',他不會走得太遠作爲一個鏈接器錯誤,如果他有這樣的語法問題,除非它不是沒有必要的,它實際上*不能是在那裏,你說的是分號。 –

+0

Carl,好點。當我讀到它的功能 – jmoyerman

+0

是的原始格式非常糟糕,這使得很難看到。 –

1

我已經編制了你的程序所有問題的列表。那就是:

  • 你的if語句使用賦值操作符=時,他們應該使用比較運算==。因此,例如,更改以下:

    if (num = 1) { 
    

    if (num == 1) { 
    

    這也發生在你的else聲明爲好。

  • 在main中定義函數也是不正確的。您必須在以外的主要條款定義這些塊。您已經在main函數上創建了函數原型,現在您必須在main下面定義它們。另外,在定義函數時,參數列表後面不應有分號;這在語法上是錯誤的。

以下是建議。你將這些代碼編譯爲C++,但是這是使用C函數/頭文件編寫的。爲了將其轉換爲C++,執行以下更改:

  • 改變你的頭: stdio.h中,CONIO.H,stdlib.h中;這些都是C風格的標題。基本上所有以「.h」結尾的標題都是C風格的標題。C++有它自己的I/O庫,從而使其C等價物過時。包括以下標題改爲:

    #include <iostream> 
    #include <cstdlib> 
    

    我離開了額外的頭,因爲它似乎你只使用printf/scanfsystem,其中的C++的iostreamcstdlib頭已經擁有相當。例如,對於iosteam,std::coutstd::cin。和getchar等價的是std :: cin.get()`。

  • 主要回報int:在標準C++中,您不能忽略返回類型。指定main的返回類型爲int,但不必在末尾放置return 0(這是隱含的)。

如果你想查找C++函數和容器(如std::cout/std::cin),this reference有很大幫助。