请求''是非类型的成员

时间:2014-10-27 13:02:25

标签: c++ object types

我想创建一个Accounts对象数组,这样我就可以管理它们从文件加载所有东西(按结构)。 我非常喜欢c ++,但我不知道我做错了什么。

做什么:Account** accounts[50] ? “”accounts[i] = new Account*; “”accounts[i]->newAccount(i, id_string, pw_string, level_int); 错误消息:request for member 'newAccount' in '* accounts[i]', which is of non-class type 'Account*'

AccountManagerFrm.cpp //运行所有内容的主文件

#include "AccountManagerFrm.h"
#include "Account.h"
#include "ladeAccounts.h"
using namespace std;
Account** accounts [50];
void AccountManagerFrm::createAccountClick(wxCommandEvent& event)
{    

    accounts[i] = new Account*;
    accounts[i]->newAccount(i, id_string, pw_string, level_int);  // ERROR LINE    

}

Account.cpp

class Account
{
    struct iAccount
    {
        string ID;
        string password;
        int level;
    };
Account()
    {

    } 
void newAccount(int anzahl, string username, string pw, int lvl)
    {
        iAccount neu;
        neu.ID = username;
        neu.password = pw;
        neu.level = lvl;

    }


};

Account.h

#include <string>
using namespace std;
class Account{

public: 
    Account();    
    void newAccount(int anzahl, string username, string pw, int lvl);   
    void getInformationFromFile();


};

1 个答案:

答案 0 :(得分:2)

  

我想创建一个帐户对象数组

那只是

Account accounts[50];

不是指向指针的怪异数组。然后,您可以使用.

访问一个
accounts[i].newAccount(i, id_string, pw_string, level_int);

您还需要修复类定义。标题中的定义本身需要包含所有成员。此外,标题应该有一个保护,以避免错误,如果你不止一次包含标题。将namespace std;转储到全局命名空间是个坏主意;这会污染包含标头的每个人的全局命名空间。整个标题应该是

#ifndef ACCOUNT_H
#define ACCOUNT_H

#include <string>

class Account {
public: 
    Account();    
    void newAccount(int anzahl, std::string username, string std::pw, int lvl);   
    void getInformationFromFile();
private:
    std::string ID;
    std::string password;
    int level;
};
#endif

源文件应该只定义成员函数,而不是重新定义整个类:

#include "Account.h"

Account::Account() {}

void Account::newAccount(int anzahl, std::string username, std::string pw, int lvl)
{
    ID = username;
    password = pw;
    level = lvl;
}

如果您正在努力学习基本的课程定义,那么您真的应该阅读good introductory book。这是一种复杂的语言,你永远不会通过猜测语法来学习它。