C++:未声明的标识符

C++: undeclared identifier

本文关键字:标识符 未声明 C++      更新时间:2023-10-16

我已经对此进行了彻底的搜索,但似乎找不到答案。

我有一个"bank"类,它自然有一个向量。以下是有问题部分的函数之一:

int bank::open(op *o, int id)
{
account *acc = new account();
if (search(o->account))
    return ACCOUNT_EXISTS;
accounts.push_back(acc->open(o, id));
}

我得到了一个"语法错误:标识符'account'和"'acc':未声明的标识符错误。

这个.cpp#include "bank.h"#include "bank_account.h"(是银行个人账户)有#include "account.h",绝对没有办法循环引用。

如果我键入account::,作用域是可见的,如果我右键单击并搜索声明,它(VS2008)就会找到它。

这是account.h类声明

class account
{
public:
account(void) {}
~account(void) {}
int number;
int password;
int bal;
//void openAccount(op *o, int id);
void deposit(int amount, int id);
int withdraw(int amount, int id);
void balance(int id);
void close(int id);
int comission(float percentage);
void log(int msg, int id, int amount=0);
};

谢谢你的帮助。。。

首先,在这一行:

accounts.push_back(acc->open(o, id));

您正在调用acc->open(),而acc的类型为account*
但是我在类account中没有看到方法open的任何定义
因此,不能通过acc指针调用open

最接近的匹配是方法openAccount,但该方法当前已被注释掉,无法使用。<小时>其次,您的代码调用accounts.push_back()
但就您向我们展示的代码而言,bank没有成员accounts
你也需要给我们看那部分

  1. 在问题中尝试将account.h包含在cpp文件中。最好包含您使用的内容,而不是依赖其他包含文件来为您包含内容。

  2. 您似乎正在泄漏account对象。他们永远不会被释放(无论帐户是否存在)

可能是account类在不同的命名空间中吗?

您的某些标头是否可能具有相同的标头保护?看起来你认为应该包括一个标题,但事实并非如此。

所以要确保你没有

#if !defined( BANK_H )  
#define BANK_H
#endif //BANK_H

或者多个文件中类似的内容。每个头文件都应该有保护,但不是相同的:)