C++ "No matching function for call" 错误
C++ "No matching function for call" error
我正在使用 MinGW 编译器。我不明白为什么我会收到错误消息。
错误:
Multiple markers at this line
- candidate is:
- no matching function for call to 'InsultGenerator::InsultGenerator()'
- Line breakpoint: Insultgenerator_0hl14.cpp [line: 22]
这是 cpp 文件:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "Insultgenerator_0hl14.h"
using namespace std;
FileException::FileException(const string& m) : message(m){}
string& FileException::what(){ return message;}
NumInsultsOutOfBounds::NumInsultsOutOfBounds(const string& m) : message(m){}
string& NumInsultsOutOfBounds::what(){ return message;}
InsultGenerator::InsultGenerator(const InsultGenerator& ) {}
void InsultGenerator::initialize() const{
int cols(0);
InsultGenerator t1;
string insults;
string filename("InsultsSource.txt");
ifstream file(filename.c_str());
if(file.fail()){
throw FileException("File not read.");
}
while(file >> insults){
if(cols==0){
t1.colA.push_back(insults);
cols++;
} else if(cols==1){
t1.colB.push_back(insults);
cols++;
}else{
t1.colC.push_back(insults);
cols= cols -2;
}
}
for (int i=0;i<50;i++){
cout << i << t1.colA[i];
}
}
这是头文件:
#ifndef INSULTGENERATOR_0HL14_H_
#define INSULTGENERATOR_0HL14_H_
#include <string>
#include <vector>
using namespace std;
class InsultGenerator{
public:
// InsultGenerator(vector<string>);
InsultGenerator(const InsultGenerator &);
void initialize() const;
string talkToMe() const;
vector<string> generate(const int) const;
int generateAndSave (const string, const int) const;
private:
vector<string> colA;
vector<string> colB;
vector<string> colC;
};
class FileException{
public:
FileException(const string&);
string& what();
private:
string message;
};
class NumInsultsOutOfBounds{
public:
NumInsultsOutOfBounds(const string &);
string& what();
private:
string message;
};
#endif
因为您没有 InsultGenerator
对象的构造函数。
在头文件中,添加 InsultGenerator();
并在 cpp 文件中添加
InsultGenerator::InsultGenerator() { }
您有一个 InsultGenerator
的构造函数:InsultGenerator(const InsultGenerator &);
,但它有参数。需要一个不带参数的Constructor,所以语句InsultGenerator t1;
可以正确调用对应的Constructor。
我正在使用 MinGW 编译器。我不明白为什么我会收到错误消息。
错误:
Multiple markers at this line
- candidate is:
- no matching function for call to 'InsultGenerator::InsultGenerator()'
- Line breakpoint: Insultgenerator_0hl14.cpp [line: 22]
这是 cpp 文件:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include "Insultgenerator_0hl14.h"
using namespace std;
FileException::FileException(const string& m) : message(m){}
string& FileException::what(){ return message;}
NumInsultsOutOfBounds::NumInsultsOutOfBounds(const string& m) : message(m){}
string& NumInsultsOutOfBounds::what(){ return message;}
InsultGenerator::InsultGenerator(const InsultGenerator& ) {}
void InsultGenerator::initialize() const{
int cols(0);
InsultGenerator t1;
string insults;
string filename("InsultsSource.txt");
ifstream file(filename.c_str());
if(file.fail()){
throw FileException("File not read.");
}
while(file >> insults){
if(cols==0){
t1.colA.push_back(insults);
cols++;
} else if(cols==1){
t1.colB.push_back(insults);
cols++;
}else{
t1.colC.push_back(insults);
cols= cols -2;
}
}
for (int i=0;i<50;i++){
cout << i << t1.colA[i];
}
}
这是头文件:
#ifndef INSULTGENERATOR_0HL14_H_
#define INSULTGENERATOR_0HL14_H_
#include <string>
#include <vector>
using namespace std;
class InsultGenerator{
public:
// InsultGenerator(vector<string>);
InsultGenerator(const InsultGenerator &);
void initialize() const;
string talkToMe() const;
vector<string> generate(const int) const;
int generateAndSave (const string, const int) const;
private:
vector<string> colA;
vector<string> colB;
vector<string> colC;
};
class FileException{
public:
FileException(const string&);
string& what();
private:
string message;
};
class NumInsultsOutOfBounds{
public:
NumInsultsOutOfBounds(const string &);
string& what();
private:
string message;
};
#endif
因为您没有 InsultGenerator
对象的构造函数。
在头文件中,添加 InsultGenerator();
并在 cpp 文件中添加
InsultGenerator::InsultGenerator() { }
您有一个 InsultGenerator
的构造函数:InsultGenerator(const InsultGenerator &);
,但它有参数。需要一个不带参数的Constructor,所以语句InsultGenerator t1;
可以正确调用对应的Constructor。