C ++未定义的引用?

时间:2013-01-24 23:32:28

标签: c++ dev-c++

所以这是我的程序的一部分,我无法调用函数,我真的需要一些帮助。它基本上是选择任一功能并输入数据和     以后打印那些数据。我做错了什么?请帮忙,我一直在

  

“[链接器]引用Customer_Record()'" , [Linker error] undefined reference to Car_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();
}

3 个答案:

答案 0 :(得分:6)

不要像这样嵌套你的功能。 Customer_Record()Car_Record()的定义应为<{1}}之外的 。您也需要从这些函数的定义中取main()

尝试更好地格式化代码 - 从长远来看,这将有很大帮助。

答案 1 :(得分:2)

  1. 你在main的末尾错过了一个},编译器认为你的函数声明在main函数内。

  2. 从函数中删除尾随分号。例如:

    void Car_Record();
    {   
    

     void Car_Record()
     {   
    
  3. 没有必要使用分号。

答案 2 :(得分: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会有很多帮助。