2010-03-23 6 views
1

J'ai essayé d'enlever diverses pièces et constructions, mais rien ne fait disparaître l'erreur lnk2019, ou même produit des erreurs normales.Erreur lnk2019 dans un programme C++ très simple

Tout est dans le fichier en ce moment (ce ne sera pas plus tard quand il sera terminé). Le programme a trois listes de mots et en fait une expression de jargon, et vous êtes censé pouvoir ajouter des mots, supprimer des mots, afficher les listes, restaurer les valeurs par défaut, enregistrer les modifications dans le fichier et charger les modifications du fichier.

#include "stdafx.h" 
#include <iostream> 
#include <string.h> 

using namespace std; 

const int maxlist = 20; 

string adj1[maxlist], adj2[maxlist], noun[maxlist]; 

void defaultlist(int list) 
{ 
if(list == 1) 
{ 
    adj1[0] = "green"; 
    adj1[1] = "red"; 
    adj1[2] = "yellow"; 
    adj1[3] = "blue"; 
    adj1[4] = "purple"; 

    int i = 5; 
    while(i != maxlist) 
    { 
    adj1[i] = ""; 
    i = i + 1; 
    } 
} 

if(list == 2) 
{ 
    adj2[0] = "shiny"; 
    adj2[1] = "hard"; 
    adj2[2] = "soft"; 
    adj2[3] = "spiky"; 
    adj2[4] = "furry"; 

    int i = 5; 
    while(i != maxlist) 
    { 
    adj2[i] = ""; 
    i = i + 1; 
    } 
} 

if(list == 3) 
{ 
    noun[0] = "cat"; 
    noun[1] = "dog"; 
    noun[2] = "desk"; 
    noun[3] = "chair"; 
    noun[4] = "door"; 

    int i = 5; 
    while(i != maxlist) 
    { 
    noun[i] = ""; 
    i = i + 1; 
    } 
} 
return; 
} 


void printlist(int list) 
{ 
if(list == 1) 
{ 
    int i = 0; 
    while(!(i == maxlist)) 
    { 
    cout << adj1[i] << endl; 
    i = i + 1; 
    } 
} 

if(list == 2) 
{ 
    int i = 0; 
    while(!(i == maxlist)) 
    { 
    cout << adj2[i] << endl; 
    i = i + 1; 
    } 
} 

if(list == 3) 
{ 
    int i = 0; 
    while(!(i == maxlist)) 
    { 
    cout << noun[i] << endl; 
    i = i + 1; 
    } 
} 
return; 
} 

string makephrase() 
{ 
int num1 = rand()%maxlist; 
int num2 = rand()%maxlist; 
int num3 = rand()%maxlist; 
int num4 = rand()%1; 

string word1, word2, word3; 

if(num4 = 0) 
{ 
    word1 = adj1[num1]; 
    word2 = adj2[num2]; 
} 
else 
{ 
    word1 = adj2[num1]; 
    word2 = adj1[num2]; 
} 

word3 = noun[num3]; 

return word1 + " ," + word2 + " " + word3; 
} 

string addword(string word, int list) 
{ 
string result; 

if(list == 1) 
{ 
    int i = 0; 
    while(!(adj1[i] == "" || i == maxlist)) 
    { 
    i = i + 1; 
    } 

    if(i == maxlist) result = "List is full. Please try again."; 
    if(adj1[i] == "") 
    { 
    adj1[i] = word; 
    result = "Word was entered successfully."; 
    } 
} 

if(list == 2) 
{ 
    int i = 0; 
    while(!(adj2[i] == "" || i == maxlist)) 
    { 
    i = i + 1; 
    } 

    if(i == maxlist) result = "List is full. Please try again."; 
    if(adj2[i] == "") 
    { 
    adj2[i] = word; 
    result = "Word was entered successfully."; 
    } 
} 

if(list == 3) 
{ 
    int i = 0; 
    while(!(noun[i] == "" || i == maxlist)) 
    { 
    i = i + 1; 
    } 

    if(i == maxlist) result = "List is full. Please try again."; 
    if(noun[i] == "") 
    { 
    noun[i] = word; 
    result = "Word was entered successfully."; 
    } 
} 
return result; 
} 
string removeword(string word, int list) 
{ 
string result; 

if(list == 1) 
{ 
    int i = 0; 
    while(!(adj1[i] == word || i == maxlist)) 
    { 
    i = i + 1; 
    } 

    if(i == maxlist) result = "Word is not on the list. Please try again."; 
    if(adj1[i] == word) 
    { 
    adj1[i] = ""; 
    result = "Word was removed successfully."; 
    } 
} 

    if(list == 2) 
{ 
    int i = 0; 
    while(!(adj2[i] == word || i == maxlist)) 
    { 
    i = i + 1; 
    } 

    if(i == maxlist) result = "Word is not on the list. Please try again."; 
    if(adj2[i] == word) 
    { 
    adj2[i] = ""; 
    result = "Word was removed successfully."; 
    } 
} 

if(list == 3) 
{ 
    int i = 0; 
    while(!(noun[i] == word || i == maxlist)) 
    { 
    i = i + 1; 
    } 

    if(i == maxlist) result = "Word is not on the list. Please try again."; 
    if(noun[i] == word) 
    { 
    noun[i] = ""; 
    result = "Word was removed successfully."; 
    } 
} 

return result; 
} 



