【问题标题】:undefined reference to a pointer in c对c中指针的未定义引用
【发布时间】:2018-05-21 02:55:11
【问题描述】:

我正在尝试运行我的程序,但它一直出错。

我有 3 个文件,并将包含来自 3 个不起作用的函数之一的代码。

文件:contacts.h

struct Name{
    char firstName[31];
    char middleInitial[7];
    char lastName[36];
};

struct Contact{
    struct Name name;
};

// function prototype:
void getName(struct Name *);

文件:contacts.c

#include <stdio.h>
#include “contacts.h”

void getName(struct Name *name)
{
    printf(“Please enter the contact’s first name: “);
    scanf(“%30[&\n]”, name->firstName);   
}

文件:a1ms4.c

#include <stdio.h>
#include “contacts.h”

int main(void)
{
    struct Contact contact = { {0} };
    getName(&contect.name);
    printf(“Contact first name: %s\n”, contact.name.firstName);

    return 0;
}

知道为什么我会收到此错误:

a1ms4.c:(.text+0x53): undefined reference to `getName'

【问题讨论】:

  • 你是如何构建的?编译像这样的东西gcc -Wall a1ms4.c contacts.c -o conatact
  • 您使用的完整编译命令是什么?我读到这个错误的方式是你告诉编译器getName... 即将到来(通过contacts.h)但从未真正编译过该函数或将其链接。
  • 你可能没有编译和链接contacts.c
  • “%30[&amp;\n]” 是一个奇怪的格式字符串
  • 我使用的是 Windows IDE,dev-c++。 Visual Studio 也会出现同样的错误。 contacts.c 已编译,不必将其包含在 main.c 中。它通过contacts.h 的指针工作。老师没有要求我们在 a1ms4.c 中包含contacts.c 那个格式字符串只是为了确保不超过30个字符被保存,并且它保存到换行(回车)irrc

标签: c function linker-errors undefined-reference dev-c++


【解决方案1】:

可能你编译的方式不对。 尝试这个 gcc -c a1ms4.c gcc -c 联系人.c gcc -Wall a1ms4.o 联系人.o -o 联系人

【讨论】:

  • 我使用的是 Windows IDE,dev-c++。 Visual Studio 也会出现同样的错误。
  • @TravisBradbury 如果您没有提及正确的tag,就会发生这种情况。用所有这些细节编辑问题,然后你会得到正确的回应,其次你需要将contacts.c作为依赖文件添加到a1ms4.c,这样它就会在main之前构建
【解决方案2】:

我只是希望

#include “contacts.h”

其实是

#include "contacts.h"

请记住," 不同

这个也一样:

scanf(“%30[&\n]”, name->firstName);

还有这些:

printf(“Please enter the contact’s first name: “);
printf(“Contact first name: %s\n”, contact.name.firstName);

确保您的包含路径中只有一个版本的 contacts.h,并且您已包含您想要的确切文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多