我在编译时遇到以下错误:
Compilation started at Wed Oct 5 03:05:32
|make -k proj1
|g++ proj1.cc -o proj1
|proj1.cc: In function ‘int main()’:
|proj1.cc:75:13: error: no matching function for call to ‘getData()’
|proj1.cc:75:13: note: candidate is:
|proj1.cc:46:6: note: template<class T> void getData(Vector<T>&, int&)
|proj1.cc:80:16: error: no matching function for call to
‘computeSum()’
|proj1.cc:80:16: note: candidate is:
|proj1.cc:28:6: note: template<class T> void computeSum(Vector<T>,
int, T&, bool&)
|proj1.cc:83:9: error: ‘success’ was not declared in this scope
|proj1.cc:84:27: error: ‘total’ was not declared in this scope
make: *** [proj1] Error 1
Compilation exited abnormally with code 2 at Wed Oct 5 03:05:33
我只是不打电话给我的模板
#include <std_lib_facilities.h>
#include <vector>
#include <string>
#include <iostream>
class T
{
public:
void computeSum(vector<T> in, int n, T &out, bool &success);
void getData(vector<T> &data, int &howMany);
};
template <class T>
// void computeSum(vector<T> data, int howMany, T& out, bool& success)
void computeSum(vector<T> data, int n, T &out, bool &success)
{
if (n < data.size()){
success = true;
int i = 0;
while (i<n){
out = out + data[i];
++i;
}
} else {
success = false;
cerr << "You can not request to sum up more numbers than there are.\n";
}
}
template <class T>
void getData(vector<T> &data, int &howMany)
{
cout << "Please insert the data:\n";
T n;
do{
cin >> n;
data.push_back(n);
} while (n<howMany);
cout << "This vector has " << data.size() << " numbers.\n";
}
void offerHelp()
{
cout << "Do you want help? ";
string help;
cin >> help;
if (help == "n" || help == "no"){
cout << endl;
}else{
cout << "Enter your data. Negative numbers will be added as 0. Ctrl-D to finish inputing values.\n";
}
}
int main()
{
offerHelp();
getData();
cout << "How many numbers would you like to sum?";
int howMany;
cin >> howMany;
computeSum();
if (success = true) {
cout << "The sum is " << total << endl;
} else {
cerr << "Oops, an error has occured.\n";
}
cout << endl;
return 0;
}
答案 0 :(得分:3)
您的函数已声明并定义为:
void getData(Vector&amp;,int&amp;)
您将其称为:
的getData();
显然,编译器找不到不带参数的函数,因此找不到no mathching function
错误。
computeSum()
的情况相同。
还有许多其他错误,例如success
和total
是两个变量,它们在main
中被访问但未在main
内的任何地方声明。< / p>
答案 1 :(得分:1)
您忘记将参数传递给您的函数,例如:
void computeSum(vector<T> data, int n, T &out, bool &success)
computeSum();
显然功能签名不匹配。您的类T也未声明为模板类。我认为这是你最初的意图。函数computeSum和getData不实现类的公共成员函数。