【问题标题】:How to pass in an array of objects: error c2146: syntax error : missing ')' before identifier 'myMembers'如何传入对象数组:错误 c2146:语法错误:在标识符“myMembers”之前缺少“)”
【发布时间】:2015-06-30 20:17:24
【问题描述】:

我是一名 C++ 学生,这是我在这里的第一篇文章。

我有一个包含Member 对象的数组(将来会是动态的)。我正在尝试将数组传递给一个函数,在我的例子中是getLogin

我认为我有一些语法错误,我仍在努力理解动态数组和在不同情况下正确的指针语法。 Visual Studio 显示 myMembers 的错误,它被写为 getLogin 的参数。

#include <iostream>
#include <string>
#include "Member.h"
using namespace std;

int getLogin( const int, Member[] );

int main(){

    int numAccounts = 0;
    int accCapacity = 5;
    int currentAcc = 0;

    Member member[5];

    currentAcc = getLogin( numAccounts, member );
    return 0;
}

int getLogin( const int lastAcc, Member[] myMember ){
    int accNum;
    cout << "account number:" << endl;
    cin >> accNum;

    if( accNum > 0 && accNum <= lastAcc ){
        myMember[accNum].setLoggedIn( true );
    }
    else{
        accNum = 0;
    }
    return accNum;
}

(ps 我真正想要的是一个指向数组的指针,因为我不希望创建整个数组的副本。但是,我相信使用数组名称实际上就像使用指向第一个的指针元素。所以我想我不需要担心这个。)

【问题讨论】:

  • 嗯.. 我现在正在阅读这个问题。但是,看起来他们的答案建议对函数使用这种格式: int getLogin( const int lastAcc, Member (&myMemberArr)[] ) 但我不确定要为数组的大小输入什么..

标签: c++ arrays pointers object


【解决方案1】:

修改getLogin()的定义如下:

int getLogin( const int lastAcc, Member myMembers[] ){
    //...
}

(当然你最好使用std::vectorstd::array,但由于这是一个家庭作业,这个建议可能没有意义)

【讨论】:

  • 不是 std:: 没有意义:“使用命名空间 std”吗?你说得对,我完全不熟悉这个哈哈。
  • @Rengetsu using namespace std is considered bad practice
  • @Rengetsu 我不是说你不熟悉这个,只是学生经常禁止使用标准 C++ 容器
  • 哦,我明白了,这很有趣。感谢您抽出宝贵时间这么说。
【解决方案2】:

如果你想传递一个指针数组,那么你必须改变 你的函数 getLogin 的实现:

int getLogin( int lastAcc, Member** myMembers )
{
    int accNum;

    if( accNum > 0 && accNum <= lastAcc )
    {
        myMembers[accNum]->setLoggedIn( true );
    }
    else{
        accNum = 0;
    }
    return accNum;
}

这就是您将数组传递给它的方式:

int numAccounts = 0;
int accCapacity = 5;
int currentAcc = 0;

Member* members[numAccounts];
for ( int i =0; i < numAccounts; i++)
{
  members[i] =  new Member();
}

currentAcc = getLogin( numAccounts, members )

【讨论】:

  • 他似乎并不想要一个指针数组,他只是想让函数中的对象数组可以访问。
  • @Matt 你是对的。我并没有尝试传入一个指针数组,但将其视为一个示例很有趣。谢谢!
  • 如果您的应用程序将来会是动态的,那么传递指针可能是要走的路。您每次都将创建同一对象的新实例。所以将它作为指针传递是非常有效的。
  • 哦,我明白了。谢谢,那我得考虑如何实现一个动态的指针数组了:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多