C++ error LNK2001: unresolved external symbol function _main
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What is an undefined reference/unresolved external symbol error and how do I fix it?
我正在学习C++,在我的项目中有一个编译问题。我读了很多文章,标题上有这个错误,但我找不到问题所在。
我的主函数中有一个方法调用,它是导致错误的原因。每当我评论这一行时,这个项目就会完美地编译。
代码如下:
主CPP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #pragma once #include"stdafx.h" #include <iostream> #include <sstream> #include <WinSock.h> #include <Windows.h> #include <string.h> #include"NetUtils.h" #include"Utils.h" #include"FileUtils.h" #include"SendMail.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { SendMail *mail = new SendMail("[email protected]","Envio de C++","Cuerpo del mail"); char* msg=""; mail->SendNow(); ... |
这个方法mail->sendNow是解决这个问题的方法,所以我想我在sendmail.cpp或sendmail.h中有某种头声明问题
现在剩下的类和头:
SeNeMe.h
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #pragma once #ifndef SENDMAIL_H #define SENDMAIL_H class SendMail { public: SendMail(char* c_to, char* c_subject, char* c_body); void Check(int iStatus, char *szFunction); void SendNow(); char * to; char * subject; char * body; }; #endif |
SeNeMel.CPP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #define WIN32_LEAN_AND_MEAN #pragma once #include"SendMail.h" #include <stdio.h> #include <stdlib.h> #include <fstream> #include <iostream> #include <windows.h> #include <winsock2.h> #pragma comment(lib,"ws2_32.lib") using namespace std; // Insist on at least Winsock v1.1 const int VERSION_MAJOR = 1; const int VERSION_MINOR = 1; #define CRLF" " // carriage-return/line feed pair SendMail::SendMail(char* c_to, char* c_subject, char* c_body) { to = c_to; subject= c_subject; body = c_body; } // Basic error checking for send() and recv() functions void Check(int iStatus, char *szFunction) { if((iStatus != SOCKET_ERROR) && (iStatus)) return; cerr <<"Error during call to" << szFunction <<":" << iStatus <<" -" << GetLastError() << endl; } void SendNow() { // WSADATA WSData; ///* Attempt to intialize WinSock (1.1 or later)*/ // if(WSAStartup(MAKEWORD(VERSION_MAJOR, VERSION_MINOR), &WSData)) // { // cout <<"Cannot find Winsock v" << VERSION_MAJOR <<"." << VERSION_MINOR <<" or later!" << endl; // ErrMsg="Cannot find Winsock v"; // return; // } } |
正如您所看到的,send方法被注释掉了,所以我无法找出问题所在。
编译器输出为:
1 2 | Error 6 error LNK1120: 1 unresolved externals C:\Users\clanderasm\Documents\Visual Studio 2010\Projects\LandeTestConsole\Debug\LandeCplusConsole.exe LandeCplusConsole Error 5 error LNK2019: unresolved external symbol"public: void __thiscall SendMail::SendNow(void)" (?SendNow@SendMail@@QAEXXZ) referenced in function _main C:\Users\clanderasm\Documents\Visual Studio 2010\Projects\LandeTestConsole\LandeCplusConsole\LandeCplusConsole.obj LandeCplusConsole |
型
基本上,这个错误意味着你有一个你承诺要在你的头中实现的函数,但是当它到达它真正需要这个函数的部分时,它没有找到它。
如果您注释掉函数调用,那么您将实现该函数的承诺仍然存在。然而,实际上没有人在使用这个函数,所以你不履行诺言也没关系。
一旦你知道这意味着什么,就很容易找到问题所在:
您将函数定义为:
1 | void SendNow() |
这是一个全局函数而不是类函数,因此您没有实现您承诺实现的类函数。
您可以通过将其转换为:
1 | void SendMail::SendNow() |
。
请注意,您在
型
你是说
1 2 | void SendMail::Check(int iStatus, char *szFunction) void SendMail::SendNow() |
而不是
1 2 | void Check(int iStatus, char *szFunction) void SendNow() |
号