显示“链接器错误:致命错误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;
}
有什么想法吗?
答案 0 :(得分:4)
inline void handicap (golf & g, int hc){
g.handicap=hc;
}
如果该功能位于inline
文件中,请尝试删除golf.cpp
关键字。
或者,重新定位golf.h
文件中的整个函数。 (这里,这个选择似乎更合适。)
原因:如果某个函数是inline
,则其正文必须对调用者可见。只有当函数体放在头文件而不是实现文件中时才可能这样做。
答案 1 :(得分:2)
删除内联词。它意味着在同一个地方提供函数的声明和定义(这使得编译器可能用它的代码替换对函数的每次调用)。
在您的代码中,您使用inline关键字,但在其他地方提供代码。
它应该是这样的:
inline void handicap (golf & g, int hc){ g.handicap=hc; }
直接在您的.h文件中。 (并且可以从golf.cpp文件中删除定义)