2

所以这是我程序的一部分,我无法调用这些函数,我真的需要一些帮助。基本上是选择任一功能并输入数据,然后打印该数据。做错了什么?请帮助,我不断得到

"[Linker] 引用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();
}
4

3 回答 3

6

不要像那样嵌套你的函数。Customer_Record()和的定义Car_Record()应该. main()您还需要;取消这些函数的定义。

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

于 2013-01-24T23:33:59.030 回答
2
  1. 您在 main 末尾缺少一个 },编译器认为您的函数声明在 main 函数中。

  2. 从您的函数中删除尾随分号。前任:

    void Car_Record();
    {   
    

     void Car_Record()
     {   
    

那个分号不是必须的。

于 2013-01-24T23:37:00.460 回答
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标题已经拥有的等价物。例如,std::cout对于std::ciniosteam。等价于getcharstd::cin.get()`。

  • Main 返回 int:在标准 C++ 中,您不能省略返回类型。将 main 的返回类型指定为int,但您不必放在return 0最后(这是隐式的)。

如果您想查找 C++ 函数和容器(如std::cout/ std::cin),此参考很有帮助。

于 2013-01-25T01:58:57.120 回答