2012-01-04 15 views
0

これでかなり徹底的に検索しましたが、答えが見つからないようです。C++:宣言されていない識別子

私は自然にベクトルを持つ「バンク」クラスを持っています。ここでの問題の一部との機能の一つである:

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)); 
} 

と私は「構文エラー:識別子 『アカウント』と」取得 『ACC』:宣言されていない識別子エラー。

この.cppファイルは#include "account.h"を持っている(銀行の個人口座である)#include "bank_account.h"を持っており、循環参照のための方法は絶対にありません #include "bank.h"を持っています。

私がaccount::と入力すると、スコープが表示され、右クリックして宣言を検索すると(VS 2008)それが見つかります。

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

あなたはacc->open()を呼び出している、とaccはである:ここ

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); 
}; 

おかげで...

+2

メジャーエラーではありませんが、アカウントが存在する場合はACCOUNT_EXISTSを返します。そうでなければ、何も返さない!しかし、あなたはintを返すように契約されています。 – abelenky

+0

迅速な返信をありがとう!元の質問をアカウントクラスで編集しました。問題のある行は、コードの最初の部分に "acc"が付いた行です。 – Mosho

+0

'account'という名前は型とメンバの両方のオブジェクトですか? –

答えて

1

まず、このライン上にありますタイプaccount*と入力します。
しかし、方法openの定義はクラスaccountにはありません。
したがって、accポインタを使用してopenを呼び出すことはできません。

最も近い一致は、方法openAccountですが、現在コメントアウトされており、使用できません。


第2に、コードは accounts.push_back()を呼び出します。
しかし、あなたが私たちに示したコードでは、 bankにはメンバーがありません accounts
その部分も表示する必要があります。

+0

'acc'は' account * 'タイプです。間接指示のレベルは重要です。 –

+0

@BenVoigt:あなたは正しいです。編集されました。 – abelenky

0
  1. 質問でのcppファイルにaccount.hを含めるようにしてみてください。あなたが使っているものを含めると、あなたのために他のインクルードファイルに依存しないようにするのが良いでしょう。

  2. accountのオブジェクトが流出しているようです。彼らは(アカウントが存在するかどうかにかかわらず、場合)に解放されることはありません

それはaccountクラスが異なる名前空間にあることだろうか?

0

一部のヘッダーに同じヘッダーガードが使用されている可能性がありますか?ヘッダーを含めるべきだと思うようですが、そうではありません。

ですから、複数のファイルで

#if !defined(BANK_H) 
#define BANK_H 

#endif //BANK_H 

または類似のものを持っていないことを確認してください。各ヘッダーファイルにはガードが必要ですが、同じものではありません:)

関連する問題