/////////////////////////////main/////////////////////////////////// 


int main() 
{ 
string mainselection; 
string makeselection; 
string phrase; 

defaultlist(1); 
defaultlist(2); 
defaultlist(3); 

cout << "This program generates jargon phrases made of two adjectives and one noun,"; 
cout << " on three lists. Each list may contain a maximum of " << maxlist << "elements."; 
cout << " Please choose from the following menu by typing the appropriate number "; 
cout << "and pressing enter." << endl; 

cout << endl; 

cout << "1. Make a jargon phrase." << endl; 
cout << "2. View a list." << endl; 
cout << "3. Add a word to a list." << endl; 
cout << "4. Remove a word from a list." << endl; 
cout << "5. Restore default lists." << endl; 
cout << "More options coming soon!." << endl; 

cin >> mainselection 

if(mainselection == 1) 
{ 
    phrase = makephrase(); 

    cout << "Your phrase is " << phrase << "." << endl; 
    cout << "To make another phrase, press 1. To go back to the main menu,"; 
    cout << " press 2. To exit the program, press 3." << endl; 

    cin >> makeselection; 

    while(!(makeselection == "1" || makeselection == "2" || makeselection == "3")) 
    { 
    cout << "You have entered an invalid selection. Please try again." << endl; 
    cin >> makeselection; 
    } 

    while(makeselection == "1") 
    { 
    phrase = makephrase(); 
    cout << "To make another phrase, press 1. To go back to the main menu,"; 
    cout << " press 2. To exit the program, press 3." << endl; 
    } 

    if(makeselection == "2") main(); 
    if(makeselection == "3") return 0; 
} 

return 0; 
} 

//Rest of the options coming soon! 
+2

http://msdn.microsoft.com/fr-fr/library/799kze2z(VS.80).aspx –

+1

De quels symboles manquants l'éditeur de liens se plaint-il? Quel est le message d'erreur exact? – sth

Répondre

1

Le problème selon gcc est que vous n'avez pas déclaré correct pour inclure la fonction rand() - j'ai ajouté #include <cstdlib> et le problème a disparu.

Je dois aussi ajouter que dans votre fonction principale que vous avez fait ceci:

cin >> mainselection; 
if (mainselection == 1) 

qui ne fonctionne pas. Mainselection est une chaîne et ne peut être comparée à l'aide de la classe comparer la méthode, comme ceci:

cin >> mainselection; 
if (mainselection.compare("1")) 

qui va retourner 0 si elles sont égales.

De plus, si vous utilisez std::vector vous pouvez avoir des tableaux de taille dynamique très facilement en C++, vous continuez simplement à pousser des éléments à l'arrière du vecteur. Cela signifie que vous n'avez pas besoin de coder en dur les limites.

+1

Vous pouvez utiliser == pour comparer des chaînes en C++. Mais vous ne pouvez pas comparer une chaîne à un int. Donc 'if (mainselection == "1")' fonctionnerait. – mkj

1

Quelques suggestions pour vous aider:

  • Ligne 107: if(num4 = 0) (opérateur d'affectation) doit être if(num4 == 0) (égal à l'opérateur).
  • Ligne 260: il vous manque un point-virgule après cin >> mainselection.
  • La ligne 261: if(mainselection == 1) est illégale, mainselection étant std::string.
  • Ligne 284: if(makeselection == "2") main(); Vous n'êtes pas autorisé à appeler la fonction main() de manière récursive dans C++.
+1

J'ai légèrement adouci votre réponse. L'OP a également utilisé un compilateur. Pas tous les messages du compilateur initialement évident, parfois même pour les développeurs expérimentés. –

+0

C'est bien, mais lnk2019 est une erreur de l'éditeur de liens et ce code ne compile pas. –

Questions connexes