我如何使用这些课程?

时间:2016-11-30 16:24:56

标签: c++ header-files

我是C ++的新手,我正在尝试启动一个项目,每当我创建一个新的ATM类实例时,它会将accountID的帐户ID加1,并显示当前的帐户ID。 这是我的代码:

// Bank ATM.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "ATM.h"


int main()
{
    ATM abunch[15];
    for (int i = 0; i < 15; i++){
        abunch[i] = ATM();
    }
    return 0;
}


//ATM.h
 #include "stdafx.h"
 #ifndef atm
#define atm
class ATM {
    static int accountID;

public:
    ATM();
};
int ATM::accountID = 0;
#endif


//ATM.cpp
#include "stdafx.h"
#include "ATM.h"
#include <iostream>
ATM::ATM() {
    ++accountID;
    std::cout << accountID;
}

我收到以下错误消息: enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:0)

因为ATM::accountID.h文件中声明,在类之外,每次该文件包含在另一个文件中时,它都会被全局声明。你把它包括两次;在main.cppATM.cpp中。这是一个禁忌。

声明需要移至ATM.cpp

//ATM.h
 #include "stdafx.h"
 #ifndef atm
#define atm
class ATM {
    static int accountID;

public:
    ATM();
};
int ATM::accountID = 0;   // <--- remove this line
#endif


//ATM.cpp
#include "stdafx.h"
#include "ATM.h"
#include <iostream>
int ATM::accountID = 0;   // <----put it here
ATM::ATM() {
    ++accountID;
    std::cout << accountID;
}