1

「Linker error: fatal error LNK1120: 1 unresolved externals」が表示されます プロジェクト全体 = ヘッダー ファイル、1 つ目の .cpp ファイル、2 つ目の .cpp ファイルと main() 関数。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 に答える