我是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;
}
我做错了什么?
答案 0 :(得分:0)
因为ATM::accountID
在.h
文件中声明,在类之外,每次该文件包含在另一个文件中时,它都会被全局声明。你把它包括两次;在main.cpp
和ATM.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;
}