【问题标题】:Linker error: fatal error LNK1120: 1 unresolved externals链接器错误:致命错误 LNK1120:1 未解决的外部
【发布时间】:2013-02-15 21:07:01
【问题描述】:

它显示“链接器错误:致命错误 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;
}

有什么想法吗?

【问题讨论】:

  • 错误的下一行是什么?
  • 1> 生成代码... 1>9-1.obj:错误 LNK2019:未解析的外部符号“void __cdecl handicap(struct golf &,int)”(?handicap@@YAXAAUgolf@@H @Z) 在函数 _main 1>C:\Users\Filip\Dysk Google\C++\Debug\ConsoleApplication7.exe 中引用:致命错误 LNK1120: 1 unresolved externals ========== 构建:0 成功,1失败,0 最新,0 跳过 ==========

标签: c++ visual-studio


【解决方案1】:
inline void handicap (golf & g, int hc){
    g.handicap=hc;
}

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

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

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

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

【讨论】:

  • 那行得通。你能解释一下为什么它会破坏调试进度吗?内联使用有什么问题?
  • @Filip Bartuzi:不客气!好问题,我更新了答案。
【解决方案2】:

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

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

应该是这样的:

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

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

【讨论】:

  • 谢谢兄弟。它起作用了,很高兴你能解释一下。然后我可以继续 Stephen pratta 的 Primer C++ 教育。呸!
猜你喜欢
  • 2012-06-03
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 2012-03-30
相关资源
最近更新 更多