gpt4 book ai didi

c++ - 为什么C++中静态变量需要声明两次

转载 作者:可可西里 更新时间:2023-11-01 18:26:50 26 4
gpt4 key购买 nike

我有一个名为 filepaths.h 的 header ,它定义了一些静态变量:

#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

我有一个关联的 filepaths.cpp,最初看起来像这样:

#include "FilePaths.h"

QString FilePaths::dataFolder() {
return dataFolder_;
}

QString FilePaths::profileFolder() {
return profileFolder_;
}

但是这不起作用 - 我在所有静态变量上都收到“未解析的符号错误”链接器错误。所以我以这种方式将这些变量添加到 C++ 文件中:

#include "FilePaths.h"

QString FilePaths::dataFolder_ = "";
QString FilePaths::profileFolder_ = "";

QString FilePaths::dataFolder() {
return dataFolder_;
}

QString FilePaths::profileFolder() {
return profileFolder_;
}

这行得通,但我不明白为什么。

为什么这些静态变量需要定义两次?或者也许我不是在定义它们而是在初始化它们?但是为什么还需要这样做呢?还是我应该以不同的方式编写类(class)?

最佳答案

一个是定义,一个是声明。不同之处在于声明可以出现多次,对于不在类中的变量,可能永远不会出现,而定义只能出现一次。

需要单独的声明和定义的原因是古老的历史,它基本上根本不必那样做,但正是这样,以便 C++ 与 C 兼容,C++ 被设计为编译于 1970 年代。

关于c++ - 为什么C++中静态变量需要声明两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6967713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com