我收到了链接错误

时间:2017-11-24 11:33:54

标签: c++ function file compiler-errors

我已将您提供的所有解决方案应用于类似问题,但我仍然收到此错误:

 undefined reference to `setgolf(golf&, char*, int)'
collect2: error: ld returned 1 exit status

这是代码标题

#ifndef SANS_H_INCLUDED
#define SANS_H_INCLUDED
const int len = 40;
struct golf 
{
    char fullname[len];
    int handicap;
};

//void setgolf(golf &,char * ,int);
int setgolf(golf &);
void sethandicap(golf &,int );
void showgolf(const golf &);    
#endif

这是包含函数定义

的文件
#include <iostream>
#include <cstring>
#include "chapter9exe3.h"
void setgolf(golf & s,char *c ,int hc)    
{    
    strcpy(s.fullname,c);
    s.handicap=hc;
}

int setgolf(golf & s)    
{    
    std::cin.getline(s.fullname,len);
    if(s.fullname[0] == '\0'&& s.fullname[1] == '\0' && s.fullname[2] == '\0')    
    return 0;   
    else
    return 1;
}

void sethandicap(golf & s,int n )
{
    s.handicap = n;    
}

void showgolf(const golf & s)
{
    std::cout<<"the full name :"<<s.fullname<<std::endl;
    std::cout<<"the handcape  :"<<s.handicap<<std::endl;    
}

这是包含主要功能

的文件
#include <iostream>
#include "sans.h"
int main()
{    
    golf player;
    char name[len] = "santers God's men";
    int handicap = 84;
    setgolf(player,name,handicap);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

取消注释:

//void setgolf(golf &,char * ,int);

在你的头文件中,因为你在main中执行:

setgolf(player,name,handicap);

将在头文件中搜索匹配的原型,并且无法填写它,因为您已对其进行了评论。

换句话说,您使用三个参数调用该函数,但仅在头文件中使用一个参数提供此函数的原型。因此,对具有三个参数的setgolf()的引用是定义未定义的!