对于上下文,我是C ++的新手,我用Java编程。所以我对C ++语法非常糟糕,并且需要愚蠢的答案。
我似乎无法理解为什么我会收到此错误。我检查了多个答案,但它们都是原始变量。我正在使用对象,我猜测它会导致一些错误,或者我只是失明。
这是我的课程,重点是公共
下的3个静态变量class SuperMarket
{
private:
int count;
int totalService;
int totalWait;
public:
static CustomerQ * regularLine; // this
static CustomerQ * expressLine; // this
static EventQ * eventQueue; // this
// Constructors
SuperMarket();
// Destructor
~SuperMarket();
// Accessors
void start(int choice, string file);
static void loop();
// Mutators
};
我在构造函数
中初始化静态成员SuperMarket::SuperMarket() // Constructor
{
count = 0;
totalService = 0;
totalWait = 0;
regularLine = new CustomerQ(); *error*
expressLine = new CustomerQ(); *error*
SuperMarket::eventQueue = new EventQ(); *error*
}
除了我在其他地方做SuperMarket :: Object我得到错误。我尝试使用SuperMarket ::并且没有你可以看到,但我的错误并没有消失。当然,在我的SuperMarket课程之外,我也做SuperMarket ::。
答案 0 :(得分:3)
您只声明了静态类成员;你需要在类之外定义它们,就像使用函数一样。
在SuperMarket
源文件中:
// You probably want to initialize outside of the constructor, because otherwise it would
// erase your queues whenever a new instance of SuperMarket is created.
CustomerQ* SuperMarket::regularLine = new CustomerQ();
CustomerQ* SuperMarket::expressLine = new CustomerQ();
EventQ* SuperMarket::eventQueue = new EventQ();
SuperMarket::SuperMarket() // Constructor
{
// Probably don't initialize your statics in here
// ...
然而,在这种情况下,我认为这些成员不是静止的。静态表示它们应该在包含类的所有实例之间共享;对于不同的SuperMarket
,所有人共享同一行客户真的有意义吗?
答案 1 :(得分:2)
在C ++(和Java)中,成员变量前面的关键字static
表示一个类成员,即一个为该类存在一次的变量,而不是该类的每个实例都存在一次。
在C ++中(与Java相反),您必须在类定义之外另外定义一个类成员,即:
class SuperMarket {
...
static CustomerQ * regularLine; // this
...
};
// .cpp-file:
CustomerQ * SuperMarket::regularLine = nullptr;
SuperMarket::SuperMarket() // Constructor
{
count = 0;
...
}
但是,请注意,在构造函数中(即创建每个对象)将新对象分配给“类成员”(即在程序中只存在一次的静态数据成员)很少有意义。