C++ ошибка LNK2001: неразрешенная функция внешнего символа main [дубликат]

Возможные Дубликаты:
что такое неопределенная ссылка/неразрешенный внешний символ ошибка и как мне это исправить?

Я изучаю C++ , и у меня есть проблема компиляции в моем проекте. Я прочитал тонны сообщений с этой ошибкой в названии, но я не могу найти, где проблема.

у меня есть вызов метода в моей основной функции, которая отвечает за ошибку. Всякий раз, когда я комментирую строку проект компилируется идеальный.

код следующий:

Main.cpp

#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("somemail@mail.com","Envio de C++","Cuerpo del mail");    
    char* msg="";   
    mail->SendNow();
    ...

этот метод mail - >SendNow-это тот, который я комментирую, чтобы решить проблему, поэтому я думаю У меня есть какая-то проблема объявления заголовка внутри SendMail.cpp или SendMail.h

теперь остальные классы и заголовки:

настройки sendmail.h

#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

настройки sendmail.cpp

#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 "rn"                 // 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;     
    //  }
}

как вы можете видеть метод отправки закомментирован, поэтому я не могу понять, в чем проблема.

вывод компилятора:

Error   6   error LNK1120: 1 unresolved externals   C:UsersclanderasmDocumentsVisual Studio 2010ProjectsLandeTestConsoleDebugLandeCplusConsole.exe  LandeCplusConsole
Error   5   error LNK2019: unresolved external symbol "public: void __thiscall SendMail::SendNow(void)" (?SendNow@SendMail@@QAEXXZ) referenced in function _main    C:UsersclanderasmDocumentsVisual Studio 2010ProjectsLandeTestConsoleLandeCplusConsoleLandeCplusConsole.obj  LandeCplusConsole

2 ответов


вы имели в виду

void SendMail::Check(int iStatus, char *szFunction)
void SendMail::SendNow()

вместо

void Check(int iStatus, char *szFunction)
void SendNow()

В основном эта ошибка означает, что у вас есть функция, которую вы обещаете реализовать в своем заголовке, но когда она дошла до той части, где ей действительно нужна функция, она ее не нашла.

Если вы прокомментируете вызов функции, обещание, что вы реализуете эту функцию, все еще существует. Однако никто на самом деле не использует эту функцию, поэтому не имеет значения, что вы не выполняете свое обещание.

Если вы знаете, что это означает, это довольно легко найти, что не так:

вы определяете функцию как:

void SendNow()

это глобальная функция, а не функция класса, поэтому вы не реализовали функцию класса, которую обещали реализовать.

вы можете исправить это, превратив его в:

void SendMail::SendNow()

обратите внимание, что у вас такая же проблема в Check() хотя это еще не вызывает ошибки.