errore LNK2019: simbolo esterno non risolto _main referenziato nella funzione ___tmainCRTStartup

Non so cosa c’è che non va .. Non riesco a trovare dove si trova l’errore, commentare l’implementazione non risolve l’errore.

File di intestazione

#ifndef MAIN_SAVITCH_SEQUENCE_H #define MAIN_SAVITCH_SEQUENCE_H #include  // Provides size_t namespace main_savitch_3 { class sequence { public: // TYPEDEFS and MEMBER CONSTANTS typedef double value_type; typedef std::size_t size_type; static const size_type CAPACITY = 30; // CONSTRUCTOR sequence( ); // MODIFICATION MEMBER FUNCTIONS void start( ); void advance( ); void insert(const value_type& entry); void attach(const value_type& entry); void remove_current( ); // CONSTANT MEMBER FUNCTIONS size_type size( ) const; bool is_item( ) const; value_type current( ) const; private: value_type data[CAPACITY]; size_type used; size_type current_index; }; } #endif 

fonte

 #include "sequence1.h" #include  namespace main_savitch_3 { // Default constructer - sequence is empty sequence::sequence() { used = current_index = 0; } // Start the iteration void sequence::start() { current_index = 0; } // Iterate void sequence::advance() { current_index++; } // Number of items in the sequence sequence::size_type sequence::size() const { return used; } // Checks if there is a current item bool sequence::is_item() const { return current_index  0; } // Returns the current value sequence::value_type sequence::current() const { assert(is_item()); // no current item return data[current_index]; } // Adds an item BEFORE the current index void sequence::insert(const value_type& entry) { assert(entry != 0); // pointer is invalid assert(current_index = current_index; i--) data[i + 1] = data[i]; data[current_index] = entry; } // Adds an item AFTER the current index void sequence::attach(const value_type& entry) { assert(entry != 0); // pointer is invalid assert(current_index  current_index; i--) data[i + 1] = data[i]; if (current_index = 0) data[used] = entry; else data[current_index + 1] = entry; } // Removes the current item void sequence::remove_current() { for (size_type i = current_index; i < used; i++) data[i] = data[i + 1]; } } 

Anche se il tuo progetto ha un metodo main() , il linker a volte viene confuso. Puoi risolvere questo problema in Visual Studio 2010 andando a

Progetto -> Proprietà -> Proprietà di configurazione -> Linker -> Sistema

e cambiare il SubSystem in console.

Abbiamo anche avuto questo problema. Il mio collega ha trovato una soluzione. Si è rivelata una ridefinizione di “main” in un’intestazione di libreria di terze parti:

 #define main SDL_main 

Quindi la soluzione era di aggiungere:

 #undef main 

prima della nostra funzione principale.

Questa è chiaramente una stupidità!

se hai _tmain nei tuoi progetti devi include .

Hai bisogno di una funzione main() modo che il programma sappia da dove iniziare.

Nel caso in cui qualcuno ha mancato l’ovvio; si noti che se si crea un’applicazione GUI e si utilizza
-subsystem: windows ” nel link-args, la voce dell’applicazione è WinMain @ 16 . Non principale () . Quindi puoi usare questo snippet per chiamare il tuo main () :

 #include  #include  #ifdef __GNUC__ #define _stdcall __attribute__((stdcall)) #endif int _stdcall WinMain (struct HINSTANCE__ *hInstance, struct HINSTANCE__ *hPrevInstance, char *lpszCmdLine, int nCmdShow) { return main (__argc, __argv); } 

Hai implementato la funzione main() ?

 int main(int argc, char **argv) { ... code ... return 0; } 

[modificare]

Hai il tuo main() in un altro file sorgente, quindi probabilmente hai dimenticato di aggiungerlo al tuo progetto.

Per aggiungere un file sorgente esistente: in Esplora soluzioni , fare clic con il pulsante destro del mouse sulla cartella File di origine , selezionare Aggiungi , quindi fare clic su Articolo esistente . Ora seleziona il file sorgente contenente il main()

Se stai usando Visual Studio. Il motivo per cui potresti ricevere questo errore potrebbe essere dovuto al fatto che in origine hai creato un nuovo file di intestazione.h e poi lo hai rinominato in file.cpp in cui hai inserito la tua funzione main ().

Per risolvere il problema, fai clic con il pulsante destro del mouse su file.cpp -> fai clic su Proprietà vai a
Proprietà di configurazione -> Generale -> Tipo di object e modifica il suo valore nel compilatore C / C ++ anziché nell’intestazione C / C ++.

Ho avuto questo problema nonostante:

  • avere un main() ; e
  • configurare tutti gli altri progetti nella mia soluzione come librerie statiche.

La mia eventuale correzione era la seguente:

  • il mio main() era in uno spazio dei nomi, quindi è stato effettivamente chiamato something::main() … rimuovendo questo namespace risolto il problema.

Ho riscontrato l’errore LNK2019 mentre lavoravo su un progetto DLL in Visual Studio 2013.

Ho aggiunto una nuova configurazione al progetto. Ma invece di avere il “Tipo di configurazione” come “Libreria dynamic”, lo studio visivo lo ha aggiunto come “Applicazione”. Ciò ha provocato l’errore LNK2019.

Risolto l’errore LNK2019 andando a Progetto -> Proprietà -> Proprietà di configurazione -> Generale e cambiando “Tipo di configurazione” a “Libreria dynamic (.dll)” e “Estensione destinazione” a “.dll”.

Sì, la domanda originale parla di un progetto di console / applicazione, che è un problema diverso dalla mia risposta. Ma credo che l’aggiunta di questa risposta potrebbe aiutare qualcuno (come me) che inciampa su questo thread.

Sembra che tu non abbia alcuna funzione principale, che dovrebbe essere il punto di ingresso per il tuo programma.

andare su “Proprietà progetto – Proprietà di configurazione – Linker – input – Altre dipendenze”, quindi andare alla fine e digitare “; ws2_32.lib”.