1

它显示“链接器错误:致命错误 LNK1120: 1 unresolved externals”整个项目 = 头文件、第一个 .cpp 文件和第二个带有 main() 函数的 .cpp 文件。Any1 知道我做错了什么吗?

//golf.h for golf.cpp
const int Len = 40;
struct golf{
    char fullname[Len];
    int handicap;
};
//dla gotowych wartosci
void setgolf (golf & g, const char * name, int hc);
//do wpisywania wartosci
int setgolf (golf & g);
//tylko handicap
inline void handicap (golf & g, int hc);
//wyswietla info o graczu
void showgolf (const golf & g) ;

下一个文件

//golf.cpp for 9-1.cpp
#include <iostream>
#include <cstring>
#include "golf.h"
extern const int Len;
void setgolf (golf & g, const char* name, int hc){
    strcpy(g.fullname,name);
    g.handicap=hc;
}
int setgolf (golf & g){
    using namespace std;
    cout << "Podaj fullname golfiarza" << endl;
    if (cin.getline(g.fullname,Len)) return 0;
    cout << "Teraz podaj jego handicap" << endl;
    cin >> g.handicap;
    return 1;
}
inline void handicap (golf & g, int hc){
    g.handicap=hc;
}
void showgolf (const golf & g){
    using std::cout;
    using std::endl;
    cout << "Fullname gracza to: " << g.fullname << endl;
    cout << "Jego handicap to: " << g.handicap << endl;
}

最后一个文件

#include <iostream>
#include <cstdlib>
#include "golf.h"
using namespace std;
int main(){
    cout << "Witaj!\nTutaj program golficzny!" << endl;
    golf filip;
    golf klaudia;
    cout << "Automatyczne uzupelnienie Filipa" << endl;
    setgolf(filip, "Filip Bartuzi",100);
    showgolf(filip);
    cout << "Manualne uzupelnienie Klaudii" << endl;
    ((setgolf(klaudia))==1) ? showgolf(klaudia) : cout << "nie wprowadziles gracza!" << endl; ;
    cout << "Zly handicap? Okey, zmienie handicap Filipowi" << endl;
    handicap(filip,50);
    showgolf(filip);
    cout << "Od razu lepiej, nieprawda?" << endl;
    system("PAUSE");
    return 0;
}

任何的想法?

4

2 回答 2

4
inline void handicap (golf & g, int hc){
    g.handicap=hc;
}

inline如果函数在golf.cpp文件中,请尝试删除关键字。

或者,重新定位文件中的整个函数golf.h。(在这里,这个选择似乎更合适。)

原因:如果一个函数是inline,那么它的主体必须对调用者可见。只有将函数体放在头文件中,而不是在实现文件中,这才有可能。

可能相关:.cpp 文件中的 C++ 内联成员函数

于 2013-02-15T21:10:52.523 回答
2

删除内联词。它旨在在同一位置提供函数的声明和定义(这使得编译器可能会用其代码替换对函数的每次调用)。

在您的代码中,您使用 inline 关键字,但在其他地方提供代码。

它应该是这样的:

inline void handicap (golf & g, int hc){ g.handicap=hc; }

直接在您的 .h 文件中。(并且可以从 golf.cpp 文件中删除定义)

于 2013-02-15T21:15:05.707 回答