在C ++中通过引用传递字符串

时间:2020-04-09 16:22:26

标签: c++ function reference

我正在为我的c ++类编写代码。任务是从2个不同的txt文件中读取名称(已经在我的目录中),并查找用户搜索的字符串/名称是否与文件中已有的任何名称匹配。我的代码对我来说似乎很好,但是我的函数原型中出现一个错误,提示“未在此范围内声明字符串”。有什么办法吗?我的代码如下:

   #include <fstream>
   #include <string>
   #include <vector>
   void boysfunc(string&, string&);
   void girlsfunc(string&, string&);
   using namespace std;
   int main()
   {
    vector<string> boysnames;
    vector<string> girlsnames;
    string boysname, girlsname;
    ofstream outputFile;
    cout << "Enter a boy's name, or N if you do not want to 
   enter a name: ";
    cin >> boysname;
    cout << "Enter a girl's name, or N if you do not want to 
   enter a name: ";
    cin >> girlsname;
    if (boysname != "N")
    {
    boysfunc(boysname, boysnames);
    }
    if (girlsname != "N")
    {
    girlsfunc(girlsname, girlsnames);
    }
   }
   void boysfunc(string &boysname, string &boysnames)
   {
    outputFile.open("BoysNames.txt");
        while(outputFile >> boysnames)
    {
        /*Declare local variable count to use as a counter*/
            int count = 0;
            if (boysnames(count) == boysname)
            {
                outputFile.close();
                cout << "The name " << boysname << " is very 
   popular among boys.";
                return;
            }
            else
            {
            count++;
            }
        }
    }
   void girlsfunc(string &girlsname, string &girlsnames)
   {
    outputFile.open("GirlsNames.txt");
        while(outputFile >> girlsnames)
    {
        /*Declare local variable count to use as a counter*/
            int count = 0;
            if(girlsnames(count) == girlsname)
            {
                outputFile.close();
                cout << "The name " << boysname << " is very 
   popular among girls.";
                return;
                }
                else
                {
                    count++;
                }
    }
   }  

2 个答案:

答案 0 :(得分:1)

您需要在此处修复两个主要错误。

    如果您想在写using namespace std;之前省略std::,则必须在使用字符串之前写
  • string。否则,您可以在函数声明中编写std::string&
  • boysfunc()girlsfunc()vector<string>&作为第二个参数,而您在函数的声明和定义中错误地提到了string&。解决这个问题。

答案 1 :(得分:0)

在此片段中

string s = "hello";
using namespace std;

编译器不知道类型stringusing namespace std;就是这样做的。它基本上将string变成了std::string

可以交换上面的两行,它将起作用,但是我强烈建议您在任何地方都明确说出std::string。我确信您的IDE将使您轻松完成此操作。