E0312, C2664 尝试将矢量对象作为函数参数传递时出错

Posted

技术标签:

【中文标题】E0312, C2664 尝试将矢量对象作为函数参数传递时出错【英文标题】:E0312, C2664 Error When Trying to Pass a Vector Object as a Function Parameter 【发布时间】:2019-03-10 12:37:59 【问题描述】:

我目前正在为学校做一个项目。我正在创建的代码是一个银行账户系统。为了访问不同的成员,我让用户输入他们的成员 ID,该 ID 作为参数之一传递给名为 findMember 的函数。 函数如下:

int findMember(vector<Member> patron, int memID)

    int vectorSize;
    vectorSize = patron.size();
    for (int index = 0; index < vectorSize; index++)
    
        if (memID == patron[index].getMemberID())
            return index;
    

这是矢量:

vector<Member*> patron; // Vector to store the members.

这是函数调用:

int acctID, memberIndex;
cout << "Enter your Account ID: ";
cin >> acctID;

memberIndex = findMember(patron, acctID);   // Helps find the index if the current stored member.
patron[memberIndex]->menu();                // Opens the current members 
storage location.    

错误代码如下:

Error (active)  E0312   no suitable user-defined conversion from "std::vector<Member *, std::allocator<Member *>>" to "std::vector<Member, std::allocator<Member>>" exists
Error C2664 'int findMember(std::vector<Member,std::allocator<_Ty>>,int)': cannot convert argument 1 from 'std::vector<Member *,std::allocator<_Ty>>' to 'std::vector<Member,std::allocator<_Ty>>'

我在网上搜索了 E0312,但没有找到抛出它的原因。 C2664 也有同样的结果。我的代码哪里出了问题? 另外,提前致谢。

【问题讨论】:

很好地提交了问题。现在,查看 findMember() 的第一个参数,然后将其与您的向量声明进行比较。会员与会员* ?选择一个并始终如一地使用它。代码看起来不错,否则。 谢谢!这有助于摆脱错误 【参考方案1】:

感谢@2785528 的回复。

我与传递vector&lt;Member*&gt; 的方式不一致。修复该错误后,只需将 patron[index].getMemberID() 更改为 patron[index]-&gt;getMemberID()

【讨论】:

以上是关于E0312, C2664 尝试将矢量对象作为函数参数传递时出错的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 C++ 中执行一些 OpenGL 时出现 C2664 错误

带有矢量对象 C++ 的快速排序函数

error C2664: “CreateFileW”: 不能将参数 1 从“char *”转换为“LPCWSTR”

求助:error C2664: “CreateWindowExW”: 不能将参数 3 从“const char [8]”转换为“LPCWSTR”

C++11多线程第三篇:线程传参详解,detach()大坑,成员函数做线程参数

C++11多线程第三篇:线程传参详解,detach()大坑,成员函数做线程参数