在向量练习中编译x86_64架构的C++不明符号

问题描述 投票:0回答:1

(更新了新代码,但同样的问题依然存在)

所以为我的C++课做了一些功课,快完成了,但就是不能编译,吐出以下错误信息。

Undefined symbols for architecture x86_64:
  "reportNames(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, char)", referenced from:
      _main in CHomeWork11-55ac9e.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

程序的代码如下

#include <iostream>
#include <iomanip>
#include <math.h>
#include <cmath>
#include <fstream>
#include <string>
#include <vector>
#include<algorithm>
using namespace std;
ifstream fin;

int getRank(vector<string> names, string choice);
void reportNames(vector<string> names, char letter);

int main ()

{
  string name;
  int counter = 0;
  string choice;
  bool on = true;
  char letter;

 vector <string> names;
 vector <string>::iterator iter;
 vector <string>::iterator iterF;

    fin.open("GirlNames.txt");  // reads in data

    getline(fin, name);

    while (!fin.fail())
    {
          names.push_back(name);
          getline(fin, name);
    }
    fin.close();

    cout << "Top Ten Baby Girl Names:" << endl;

    iter = names.begin();

    while(counter !=10)
    {
        cout << *iter << endl;
        iter++;
        counter++;
    }

    while(on)
    {
        cout << "Enter a name (press q to quit)" << endl;
        getline(cin, choice);
        if(choice == "q")
           on = false;

        else
        {
            iterF = find(names.begin(), names.end(), choice);
            if(iterF == names.end())
               cout << choice << " Is not on this list" << endl;
            else
            {
                  cout << choice << " is rank " << getRank(names, choice) << endl;
            }  
        }
    }
    sort(names.begin(), names.end());

    cout << "enter a starting letter for your name:" << endl;
    cin >> letter;
    reportNames(names, letter);
}

int getRank(vector<string> names, string choice)
{
    int rank = 1;
   for(int i = 0; i < names.size(); i++)
   {
       if(names[i] == choice)
           return rank;
        else
            rank++;
   }
   return 0; //dummy return statement for the compiler
}
void reportName(vector<string> names, char letter)
{
    for(int i = 0; i < names.size(); i++)
   {
       if(names[i].find(letter) !=string::npos)
         cout << names[i] << endl;
   }

}

我很确定这个问题与reportName函数有关,因为在我创建它之前,代码已经在编译和运行了。

c++ function vector compiler-errors linker-errors
1个回答
0
投票

比较两行。

void reportNames(vector<string> v, char letter);
void reportName(vector<string> names, char letter) {
...

你用一个名字声明了一个函数,但用另一个名字定义了。

© www.soinside.com 2019 - 2024. All rights reserved.