提问人:Andre Whittle 提问时间:5/14/2021 最后编辑:Vlad from MoscowAndre Whittle 更新时间:5/14/2021 访问量:814
不存在合适的构造函数 - Vector
No Suitable Constructor Exists - Vector
问:
我今天为自己开始了一个简单的编码项目,但我无法弄清楚这个错误或如何解决它。我收到的错误发生在我的循环中。更具体地说,它发生在作为参数传递的每个函数调用中。错误状态do
Nums
no suitable constructor exists to convert from to "std::vector<int, std::allocator<int>> [10]" to "std::vector<int, std::allocator<int>>"
对此的任何帮助将不胜感激!TIA!
//This program checks to see if a multiplied vector value is odd or even
//CheckOddEven.cpp
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
int setSize(int size, vector <int> Nums) //Sets vector size to user defined size
{
//Prompt user to enter an integer to establish array size
cout << "How many integers would you like to multiply?: ";
//Store user input to size
cin >> size;
//Resize vector to user size
Nums.resize(size);
return size;
}
vector <int> setNum(int size, int x, vector <int> Nums) //Sets values in each index
{
//Insertion loop to Nums vector
for (int i = 0; i < size; i++)
{
cout << "Enter integer #" << i + 1 << ": ";
cin >> x;
Nums.push_back(x); //Assigns value into vector
}
return Nums;
}
int doMath(vector <int> Nums, int result)
{
//Loop through Nums vector and multiply all values
accumulate(Nums.begin(), Nums.end(), result, multiplies<int>());
return result;
}
string oddEven(int result, string msg) //Check if int is even by seeing if there is a remainder
{
//If no remainder exists then positive
if (result % 2 == 0)
{
msg += "positive.";
}
//If remainder exists then negative
else
{
msg += "negative.";
}
return msg;
}
void Display(int result, string msg)
{
cout << "The product of your integers is " << result << endl;
cout << msg;
}
char checkCont(char cont)
{
//Asks user if they want to check another integer
cout << "Would you like to check another? (y/n)" << endl;
//Assigns input as char into cont
cin >> cont;
//Displays exit message and ends do-while
if (cont == 'n' || cont == 'N')
{
cout << "Thank you for using the Odd-Even Checker!" << endl;
cout << "Have a great day!" << endl;
}
return 'z';
}
int main()
{
int size; //User defined vector size
string msg = "The number you calculated is ";
char cont = ' '; //Char value for checking another vector
vector <int> Nums[10]; //Create int vector with predetermined size..can be changed with resize
int x; //User numbers
int result;
cout << "Welcome to the Odd-Even Checker!" << endl;
cout << "This program multiplies a given amount of numbers, then checks to see if the answer is even or odd." << endl;
do //Requires to run at least once
{
setSize(size, Nums);
setNum(size, x, Nums);
doMath(Nums, result);
oddEven(result, msg);
Display(result, msg);
checkCont(cont);
} while (cont == 'y' || cont == 'Y'); //end do-while
return 0;
}
答:
1赞
Vlad from Moscow
5/14/2021
#1
您声明了一个向量数组
vector <int> Nums[10];
但是将此数组传递给需要 vector 类型的标量对象的函数
int setSize(int size, vector <int> Nums);
//...
setSize(size, Nums);
也许你的意思不是数组,而是具有 10 个元素的向量,例如
vector <int> Nums(10);
或者只是一个空向量
vector <int> Nums;
似乎还存在一个问题,即您没有通过引用传递向量。因此,例如,该函数处理传递向量的副本。setSize
因此,函数中的此语句
Nums.resize(size);
没有意义。
将需要向量函数参数的类型更改为引用类型,例如
int setSize(int size, vector <int> &Nums);
^^^^^^
注意函数内没有使用参数大小的值,所以参数没有意义。size
此外,此功能没有意义
int doMath(vector <int> Nums, int result)
{
//Loop through Nums vector and multiply all values
accumulate(Nums.begin(), Nums.end(), result, multiplies<int>());
return result;
}
调用算法后,变量 results 未更改。std::accumulate
此外,您正在传递未初始化的变量结果
int result;
你至少应该写
long long int doMath( const std::vector<int> &Nums )
{
//Loop through Nums vector and multiply all values
long long result = std::accumulate(Nums.cbegin(), Nums.cend(), 1ll, std::multiplies<long long>());
return result;
}
你应该把你的程序分成几个小的子程序,并分别测试每个使用的功能,因为你似乎不明白你在做什么。之后,您可以将所有子程序组合到一个程序中。
例如,为了测试函数,您可以编写一个简单的程序,如下所示setSize
#include <iostream>
#include <vector>
std::vector<int>::size_type setSize( std::vector<int> &Nums )
{
//Prompt user to enter an integer to establish array size
std::cout << "How many integers would you like to multiply?: ";
//Store user input to size
std::vector<int>::size_type size = 0;
std::cin >> size;
//Resize vector to user size
Nums.resize( size );
return size;
}
int main()
{
std::vector<int> Nums;
auto size = setSize( Nums );
if ( size == Nums.size() )
{
std::cout << "The function works correctly.\n";
}
else
{
std::cout << "Something is wrong with the function!\n";
}
return 0;
}
在确定该功能按预期工作后,您可以将其添加到主程序中。
评论