Je ne sais pas ce qui ne va pas. Je ne trouve pas où est l'erreur, commenter l'implémentation ne résout pas l'erreur non plus.
fichier d'en-tête
#ifndef MAIN_SAVITCH_SEQUENCE_H
#define MAIN_SAVITCH_SEQUENCE_H
#include <cstdlib> // 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
Source
#include "sequence1.h"
#include <assert.h>
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 <= used && used > 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 < sequence::CAPACITY); // no room to add an item
// move items up - starting with the last item and working down to the current item
// arrays start at 0, so the -1 adjusts it
for (size_type i = used - 1; i >= 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 < sequence::CAPACITY); // no room to add an item
// move items up - starting with the last item and working down to the current item
// arrays start at 0, so the -1 adjusts it
for (size_type i = used - 1; i > 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];
}
}
Même si votre projet utilise une méthode main()
, l'éditeur de liens devient parfois confus. Vous pouvez résoudre ce problème dans Visual Studio 2010 en allant sur
Projet -> Propriétés -> Propriétés de configuration -> Éditeur de liens -> Système
et en changeant SubSystem
en Console.
Nous avons également eu ce problème. Mon collègue a trouvé une solution. Il s’est avéré être une redéfinition de "main" dans l’en-tête d’une bibliothèque tierce:
#define main SDL_main
La solution a donc été d'ajouter:
#undef main
avant notre fonction principale.
C'est clairement une stupidité!
si tu as _tmain
_ dans vos projets, vous devez include <tchar.h>.
Vous avez besoin d'une fonction main()
pour que le programme sache par où commencer.
Au cas où quelqu'un aurait manqué l'évidence; notez que si vous construisez une application graphique et utilisez
"-sous-système: windows"dans les link-args, l'entrée de l'application est WinMain @ 16. Pas principal (). Par conséquent, vous pouvez utiliser cet extrait pour appeler votre main ():
#include <stdlib.h>
#include <windows.h>
#ifdef __GNUC__
#define _stdcall __attribute__((stdcall))
#endif
int _stdcall
WinMain (struct HINSTANCE__ *hInstance,
struct HINSTANCE__ *hPrevInstance,
char *lpszCmdLine,
int nCmdShow)
{
return main (__argc, __argv);
}
Avez-vous implémenté la fonction main()
?
int main(int argc, char **argv) {
... code ...
return 0;
}
[edit]
Vous avez votre main()
dans un autre fichier source, vous avez donc probablement oublié de l'ajouter à votre projet.
Pour ajouter un fichier source existant: Dans Explorateur de solutions, cliquez avec le bouton droit sur le dossier Fichiers sources, pointez sur Ajouter, puis cliquez sur Article existant. Maintenant, sélectionnez le fichier source contenant le main()
Si vous utilisez Visual Studio. La raison pour laquelle vous pourriez recevoir cette erreur est peut-être due au fait que vous avez initialement créé un nouvel en-tête file.h, puis que vous l'avez renommé file.cpp, à l'endroit où vous avez placé votre fonction main ().
Pour résoudre le problème, cliquez avec le bouton droit de la souris sur fichier.cpp -> cliquez sur Propriétés, allez à
Propriétés de configuration -> Général -> Item Tapez et remplacez sa valeur par le compilateur C/C++ au lieu de l’en-tête C/C++.
J'ai eu ce problème malgré:
main()
; etMon correctif éventuel était le suivant:
main()
se trouvait dans un espace de noms, elle était donc effectivement appelée something::main()
... la suppression de cet espace de noms a résolu le problème.J'ai rencontré l'erreur LNK2019 alors que je travaillais sur un projet DLL dans Visual Studio 2013.
J'ai ajouté une nouvelle configuration au projet. Mais au lieu d'avoir le "Type de configuration" comme "Bibliothèque dynamique", Visual Studio l'a ajouté comme "Application". Cela a entraîné l'erreur LNK2019.
Correction de l'erreur LNK2019 en allant dans Projet -> Propriétés -> Propriétés de configuration -> Général et remplaçant "Type de configuration" par "Bibliothèque dynamique (.dll)" et "Extension cible" par ".dll".
Oui, la question initiale parle d'un projet console/application, ce qui est un problème différent de ma réponse. Mais je pense que l'ajout de cette réponse pourrait aider quelqu'un (comme moi) qui trébuche sur ce fil.
Vous semblez n'avoir aucune fonction principale, qui est supposée être le point d'entrée de votre programme.