2013-05-23 3 views
0

이것은 클래스와 함수로 구성된 헤더 파일입니다. 필자는 함수를 올바르게 선언하지 않았기 때문에 누군가 내 오류가있는 곳을 지적 할 수 있습니까? 고마워요! 신참 실수가있을거야. C++을 처음 접했어.C++ - 컴파일시 오류가 발생했습니다.

using namespace std; 



class bankAccount 
{ 
    public: 
     int accNo; 
     int password; 

     double balance; 
     double withdrawamt; 
     double depositamt; 

     char name[20]; 
     char address[40]; 
     char username[10]; 

    public: 

     double checkbalance(); 
     double deposit(); 
     double withdraw(); 

}; 

bankAccount::withdraw() 
{ 
     cout << "Enter Withdraw amount: "; 
     cin >> withdrawamt; 
     if (balance > withdrawamt) 
      balance = (balance - withdrawamt);  
} 
+4

실제 발생하는 오류를 포함 할 수 있다면 분명 도움이 될 것입니다. – Nbr44

+2

'name [20]'은 잘못되었을 가능성이없는 디자인처럼 보입니다. 일단 고객에게 넘겨지면 다시 물지 않습니다. –

+0

최소의 클래스를 먼저 컴파일하고 거기에서 가져 오는 것이 어떨까요? 귀하의 모범에서 너무 많은 것이 잘못되었습니다. – juanchopanza

답변

2

인출 기능에는 반품 종류가 없습니다. 그것은해야한다 : double bankAccount::withdraw()

대신 체크

bankAccount::withdraw()의 헤더에있는 함수 프로토 타입 및 컴파일러의 오류 코드. 예를 들어, ideone에 복사 붙여 넣기가 바로 대답 제공합니다

prog.cpp:25:23: error: ISO C++ forbids declaration of ‘withdraw’ with no type [-fpermissive] prog.cpp:25:1: error: prototype for ‘int bankAccount::withdraw()’ does not match any in class ‘bankAccount’ prog.cpp: 21:16: error: candidate is: double bankAccount::withdraw()

행운을

편집 :

나는 당신이 또한 반환 문을 추가해야 함을 명시 할 것을 잊었다
  1. 당신의 인출 방법.
  2. 이름, 주소 및 사용자 이름에 정적 배열을 실제로 사용할지 묻는 것이 좋습니다. 그리고 두 개의 센트는 주소가 논리적으로 은행 계좌에 속해 있지 않기 때문에 사용자를 위해 별도의 수업을 만드는 것입니다 (어쨌든 나에게는 안됨).
  3. 보증금은 인수로 double을 취하고 void를 반환해야합니다.
  4. 인출 금액과 입금액에 대한 멤버 변수가 필요하지 않습니다. 로컬 변수를 만들거나 아래 코드와 같이 메서드에 인수로 전달하는 것이 좋습니다.

여기 대안 구현, 나는 이름과 암호에 남아 있지만, 정말이 다른 클래스로 이동해야 있습니다 :

#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 

class bankAccount 
{ 
    public: 
    int accNo; 
    int password; 

    vector<string> name; 
    vector<string> address; 
    vector<string> username; 

    private: 
    double balance; 

    public: 
    bankAccount(double deposit) : balance(deposit) {} 
    double checkBalance() { return balance; } 
    void deposit(double amount); 
    void withdraw(double amount); 

}; 

void bankAccount::deposit(double amount) 
{ 
    balance += amount; 
} 

void bankAccount::withdraw(double amount) 
{ 
    if (balance > amount) 
     balance = (balance - amount); 
} 

int main(int argc, char* argv[]) 
{ 
    bankAccount someOnesAccount = bankAccount(20.0); 
    someOnesAccount.deposit(30); 
    someOnesAccount.withdraw(15); 
    cout << someOnesAccount.checkBalance(); 
    return 0; 
} 

나는이 좀 더 helpfull 바랍니다. 나는 전에 나쁜 대답에 사과했다. 또한이 코드를 개선하는 방법은 아직 많이 남아 있습니다. 프로그램에서

0

고려 사항 :

  1. double withdraw();는 반환 형식하지만 함수 정의와 선언

    는 두 배 값을 반환하지 않습니다.

  2. 함수 정의가 리턴 유형 double bankAccount::withdraw()을 선언으로 정의하지 않습니다.

  3. 따라서 함수가 define을 반환하지 않고 두 위치 모두를 선언하면 리턴 유형으로 void을 사용하십시오. 아무것도 반환해야하는 경우 define에 동일한 반환 유형을 사용하고 선언하고 값을 반환해야합니다.

  4. 사용하기 전에 멤버 변수를 초기화하십시오 (아마도 생성자 내부에서).

은 또한이 튜토리얼 경작하는 것이 좋습니다 :이 모든 헤더 파일에, 당신은 소스 파일에 함수 구현을 넣을 수 있습니다 using namespace std; 을 사용하지 않는 경우 http://www.cplusplus.com/doc/tutorial/

1

을, 그리고 당신은 COUT를 사용할 때 and cin, 표준 네임 스페이스가 필요한 경우에는 헤더에 사용할 필요가 없습니다. UR 방법은이 경우에 균형 즉는 "더블"값을 반환하기 때문에 당신이 함수의 정의를 작성할 때

0

당신은) (철회 UR 구문 반환 유형을 포함해야합니다.

다음은 수정 된 코드 줄입니다.

double bankAccount::withdraw() 
{ 
--- 
}