链接器错误:致命错误LNK1120:1个未解析的外部

时间:2013-02-15 21:07:02

标签: c++ visual-studio

显示“链接器错误:致命错误LNK1120:1未解析的外部” 整个项目=头文件,第一个.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;
}

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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

如果该功能位于inline文件中,请尝试删除golf.cpp关键字。

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

原因:如果某个函数是inline,则其正文必须对调用者可见。只有当函数体放在头文件而不是实现文件中时才可能这样做。

可能相关:C++ inline member function in .cpp file

答案 1 :(得分:2)

删除内联词。它意味着在同一个地方提供函数的声明和定义(这使得编译器可能用它的代码替换对函数的每次调用)。

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

它应该是这样的:

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

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