我想创建一个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*'
#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
}
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();
};
答案 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。这是一种复杂的语言,你永远不会通过猜测语法来学习它。