Ошибка lnk2019 в очень простой программе на С ++ - PullRequest
1 голос
/ 23 марта 2010

Я пытался удалить различные детали и сборку, но ничто не устраняет ошибку lnk2019 и даже не вызывает каких-либо обычных ошибок.

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

#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 ]

1 голос
/ 23 марта 2010

Несколько советов, которые могут вам помочь:

  • Строка 107: if(num4 = 0) (оператор присваивания) должен быть if(num4 == 0) (равен оператору).
  • Строка 260: Вы пропускаете точку с запятой после cin >> mainselection.
  • Строка 261: if(mainselection == 1) недопустимо, mainselection означает std::string.
  • Строка 284: if(makeselection == "2") main(); Вы не можете рекурсивно вызывать функцию main() в C ++.
1 голос
/ 23 марта 2010

Проблема согласно gcc заключается в том, что вы не указали правильное включение для функции rand() - я добавил #include <cstdlib>, и проблема исчезла.

Я также должен добавить, что в вашей основной функции вы сделали это:

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

, который не работает. Mainselection - это строка, которую можно сравнивать только с помощью метода сравнения классов, например:

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

это вернет 0, если они равны.

Кроме того, если вы используете std::vector, вы можете очень легко иметь массивы динамического размера в C ++, вы просто продолжаете помещать элементы в конец вектора. Будет означать, что вам не нужно жестко кодировать ограничения.

...