lau*_*ent 7 c++ variables static class
我有一个名为filepaths.h的头文件,它定义了许多静态变量:
#ifndef FILEPATHS_H
#define FILEPATHS_H
class FilePaths {
public:
static QString dataFolder();
static QString profileFolder();
private:
static QString dataFolder_;
static QString profileFolder_;
};
}
#endif // FILEPATHS_H
Run Code Online (Sandbox Code Playgroud)
我有一个关联的filepaths.cpp,最初看起来像这样:
#include "FilePaths.h"
QString FilePaths::dataFolder() {
return dataFolder_;
}
QString FilePaths::profileFolder() {
return profileFolder_;
}
Run Code Online (Sandbox Code Playgroud)
但是这不起作用 - 我在所有静态变量上得到了一个"未解决的符号错误"链接器错误.所以我以这种方式将这些变量添加到C++文件中:
#include "FilePaths.h"
QString FilePaths::dataFolder_ = "";
QString FilePaths::profileFolder_ = "";
QString FilePaths::dataFolder() {
return dataFolder_;
}
QString FilePaths::profileFolder() {
return profileFolder_;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但我不明白为什么.
为什么需要将这些静态变量定义两次?或者也许我不是定义它们而是初始化它们?但仍然为什么需要这样做呢?或者我应该以不同的方式写我的课?
一个是定义,另一个是声明.不同之处在于声明可以多次出现,对于不在类中的变量,可能永远不会出现,而定义只能出现一次.
需要单独的声明和定义的原因是古老的历史,它基本上不必那样的东西,但它是这样的,以便C++与C兼容,C被设计为在20世纪70年代.