Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 需要有关getline函数错误的编译错误的帮助:调用';时没有匹配的函数;getline(std::istream&;,char&;)和#x27|_C++_Getline - Fatal编程技术网

C++ 需要有关getline函数错误的编译错误的帮助:调用';时没有匹配的函数;getline(std::istream&;,char&;)和#x27|

C++ 需要有关getline函数错误的编译错误的帮助:调用';时没有匹配的函数;getline(std::istream&;,char&;)和#x27|,c++,getline,C++,Getline,我有一个包含getline函数的源代码文件,编译时收到并出错(下面的代码和错误)。我的问题是,我复制并粘贴了一个已经编译和运行的程序(也包括下面)中的整个函数。我在程序中的另外两个源代码文件中也有getline函数,它们都可以很好地编译。我对编程很熟悉,刚开始C++编程(在java上好多了),所以尽量保持简单的答案。我在这里(和谷歌)浏览了一些已经发布的问题和答案,但我找到的所有答案都表明函数的参数不正确。但我知道它们在这里是正确的,因为它在另一个程序中工作得很好。另外,正如您在工作文件中看到的

我有一个包含getline函数的源代码文件,编译时收到并出错(下面的代码和错误)。我的问题是,我复制并粘贴了一个已经编译和运行的程序(也包括下面)中的整个函数。我在程序中的另外两个源代码文件中也有getline函数,它们都可以很好地编译。我对编程很熟悉,刚开始C++编程(在java上好多了),所以尽量保持简单的答案。我在这里(和谷歌)浏览了一些已经发布的问题和答案,但我找到的所有答案都表明函数的参数不正确。但我知道它们在这里是正确的,因为它在另一个程序中工作得很好。另外,正如您在工作文件中看到的,其中唯一包含的是iostream,它可以工作,即使用代码::块中的g++编译器。我也确保包含所有需要的变量/常量

下面是我从中获取错误的函数和文件的代码。我所指的零件用3*标记(很抱歉,我只能这么做)。这个错误也会在文章的底部重印

#include <iostream>
#include <istream>
#include "candidates.h"

using namespace std;

int nCandidatesInPrimary;

int delegatesForThisState;

const int maxCandidates = 10;

int delegatesWon[maxCandidates];

int totalVotes;

int totalDelegates = 0;

int votesForCandidate[maxCandidates];

string candidate[maxCandidates];

int nCandidates;

string candidateNames;

void readCandidates ()
{
  cin >> nCandidates;
  string line;
  getline (cin, line);

  for (int i = 0; i < nCandidates; ++i)
    {
      ***getline (cin, candidateNames[i]);***
      delegatesWon[i] = 0;
    }
}

int findCandidate (std::string name)
{
  int result = nCandidates;
  for (int i = 0; i < nCandidates && result == nCandidates; ++i)
    if (candidateNames[i] == name)
      result = i;
  return result;
}

void printCandidateReport (int candidateNum)
{
  int requiredToWin = (2 * totalDelegates + 2) / 3; // Note: the +2 rounds up
  if (delegatesWon[candidateNum] >= requiredToWin)
    cout << "* ";
  else
    cout << "  ";
  cout << delegatesWon[candidateNum] << " " << candidateNames[candidateNum] << endl;
}

void assignDelegatesToCandidates ()
{
  int remainingDelegates = delegatesForThisState;
  for (int i = 0; i < nCandidatesInPrimary; ++i)
    {
      int candidateNum = findCandidate(candidate[i]);
      int nDel = (delegatesForThisState * votesForCandidate[i] + (totalVotes-1)) / totalVotes;
      if (nDel > remainingDelegates)
    nDel = remainingDelegates;
      delegatesWon[candidateNum] += nDel;
      remainingDelegates -= nDel;
    }
}
#包括
#包括
#包括“候选者.h”
使用名称空间std;
int nCandidatesInPrimary;
int代表该状态;
const int maxCandidates=10;
int delegatesWon[最大候选人];
总票数;
整数=0;
int votesForCandidate[maxCandidates];
字符串候选者[最大候选者];
int Ncandiates;
串珠状假丝酵母;
空读候选项()
{
cin>>nCandidates;
弦线;
getline(cin,line);
对于(int i=0;i=需要时)

cout看起来您打算将candidateNames声明为
向量candidateNames;

vector<string> candidateNames;

void readCandidates ()
{
  cin >> nCandidates;
  string line;
  getline (cin, line);
  candidateNames.resize(nCandidates);    
  for (int i = 0; i < nCandidates; ++i)
    {
       getline (cin, candidateNames[i]);

    }
}
vector candidateNames;
空读候选项()
{
cin>>nCandidates;
弦线;
getline(cin,line);
candidateNames.resize(nCandidates);
对于(int i=0;i
candidateNames
是单个字符串,而不是字符串的集合。设置字符串的向量怎么样

std::vector candidateNames;

vector<string> candidateNames;

void readCandidates ()
{
  cin >> nCandidates;
  string line;
  getline (cin, line);
  candidateNames.resize(nCandidates);    
  for (int i = 0; i < nCandidates; ++i)
    {
       getline (cin, candidateNames[i]);

    }
}
然后在
for
循环之前:


candidateNames.resize(nCandidates);

看起来你忘记了

#include <string>
#包括

很可能其他的头已经拉入了string类本身,但不是所有的支持函数,比如接受
std::string
getline
重载,对不起,我在发布这个问题时可能不公平。我能够找到问题,是在我的头文件中,我把变量搞乱了。对于候选人,我忘记了在头文件的末尾。由于我没有在我的帖子中包含该文件,所以你看不到。不过谢谢你的帮助。

真的,这是你能做的最好的事情吗?发布一个有同样问题的5行代码怎么样?我把所有代码放在那里,试图帮助理解问题,并剔除我知道不是问题的东西,like#包括类似的东西,我已经尝试过了,但它不起作用。我从来没有做过向量,这也是家庭作业的一部分,这就是为什么我已经有了工作程序(单个文件)。我们假设只将函数分离到其他源文件中,这些变量也在其他文件中使用。我可以尝试,但我不知道这将如何影响程序的其他部分,通常,对于这些家庭作业,我们不必这样修改它们(通常)还有,为什么它在已经运行的程序中编译得很好(在我尝试将其全部更改为向量之前)?我不想让它成为一个向量,它在另一个程序中可以正常工作。我可以尝试更改它,但我想知道为什么它在另一个程序中工作,而不是在我之前在这个程序中工作。@gimpdogg函数的readCandidates()的整个逻辑以及名称(readCandidates)暗示它应该读取多个候选名称,因此是一个向量。此外,在您的工作示例中,您正在使用数组
std::string candidateNames[maxCandidates];
。向量是对数组的改进。好的,我明白了,谢谢,但我已经发现了问题。它在头文件中,我忘记了candidateNames后面的[]。